There is a huge amount of government and socio-economic data in general gathered at the county level. It would be nice to be able to plot that data on an desktop or online map (e.g., Google maps). This morning I posted a question on the Sunlight labs mailing list asking for some help:
I would like to display US counties on a Google map based on some scalar value (e.g., population) for each county and a color map that associates values to colors. Does anyone know of a library that makes this easy to do? (I'm interested in doing the same for other adminstrative regions, such as zip codes and congressional districts.)
(http://groups.google.com/group/Google-Maps-API/browse_frm/thread/fbc9266d4144e8fd/dbf74647b8baf8d1 contains a good discussion of the topic — and I have found other references that might be helpful, but I have not seen the functionality I'm looking for distilled down into an easy-to-use library.)
Building a ground overlay
When I tweeted my question, I got a very helpful response from Sean Gillies:
That's a lot of polygons (3489, see http://sgillies.net/blog/870/a-more-perfect-union-continued/) to draw in the browser. Make an image layer with OpenLayers?
Sean confirmed what I was thinking that I had to compute a static image to use as an overlay — otherwise drawing 3000+ polygons with slow down Google maps prohibitively.  In fact, in many ways, I've been trying to use the approach I've seen from the demo gallery of the Google Maps API v3:  John Coryat's ProjectedOverlay example, which "uses OverlayView to render an image inside a given bounding box (LatLngBounds) on top of the map". (You can look at the overlay image (.png) directly and reuse ProjectedOverlay.js)
So one approach would be to calculate a png of the counties (colored appropriately), and this png would provide an efficient way to display county data. I had started down this road a while ago — Sean's post gave me some more direct guidance in how to create a useful Python-based desktop GIS setup to be able to handle such tasks as creating my desired map in a png form. To be honest, I've found the whole open source GIS world fairly confusing. I bought and read part of Gary Sherman's Desktop GIS: Mapping the Planet with Open Source Tools. (Illustrated edition. Pragmatic Bookshelf, 2008) and was considering installing FWTools, GRASS GIS, and Quantum GIS. His post alerted me to OSGeo.org, and convinced me to try OSGeo4W , which is
a binary distribution of a broad set of open source geospatial software for Win32 environments (Windows XP, Vista, etc). OSGeo4W includes GDAL/OGR, GRASS, MapServer, OpenEV, uDig, QGIS as well as many other packages (about 70 as of summer 2008).
I installed OSGeo4W but have not been able to figure out the Python bindings (and hence can't yet try out the code that Sean posted).  Neither has the Python setup from FWTools 2.4.3 worked for me. My next steps is to follow the instructions at Python Package Index : GDAL 1.6.1 to see whether I'll have better luck.
Joshua Tauberer's WMS service
Joshua Tauberer of Govtrack.us responded to my query by referring me to his experimental WMS service, which produces WMS layer for entities ranging from Congressional and state districts to counties.  I modified one of the examples that to try to plot the counties.  For some reason, not all the counties show up yet. Still, this approach is very promising since it would save me the work of calculating the coordinates of the county boundaries to begin with. I have to come back to study and apply the techniques documented at WMS Server API Documentation.
Other things to study further
- Marten Hogeweg pointed me to a number of ESRI resources, including ArcGIS Server Javascript API for Google Maps Resource Center
- Kevin Koehler pointed to Patchwork Nation: American communities in a time of change| The Christian Science Monitor, a great set of Flash-based maps displaying data by counties. I know that you buy a Flash library to create county maps, such as USA Statistical Flash Map.
{ 1 } Comments