Using vmap data with gdal/ogr
First I grabbed the vmap0 world dataset from:
wget -c http://geoengine.nga.mil/ftpdir/archive/vpf_data/v0sas.tar.gz
wget -c http://geoengine.nima.mil/ftpdir/archive/vpf_data/v0soa.tar.gz
wget -c http://geoengine.nima.mil/ftpdir/archive/vpf_data/v0eur.tar.gz
wget -c http://geoengine.nima.mil/ftpdir/archive/vpf_data/v0noa.tar.gz
The -c option will let you continue the download if interrupted - just rerun the same command and it will pick up where it left off.
Next read this:
http://www.gdal.org/ogr/drv_ogdi.html
And this:
http://www.terragear.org/docs/vmap0/coverage.html
And finally this:
http://www.mapability.com/index1.html?http&&&www.mapability.com/info/vmap0_index.html
——-
Installing ogdi (needed for gdal to read vmap):
sudo apt-get install ogdi-bin libogdi3.2-dev
NOTE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Its very important that the vmap data is extracted into a path with no upper case characters
NOTE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Listing the available layers using odgi_info:
ogrinfo -ro -so gltp:/vrf/home/timlinux/gisdata/WorldData/vmap_raw_vpf/v0sas_5/vmaplv0/sasaus
GET_TABLE_ELEMENT: Invalid field number -1
INFO: Open of `gltp:/vrf/home/timlinux/gisdata/world_data/vmap_raw_vpf/v0sas_5/vmaplv0/sasaus’
using driver `OGDI’ successful.
1: libref@libref(*)_line (Line String)
2: libreft@libref(*)_text (Point)
3: tileref@tileref(*)_area (Polygon)
4: tilereft@tileref(*)_text (Point)
5: polbndp@bnd(*)_point (Point)
6: barrierl@bnd(*)_line (Line String)
7: coastl@bnd(*)_line (Line String)
8: depthl@bnd(*)_line (Line String)
9: polbndl@bnd(*)_line (Line String)
10: oceansea@bnd(*)_area (Polygon)
11: polbnda@bnd(*)_area (Polygon)
12: bndtxt@bnd(*)_text (Point)
13: dqarea@dq(*)_area (Polygon)
14: dqline@dq(*)_line (Line String)
15: elevp@elev(*)_point (Point)
16: contourl@elev(*)_line (Line String)
17: dangerp@hydro(*)_point (Point)
18: miscp@hydro(*)_point (Point)
19: aquecanl@hydro(*)_line (Line String)
20: miscl@hydro(*)_line (Line String)
21: watrcrsl@hydro(*)_line (Line String)
22: inwatera@hydro(*)_area (Polygon)
23: hydrotxt@hydro(*)_text (Point)
24: extractp@ind(*)_point (Point)
25: misindp@ind(*)_point (Point)
26: storagep@ind(*)_point (Point)
27: extracta@ind(*)_area (Polygon)
28: fishinda@ind(*)_area (Polygon)
29: indtxt@ind(*)_text (Point)
30: lndfrml@phys(*)_line (Line String)
31: grounda@phys(*)_area (Polygon)
32: landicea@phys(*)_area (Polygon)
33: seaicea@phys(*)_area (Polygon)
34: phystxt@phys(*)_text (Point)
35: builtupp@pop(*)_point (Point)
36: mispopp@pop(*)_point (Point)
37: builtupa@pop(*)_area (Polygon)
38: mispopa@pop(*)_area (Polygon)
39: poptxt@pop(*)_text (Point)
40: aerofacp@trans(*)_point (Point)
41: rryardp@trans(*)_point (Point)
42: transtrc@trans(*)_point (Point)
43: mistranl@trans(*)_line (Line String)
44: railrdl@trans(*)_line (Line String)
45: roadl@trans(*)_line (Line String)
46: traill@trans(*)_line (Line String)
47: transtrl@trans(*)_line (Line String)
48: dqline@trans(*)_line (Line String)
49: transtxt@trans(*)_text (Point)
50: utilp@util(*)_point (Point)
51: pipel@util(*)_line (Line String)
52: utill@util(*)_line (Line String)
53: dqline@util(*)_line (Line String)
54: utiltxt@util(*)_text (Point)
55: cropa@veg(*)_area (Polygon)
56: grassa@veg(*)_area (Polygon)
57: swampa@veg(*)_area (Polygon)
58: treesa@veg(*)_area (Polygon)
59: tundraa@veg(*)_area (Polygon)
—-
Converting one layer to .shp using ogr2ogr:
ogr2ogr /tmp/tundra.shp gltp:/vrf/home/timlinux/gisdata/world_data/vmap_raw_vpf/v0sas_5/vmaplv0/sasaus ‘tundraa@veg(*)_area’
Converting the layers in batch:
#!/bin/bash
MODE=pgĀ #or pg
DB=vmap0 #only used for pg
# Note: its important that the DATAPATHs should have no terminating /
AFR=home/timlinux/gisdata/world_data/vmap_raw_vpf/v0soa_5/vmaplv0/soamafr
AUS=home/timlinux/gisdata/world_data/vmap_raw_vpf/v0sas_5/vmaplv0/sasaus
USA=home/timlinux/gisdata/world_data/vmap_raw_vpf/v0noa_5/vmaplv0/noamer
EUR=home/timlinux/gisdata/world_data/vmap_raw_vpf/v0eur_5/vmaplv0/eurnasia
for DATAPATH in $AFR $AUS $USA $EUR
do
for LAYER in `ogrinfo -ro -so gltp:/vrf/${DATAPATH} | awk ‘{print $2}’`
do
LAYERBASE=`echo ${LAYER} | sed ‘s/@\S*$//g’`
echo $LAYER — $LAYERBASE
if [ “$MODE” == “shp” ]
then
SHP_COMMAND=”ogr2ogr -a_srs EPSG:4326 /tmp/${LAYERBASE}.shp gltp:/vrf/${DATAPATH} ‘${LAYER}’”
eval $SHP_COMMAND
else # pg
PG_COMMAND=”ogr2ogr -a_srs EPSG:4326 -f PostgreSQL PG:dbname=${DB} -update -append -nln ${LAYERBASE} gltp:/vrf/${DATAPATH} ‘${LAYER}’”
eval $PG_COMMAND
fi
done
done
Note the above script if used in shp mode will result in shp files trying to overwrite each other. I’ll fix that one day when I care enough….