I've had some time and some funding, so I've roughed in my proof of concept on a D6 version of Geo. In traditional geek style, the most informative descriptions are in my commit messages: http://drupal.org/project/cvs/147736
Basically, my goal is to demystify "geospatial", while integrating it as much as possible within Drupal. It needn't be an academic exercise to get this data working properly, so I've tried to keep things simple. The goals/implementation do the following:
1) Provide an API module, which makes available some functions such as geo_db_add_field, and others. It also keeps track of the capabilities of the various installed backends, and provides some Views 2 handlers.
2) Provide CCK fields that can contain geospatial data. The use case here would be to store user-generated data such as points ( e.g. addresses ), lines ( e.g. an uploaded track ), or polygons ( e.g. a hand-drawn shape ). I have rearchitected this from the original implementation so that it now works closely with CCK itself. Basically, you let CCK create your field's table, and then we sneak in and add a geospatial column.
3) Import externally-provided shape data, and make it work in harmony with Drupal's existing data. I wrote an import utility this week so that you can download zip files from any source, and upload them to your Drupal site (!).
4) Using the imported data: You can create CCK fields that match a name/value pair from the column, for example "state id/state name", and users can add data using select lists. This key is then used to link your content to the imported geospatial data, so that your queries can use Contains, Within, etc. functionality.
While somewhat crufty and fallible, this code is all pretty much in working order. I'm working on this project in conjunction with http://drupal.org/project/votesmart , and using Geo to find district- and precinct-level data based on a user's address. I can import legislative district data from census.gov, automagically create content types for candidates using Vote Smart, assign them a district ( e.g. 61A ), and then search for representatives using Views filters.
As long as you're cool with typing "POINT(-94.14796237931 46.438258841379)" into your exposed filters, it's working pretty well ;)
I'm seeking input and developer-level feedback. It's by no means ready for end users, but I'm interested in extra pairs of eyes at this point.
Thanks, see you next week!
Allie
