More Geocoding work

The Geo extension is turning into a general purpose GIS extension. This will provide us with the tools we need for the Digital Concord project.

I’m currently integrating the extension with the GeoRuby gem, which will be a dependency.

In addition to the geo:coding type, I’ll be introducing the geo:point, geo:envelope, and a few other types, along with some operations that make sense for them.

Two geo:envelopes add together to make the smallest envelope that contains both. Likewise, an envelope added to a point should return the smallest envelope containing both. Adding two points can result in a line (but three points should result in an envelope — a line plus a point not on the line should result in an envelope), while multiplying to points can result in an envelope (think cross product of vectors). The difference of two points should result in a distance (in meters, assuming a perfectly spherical earth, which isn’t always the best assumption).

The GeoRuby gem provides tools for managing GIS data in a database, so I’ll be working on how to get the RDF storage engine flexible enough that I can extend it to store and operate on GIS data using the database representation. I consider that an optimization though, so that’s secondary to getting the semantics working right.

That’s today’s work subject to change.