OSM-datan suoraluku Geofabrikin zippien sisältä

GDAL:ssa on pari kätevää ominaisuutta, joiden olemassaolo on hyvä pitää ainakin mielessä:
A) Se voi lukea tiedostoja verkon yli
B) Se voi lukea tuntemiaan tiedostomuotoja suoraan zip-tiedostoista
A+B) Se voi lukea tuntemiaan tiedostomuotoja verkon yli suoraan zip-tiedostoista ilman, että niitä tarvitsee erikseen ladata ja purkaa sitten omalla koneella.

Jos joskus sattuisi tarvitsemaan esimerkiksi OSM:n teitä, joita on saatavilla Geofabriikin shapefile-zipeissä, mutta samoihin zippeihin kuuluvat muut teemat eivät kiinnosta, niin pelkät tiet voi hakea näin:

ogr2ogr -f "ESRI Shapefle" OSM_tiet.shp /vsizip/vsicurl/http://download.geofabrik.de/europe/finland-latest.shp.zip roads

Ja jos sattuisi haluamaan OSM:in tiet suomalaisen ETRS-TM35FIN-järjestelmän mukaan ja MapInfo tab -muodossa, niin sekin onnistuu yhdellä komennolla.

ogr2ogr -f "MapInfo File" -t_srs epsg:3067 OSM_tiet.tab /vsizip/vsicurl/http://download.geofabrik.de/europe/finland-latest.shp.zip roads

Tarkistin välityspalvelimen avulla, että GDAL ei todellakaan lataa koko zippiä koneelle ja pura haluttuja tiedostoja sen jälkeen paikallisella koneella, vaan se pyytää vain haluamansa pätkän zip-tiedostosta käyttämällä http-pyynnössä tämän näköisiä parametreja: Range: bytes=30097408-30130175. Roads-datan esimerkikissä Geofabrikista haettiin dataa 77 megatavua, kun finland-latest.shp.zip-tiedoston koko palvelimella on 187 megaa. Säästyi siis 110 megatavua verkkoliikennettä ja vastaava määrä aikaa.

1.6.0 versiossa tuettuna “gzip’ed file (ending with .gz) and ZIP archives (ending with .zip)”, 1.8.0 versiossa myös “file inside a .tar (uncompressed) or a .tar.gz/.tgz (compressed) archive” (lähde: http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip, Huomaa lopusta: “There’s no easy way of knowing if an OGR driver supports VSI virtual file handlers such as vsizip, vsicurl, etc”)