En este articulo se pretende recoger, describir y diferenciar las principales librerías de Python para GIS más utilizadas para trabajar con geoinformación y para realizar análisis espacial.
El lenguaje de programación Python goza de una tremenda popularidad. Su vinculación con los GIS es innegable: aporta grandes ventajas en la gestión y el análisis de información espacial.
Python: un aliado de los GIS
Python es uno de los lenguajes de programación más extendidos dentro del desarrollo de software y del análisis de datos.
En clave GIS, el lenguaje Python puede utilizarse como una potente herramienta para manipular y realizar análisis espacial avanzado mediante una serie de librerías específicamente desarrolladas para tales fines.
En cierto modo, Python rivaliza en popularidad e importancia con lenguajes como SQL para trabajar con Bases de Datos Espaciales u otros lenguajes vinculados específicamente a la programación web como JavaScript, utilizado habitualmente para realizar aplicaciones y visores de mapas web.
Python es uno de los lenguajes principales y fundamentales dentro del ámbito GIS, tal y como destacamos en nuestro artículo sobre los principales lenguajes de programación GIS.
La clave en el uso de Python frente a un GIS de escritorio convencional radica en la facilidad para visualizar y manipular datos mediante scripting, adaptar los geoprocesos de análisis o diseñar nuevos, establecer rutinas de trabajo con los datos espaciales que ahorren tiempo y reducir los tiempos de ejecución de tareas, entre otros.
Fortalezas y aplicaciones de Python como lenguaje de programación
La popularidad creciente de Python no es casualidad: existen ciertos aspectos del lenguaje que lo apuntalan como uno de los lenguajes más usados después de JavaScript y Java.
Entre esos aspectos que hacen fuerte a Python destacan:
- su relativa facilidad de aprendizaje debido a la sencillez de su sintaxis y a las estructuras de datos que utiliza.
- ser multiparadigma, pero especialmente por el hecho de poder adaptarse a la programación orientada a objetos.
- el carácter modular: es fácilmente ampliable mediante paquetes o librerías.
- la capacidad de ejercer como lenguaje «pegamento» o «puente», es decir, por tratarse de un lenguaje apto para trabajar como conexión entre componentes de software distinto o entre plataformas.
- un gran soporte, popularidad y comunidad activa que lo respalda, lo aprende y lo utiliza a diario.
Además, a diferencia de otros lenguajes de programación, Python es claramente multipropósito: cubre y es susceptible de ser aplicado a un enorme rango de escenarios, proyectos y tareas precisamente derivado de su naturaleza modular.
Su versatilidad, es decir, la capacidad de ser aplicado a prácticamente cualquier campo y ante cualquier propósito, es claramente otro de sus principales puntos fuertes.
Python permite ser utilizado en programación web en el lado servidor, se utiliza para acceder y gestionar bases de datos, para programar aplicaciones de escritorio y desarrollar interfaces.
Además, tiene enormes aplicaciones en estadística y análisis de datos, es imprescindible en Big Data y Machine Learning, se utiliza también para el desarrollo de aplicaciones científicas e incluso en el ámbito de los videojuegos.
Principales aplicaciones y usos de Python para GIS
Cuando hablamos de las aplicaciones de Python dentro del ámbito GIS o geoespacial, cabe destacar su utilidad ante dos propósitos generales:
- Automatizar tareas repetitivas mediante scripts o plugins, centrándose en la propia gestión y el tratamiento de la geoinformación.
- Realizar análisis espacial avanzado, expandiendo las herramientas de análisis convencionales de los GIS de escritorio mediante librerías específicas.
Librerías Python GIS para análisis espacial
A continuación listamos las principales (que no únicas) librerías de Python especialmente diseñadas y utilizadas para tratar con datos GIS tanto vectoriales como ráster, así como para realizar análisis espacial.
GDAL/OGR: la librería de cabecera
GDAL es el acrónimo de la librería Geospatial Data Abstraction Library. Fue creada en los años 90 por Frank Warmerdam y publicada originalmente en el año 2000.
Por su parte, el nombre OGR proviene de OpenGIS Simple Features Reference Implementation, nombre olvidado y adaptado posteriormente a OGR Simple Features Library.
Las principales diferencias entre ambas librerías se deben a su aplicación: GDAL se orienta al procesamiento de datos de tipo ráster provenientes de más de 200 formatos distintos, mientras que OGR se utiliza para leer, escribir, proyectar y convertir datos GIS de carácter vectorial, soportando también una gran cantidad de formatos distintos.
Se puede acceder al listado de todos los formatos GIS ráster soportados por GDAL introduciendo en la consola:
ogr2ogr --formats
Por su parte, podemos conocer el listado de formatos GIS ráster utilizados en OGR haciendo uso del comando:
gdalinfo --formats
El hecho de hacer referencia a ambas librerías como una única se debe a que la instalación de GDAL lleva implícita o da acceso a OGR, al depender en ciertos aspectos de la primera. En cierto modo podríamos decir que OGR es la «sublibrería» de GDAL dedicada al trabajo con datasets vectoriales.
GDAL/OGR es una de las principales librerías de acceso a datos de carácter espacial y de las más utilizadas, no sólo por programadores, sino también por otras librerías de Python y aplicaciones de software diverso.
Entre las distintas aplicaciones que se nutren de esta librería se sitúan: MapServer, GRASS, QGIS, ArcGIS, FME…
Shapely: para manipular datos vectoriales
La librería Shapely para Python está enfocada en la manipulación y el análisis de datos vectoriales. Se basa en GEOS, una librería escrita en C++ que provee de algoritmos a PostGIS, además de a otras librerías como sf para el lenguaje R.
Shapely trabaja básicamente con elementos geométricos de tipo Punto, Línea y Polígono.
Asimismo, también admite geometrías basadas en colecciones de elementos de carácter Multipunto, Multilínea y Multipolígono.
Permite, entre otros, realizar análisis geométricos:
- basados en las características y la posición de los elementos involucrados (calcular coordenadas, centroides, distancias, áreas, perímetros, buffers o áreas de influencia…).
- basados en la relación espacial entre los elementos (intersección, cruce, inclusión, exclusión…) en base a predicados booleanos (verdadero o falso).
Tiene un manual de usuario completo y de fácil comprensión, muy recomendable para familiarizarse con la librería y consultar ante dudas o para visualizar ejemplos. En GIS StackExchange pueden resolverse dudas siguiendo la etiqueta «shapely».
Fiona: para leer y escribir archivos vectoriales
El propósito principal de la librería de Python Fiona es la lectura y escritura de archivos geométricos de tipo vectorial.
Generalmente se utiliza en combinación con otras librerías como Shapely para el procesado y la manipulación de información geográfica vectorial.
Para el trabajo en exclusiva con archivos en formato shapefile de ESRI puede utilizarse la librería pyshp.
La librería para Python pyshp es tan simple como su propósito: está escrita estrictamente para leer y/o escribir archivos shapefile de ESRI, corriendo directamente sobre Python.
GeoPandas: facilitando el trabajo con datos espaciales
La librería GeoPandas es la extensión de la librería Pandas de Python, que permite acceder y trabajar con las estructuras y tipos de datos de esta librería en operaciones de tipo espacial.
Geopandas, no obstante, depende de las otras dos librerías vectoriales mencionadas: para acceder a archivos depende de Fiona y para realizar operaciones geométricas depende de Shapely.
Así pues, los objetos geométricos válidos son exactamente los mismos que usa Shapely: punto, línea y polígono además de las colecciones de objetos. No obstante, GeoPandas introduce dos estructuras de datos distintas, heredadas y adaptadas a las correspondientes referencias espaciales de la librería original Pandas: GeoSeries y GeoDataFrame.
Podría decirse que ambas estructuras funcionan análogamente a una base de datos. GeoSeries es un elemento vectorial con capacidad de reunir conjuntos de elementos geométricos como un único objeto. GeoDataFrame es la estructura tabular de los datos contenidos en GeoSeries.
GeoPandas También permite graficar datos y mostrar visualizaciones de mapas, en este caso mediante matplotlib. Puedes echar un vistazo a nuestro artículo sobre generación de mapas con GeoPandas y matplotlib para conocer más acerca de éstas y otras librerías para visualización de datos espaciales y confección de mapas en Python.
Pyproj: para trabajar con proyecciones
La librería pyproj consiste en la interfaz de la librería PROJ4 de OSGeo traída a Python desde C y su uso está centrado básicamente en la proyección y conversión de geometrías entre sistemas de referencia de coordenadas.
A continuación, un simple ejemplo de la transformación de las coordenadas de un punto de un SRC a otro:
# Importar la librería pyproj
from pyproj import Proj, transform
# Definimos los SRC involucrados
etrs89 = Proj(init='epsg:25830') # SRC origen
wgs84 = Proj(init='epsg:4326') # SRC destino
# Indicamos coordenadas X e Y del punto a transformar
x, y = (209811.26, 4374736.23)
# Aplicamos transformación, pasando como parámetros
# las 3 variables definidas anteriormente
coordenadas = transform(etrs89, wgs84, x, y)
# Mostramos el resultado
print coordenadas
(-6.373443550273573, 39.47330540167159)
Permite trabajar con cientos de sistemas de coordenadas distintos, realizando cálculos y transformaciones tanto cartográficas como geodésicas mediante las clases Proj y Geod respectivamente.
Rasterio: para manipular imágenes ráster
El propio nombre ofrece pistas acerca de su cometido: la librería Rasterio para Python permite leer, manipular y escribir archivos de tipo ráster.
Es una buena alternativa a GDAL como librería para trabajar con imágenes ráster pues permite ejecutar procesos similares escribiendo menos código, con una sintaxis algo más sencilla y elegante.
Algunos artículos cómo el de Martin en GIS-Blog o el de Andrew Cutts en ACGeospatial apuntan a que, si bien el tiempo de ejecución de ambas librerías es similar, en la mayoría de ocasiones GDAL tiene un mejor desempeño que Rasterio cuando se trata de trabajar con imágenes de satélite o capas ráster desde Python.
Rasterio se construye en base a las funcionalidades de diversas librerías de Python como Numpy o la propia GDAL.
Puedes encontrar toda la información acerca de su funcionamiento y particularidades en su documentación, bastante completa y con ejemplos gráficos para mayor utilidad.
Qué tal, una duda, debo hacer una correlación de variables de temperatura y precipitación (de varias estaciones meteorológicas) con datos de reanálisis para aproximadamente 60 años, habrá alguna herramienta para automatizar el proceso en Qgis, o alguna manera de realizarlo a través de datos CDO?