Proyectar varios shapefiles en batch con OGR
9 de Abril de 2012
GDAL es una biblioteca open source en C++ que permite leer y editar varios formatos raster. Su equivalente para los datos vector es OGR (OGR esta incluido en GDAL). GDAL/OGR es a menudo llamada la "navaja Suiza" del geomático tanto que es potente y sus posibilidades son extendidas. Eso explica porque todos estos programas (open source y propietarios) la usan.
Hoy día descargue los datos OpenStreetMap de Lima en formato shape desde la plataforma CloudMade. La carpeta contiene 7 archivos:
$ ls *.shp lima_administrative.shp lima_highway.shp lima_natural.shp lima_water.shp lima_coastline.shp lima_location.shp lima_poi.shp |
Como su nombre lo indica, la comanda ogrinfo permite obtener informaciones sobre una capa:
$ ogrinfo -so lima_highway.shp lima_highway INFO: Open of `lima_highway.shp' using driver `ESRI Shapefile' successful. Layer name: lima_highway Geometry: Line String Feature Count: 77184 Extent: (-77.915675, -13.398236) - (-75.433868, -10.169412) Layer SRS WKT: GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], TOWGS84[0,0,0,0,0,0,0], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]] TYPE: String (28.0) NAME: String (42.0) ONEWAY: String (4.0) LANES: Real (11.0) |
Esta capa (y las otras tampoco) no esta proyectada y su sistema de referencia espacial es el WGS 84 que tiene como unidad el grado decimal.
Cuando es adecuado, siempre prefiero trabajar con datos proyectados y como unidad el metro. En Lima la proyección mas usada es UTM zona 18 Sur.
Con OGR es posible proyectar varias capas en una sola linea de código:
En Linux:
$ #Primero creo una nueva carpeta "utm_18s" donde voy a poner mis capas proyectadas $ mkdir utm_18s $ for i in $(ls *.shp); do ogr2ogr -s_srs EPSG:4326 -t_srs EPSG:32718 utm_18s/$i $i; done |
Hecho!
Como la capa "lima_location" contiene el caracter ":" en el nombre de varios de sus atributos, me salío el mensaje siguiente:
Warning 6: Normalized/laundered field name: 'ADDR:CITY' to 'ADDR_CITY' Warning 6: Normalized/laundered field name: 'ADDR:HOUSE' to 'ADDR_HOUSE' Warning 6: Normalized/laundered field name: 'ADDR:FLATS' to 'ADDR_FLATS' Warning 6: Normalized/laundered field name: 'ADDR:POSTC' to 'ADDR_POSTC' Warning 1: One or several characters couldn't be converted correctly from UTF-8 to ISO-8859-1 This warning will not be emitted anymore |
Pero eso no afecta la ejecución de la comanda. OGR reemplaza el caracter ":" por el caracter "_".
ogr2ogr es la comanda que permite (entre otros) proyectar las capas. -s_srs es el parametro que indica el sistema de referencia espacial (SRS) de la capa inicial (WGS 84 tiene como código EPSG, 4326). -t_srs, para el SRS de la capa "output".
En Windows:
Para usar GDAL/OGR en Windows, lo mas facil es de instalar FWTools. Una vez instalado, en la consola FWTools:
> mkdir utm_18s > for %i in (*.shp) do (ogr2ogr -s_srs EPSG:4326 -t_srs EPSG:32718 utm_18s%i %i) |