Geospatial Data Abstraction Library (GDAL) es una biblioteca para leer y escribir datos geoespaciales en varios formatos raster y vectoriales. En ocasiones, también es denominada GDAL/OGR, en donde GDAL se refiere a la funcionalidad para datos raster y OGR (sigla antes usada para OpenGIS Simple Features Reference Implementation) a la correspondiente a datos vectoriales. En este documento, se utilizará la sigla GDAL para referirse a ambos casos. GDAL es distribuida por la Open Source Geospatial Foundation (OSGeo) con una licencia X/MIT.
GDAL cuenta con un único modelo abstracto de datos raster y un único modelo abstracto de datos vectoriales, lo que permite programar aplicaciones geoespaciales sin tener que ocuparse de las particularidades de cada formato que se utilice (GeoTIFF, NetCDF, ESRI Shapefile, GeoJSON, etc.).
A pesar de que GDAL está programada en C/C++, cuenta con una interfaz de programación de aplicaciones (API) para varios lenguajes de programación, incluyendo C, C++, Python y Java. Además, ofrece un conjunto de utilitarios de línea de comandos cuyas distribuciones binarias están disponibles para varios sistemas operativos, incluyendo Windows, macOS y Linux. Estas API y los utilitarios también están incluídos en plataforma de ciencia de datos llamada Anaconda, la cual cuenta con versiones para todos los sistemas operativos mencionados.
Los utilitarios de línea de comandos de GDAL permiten ejecutar tareas de geoprocesamiento y de conversión entre formatos geoespaciales sin utilizar una interfaz gráfica o un lenguaje de programación. Están disponibles para varios sistemas operativos, incluyendo Windows, macOS y Unix/Linux.
Creación de un ambiente Conda
A continuación, se crea un ambiente Conda en el que se instalan los utilitarios de línea de comandos de GDAL y se presentan varios ejemplos de su uso.
# Actualización de Conda
conda update -n base -c defaults conda
# Creación de un ambiente de nombre "comandos-gdal"
conda create -n comandos-gdal
# Activación del ambiente
conda activate comandos-gdal
# Instalación de paquetes
# Utilitarios de línea de comandos de GDAL desde el canal conda-forge
conda install -c conda-forge gdal
Los utilitarios de GDAL comparten una serie de opciones comunes que pueden visualizarse con la opción -- help-general
. Por ejemplo:
ogrinfo --help-general
Generic GDAL utility command options:
--version: report version of GDAL in use.
--license: report GDAL license info.
--formats: report all configured format drivers.
--format [format]: details of one format.
--optfile filename: expand an option file into the argument list.
--config key value: set system configuration option.
--debug [on/off/value]: set debug level.
--pause: wait for user input, time to attach debugger
--locale [locale]: install locale for debugging (i.e. en_US.UTF-8)
--help-general: report detailed help on general options.
Para obtener ayuda acerca de un comando particular, puede usarse la opción -- help
. Por ejemplo:
ogrinfo --help
El comando ogrinfo despliega información acerca de una fuente de datos vectoriales.
Los siguientes comandos despliegan información sobre la capa de países de Natural Earth, tanto para el formato comprimido como para el formato shapefile. En el caso comprimido, note el uso de /vsizip/, para sistemas de archivos virtuales.
# Información sobre la capa comprimida en formato ZIP
ogrinfo -al -so /vsizip/ne_110m_admin_0_countries.zip
# Información sobre la capa descomprimida en formato shapefile
ogrinfo -al -so ne_110m_admin_0_countries.shp
El comando ogr2ogr realiza conversiones entre formatos de fuentes de datos geoespaciales. A la vez, realiza otras operaciones como selección de atributos y geometrías, filtrado por criterios espaciales y no espaciales, reproyección y validación de geometrías, entre otras.
Conversión entre formatos:
# Despliegue de la lista de formatos vectoriales soportados por GDAL
ogr2ogr --formats
# Conversión de SHP a GeoJSON
ogr2ogr -f GeoJSON ne_110m_admin_0_countries.geojson ne_110m_admin_0_countries.shp
Descarga desde un servicio WFS, validación de geometrías y reproyección:
# Descarga de la capa de cantones del IGN en el SNIT (https://www.snitcr.go.cr/)
ogr2ogr -f GeoJSON -s_srs EPSG:5367 -t_srs EPSG:4326 -makevalid cantones.geojson WFS:"http://geos.snitcr.go.cr/be/IGN_5/wfs" "IGN_5:limitecantonal_5k"
# Información sobre la capa descargada
ogrinfo -al -so cantones.geojson
Filtrado por atributos:
# Filtrado y extracción de los cantones con área >= 2000 km2
ogr2ogr -where "area >= 2000" cantones-grandes.geojson cantones.geojson
# Filtrado y extracción de los cantones de la provincia de Heredia
ogr2ogr -where "provincia = 'Heredia'" cantones-heredia.geojson cantones.geojson
# Filtrado y extracción de los cantones con área >= 2000 km2 de la provincia de Limón
ogr2ogr -where "area >= 2000 AND provincia = 'Limón'" cantones-grandes-limon.geojson cantones.geojson
Selección de atributos y filtrado:
# Extracción de los campos de provincia, cantón y área de los cantones de la provincia de Alajuela
ogr2ogr -select "provincia, canton, area" -where "provincia = 'Alajuela'" cantones-alajuela.geojson cantones.geojson