VMap0 is an incredible set of geospatial data. Unclassified and published by the US Military National Geospatial-Intelligence Agency, the same agency that publishes the GEONet Names Server (which backs the worldKit geocoder).

The breadth and depth of the data is, well, I’ll just paste what mapability has to say…

In a world of secrets and closed access to data, it comes as a pleasant surprise to discover that there is a huge quantity of data available to anyone, free of charge. This data has complete word coverage, and an astonishing range of data types all gathered together in one package. Need the national coastlines, elevation contours, roads and railways for any country you can think of ? They are there, of course. Populated places, administrative boundaries, inland waterways ? There too. But how about the more obscure data types – Lighthouse, Fish Farm, Cease-Fire Line, Oasis, Wharf, Communication Tower ? All there as well. You can even find out where the cranberry bogs are located in your area !

There are several desktop free and commercial visualizers of this data .. but I’m interested in unlocking this data for web based mapping and worldKit. One option is the open source mapserver, which Schuyler and Jo used to present VMap0 data on locative.us.

But how to get at the actual geo objects, the polygons, lines and points in this data? First I downloaded the huge tarballs, from links on mapability. The entire mapability tutorial gives a great introduction to the available data, and is a useful guide for doing queries later on.

From hints on irc geo channel, I found that the OGR toolset can read vector map files, including VMap0. Thankfully, OGR plus other necessary and supporting libraries and tools (including mapserver) has been packaged and compiled in FWTools. Downloaded and installed without problem.

Then I had to find out how to use these powertools. This description of vector support in OGDI provided the last piece of the puzzle. I ran a command similar to

ogrinfo gltp:/vrf/usr4/mpp1/v0eur/vmaplv0/eurnasia ‘polbnda@bnd(*)_area’

and out came loads of parseable text of the coordinates for all internal country borders in Europe and North Asia.

For a demo, I produced RSS from two queries for maps of airports in Europe and North Asia and regions in Sweden. There is a lot of data, so it might take a moment to load. The polygons in the Sweden map demo some of the new features under development.

Not sure of the best way to build this data into worldKit. Thinking about: a service to convert VMap0 themes into RSS files. Or into preparsed swf’s. Or a mapserver instance for use with MapProxy. If necessary, wonder how to smooth out the polygons to lower resolution, and remove some of the myriad tiny islands.

Another thing to investigate is the thoroughness of the data. I can’t seem to generate internal borders for north america. Layers like Power Transmission Lines has very spotty coverage, Military Bases are not present at all (not surprising really). Also, a problem to solve is how to join regions split by the tiling of the data set (the source of the vertical and horizontal lines in the Sweden map).