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)


Twittear