Librerías

Autores

Introducción

En esta sección se va a cubrir todo el conjunto de paquetes que ofrecen funcionalidades avanzadas para cualquier sistema de información en la forma de librerías. Como se verá, algunos de estos proyectos han cogido protagonismo a lo largo del tiempo ofreciendo no sólo una interfaz de programación (o API en inglés), si no también un conjunto de herramientas propias. Dado el gran abanico que representan, se dividirá esta sección en otras cuatro secciones en las que se agrupan librerías con características y funcionalidades similares. Así, tendremos la siguiente división:

  • Geoprocesamiento: Aquí se incluyen todas las herramientas y librerías que proporcionan métodos para la manipulación de información geoespacial como GDAL/OGR, GEOS, JTS/GeoTools, Geoscript o Shapely.
  • Routing: Estas librerías ofrecen enrutamiento geoespacial y funcionalidad de análisis de redes. Comprendemos aquí las librerías OSRM, pgRouting y OpenTripPlanner
  • LiDAR: Aquí se hablará sobre aquellas librerías y conjunto de herramientas capaces de trabajar con datos LiDAR. Destacan en esta categoría las librerías libLAS, LASlib/LASzip, SPDlib, PDAL y LASpy.
  • Varios: Por último, consideramos dos librerías aisladas, una para el renderizado como Mapnik y otra para la automatización procesos para la publicación de información como GeoBatch.

La siguiente tabla muestra las principales características las librerías tratadas en este artículo. Información detallada sobre la estructura de la tabla se encuentra en la introducción.

Información general sobre librerías

Importante

Se puede consultar la versión más reciente, así como los enlaces asociados y anotaciones en la sección de Librerías del wiki de OSGeo.

Software

Cualquier librería LiDAR presentada en este documento se puede utilizar para la transformación de formatos láser, pero quizás la más adecuada para ello es PDAL, ya que está pensada especialmente para ello. Es más, PDAL trata de mejorar la librería libLAS cuyo desarrollo lleva parado algún tiempo. A su vez, libLAS se generó a partir de una versión anterior de LASlib, aunque estas últimas han seguido evolucionando hacia una potente herramienta de procesado. Cabe notar, para evitar equívocos, que la librería LASlib es completamente libre, mientras que las herramientas (LASTools) tienen el código cerrado pero su utilización está autorizada para usos no comerciales. Además de lectura y escritura de datos y la transformación entre formatos, SPDlib incorpora herramientas para procesar y analizar datos y para generar modelos digitales de elevación. Por último, LASzip es la única librería capaz de leer y escribir datos LiDAR en formato LAZ. Éste es un tipo de formato comprimido pero con las mismas especificaciones que el formato LAS.

El procesamiento de datos es, en general, la recogida y manipulación de elementos de datos para producir información significativa. Así pues, a través del geoprocesamiento, se manipulan los datos espaciales con el objetivo de presentarlos en un contexto específico. En cuanto al procesamiento de datos vectoriales aparecen dos tendencias claras: una serie de librerías orientadas a la generación de scriptlets de forma intuitiva y sencilla (GeoScript/Shapely); y librerías clásicas de geoprocesamiento a nivel servidor (GEOS/JTS/GeoTools).

Shapely es un paquete de algoritmos para procesamiento espacial 2D escrito en Python.

GeoScript añade capacidades espaciales a los lenguajes dinámicos como JavaScript, Python, Scala o Groovy.

JTS Topology Suite es una librería escrita 100% en Java que implementa la SFA y permite operar con geometrías incorporando una buena colección de algoritmos espaciales 2D. El rendimiento es elevado permitiendo la utilización de sus algoritmos en entornos de producción.

Geotools es una librería 100% Java con todo tipo de herramientas para procesamiento y visualización de contenidos geoespaciales. Implementa la mayoría de estándares del OGC. El procesamiento espacial lo realiza embebiendo JTS. Añade la posibilidad de trabajar con Sistemas de Referencia y acceder a bases de datos. Es parte del backend utilizado por Geoserver.

GEOS es una versión C++ de la librería JTS Topology Suite

GDAL se suele utilizar como complemento de todas las demás herramientas para la preparación de imágenes ráster de forma que mejoren el rendimiento al ser servidas.

GeoBatch da un paso más allá en el geoprocesamiento, permitiendo la definición de ciertos flujos de procesamiento y permitiendo la ejecución de los mismos en background a través de distintos roles y usuarios (así como la ejecución programada de los mismos).

Mapnik es una herramienta para el renderizado de mapas atractivos, con bordes de geometrías limpios y suaves, provisto de un sistema gráfico con anti-aliasing de calidad, posicionamiento inteligente de etiquetas, y simbolización SVG escalable. La mayor fama de mapnik viene por ser utilizado como render de la capa principal de Open Street Map.

En relación con el routing o cálculo de rutas, mencionamos en este grupo las librerías pgRouting, OSRM y OpenTripPlanner.

pgRouting es una extensión de la base de datos espacial Potgres-PostGIS que añade funcionalidades de routing, esto es, de cálculo de rutas y caminos mínimos a través de los distintos algoritmos. Trabaja con los datos en crudo, sin necesidad de pre-procesamiento.

OSRM Es una librería escrita en C++ que proporciona algoritmos de camino mínimo y herramientas de routing utilizando la cartografía de OpenStreetMap como red de caminos.

OpenTripPlanner ofrece una API REST que permite el cálculo de rutas basadas el distintos métodos de transporte (incluyendo parámetros como el alquiler de bicicletas o el transporte público).

Puntos calientes

Últimamente, la tecnología LiDAR está en auje y cada vez aparecen más librerías que ofrecen la posibilidad de trabajar con datos LiDAR en el formato LAS. Algunas también incorporan conjuntos herramientas para el procesado y análisis de datos. Estas herramientas suelen aparecer como comandos de consola para favorecer el desarrollos de scripts. Con el objetivo de favorecer la creación de sencillos programas, los esfuerzos se están centrando en incorporan bindings en python. Para permitir un uso más sencillo y cómodo la comunidad está haciendo esfuerzos en la creación interfaces gráficas y en la incorporación de forma nativa de lectura y escritura de datos láser en clientes de escritorio como QGIS o GRASS.

En relación al cálculo de rutas, existe una clara diferenciación entre las librerías que se basan en datos pre-procesados y las librerías que pueden trabajar sin pre-procesar los datos. Mientras que las librerías con datos procesados hoy en día devuelven respuestas instantáneas a rutas complejas, las librerías con datos en crudo permiten una mayor flexibilidad a la hora de incorporar datos en tiempo real, como puede ser el tráfico o el clima. También es relevante mencionar que OpenTripPlanner permite el cálculo de rutas multimodal; esto es, cálculo de rutas combinando diferentes medios de transporte.

Respecto al geoprocesamiento, probablemente, los avances más significativos se están realizando en la abstración de las librerías clásicas con el objetivo de facilitar su uso de cara a los desarrolladores. Dentro de este grupo se enmcuentran GeoScript, Shapely o GeoBatch.

Mapnik se suele embeber típicamente en aplicaciones python que publican mapas en Internet, aunque las últimas mejoras incorporadas han permitido que Mapnik también se utilice para crear mapas de alta resolución en papel.

Curva de aprendizaje y conocimientos previos

Para trabajar con las librerías LiDAR es conveniente tener conocimientos de C++, ya que es el lenguaje común a todas ellas. Aunque existen ya interfaces gráficas para trabajar con estas herramientas, el módo más rápido y versátil es la línea de comando y la utilización de scripts o incluso la programación en Python. Por tanto, tener experiencia en estos campos facilitaría su utilización. Escribir en la consola nunca es agradable para cualquier persona que empieza, pero la mayor ventajan que presentan es que todas las herramientas tienen las mismas funcionalidades y es muy intuitivo aprender el lenguaje utilizado en cualquiera de ellas si se adquieren conocmientos previos en alguna otra librería.

A la hora de trabajar con cálculo de rutas, es conveniente entender la terminología básica de la teoría de grafos, como qué es un nodo y cómo se interconectan los nodos. Una vez comprendida la teoría básica de grafos, lo que va a marcar qué algoritmo elegimos y cómo vamos a usarla será nuestra fuente de datos y nuestras necesidades o no de tener rutas multimodales en tiempo real.

En cuanto al geoprocesamiento, los conocimientos necesarios son distintos según la(s) librería(s) que quieras usar. Para todas necesitarás conocimentos acerca del modelo SFA. A no ser que necesites una funcionalidad específica de una de las librerías, podrás elegir aquella que se adecúe más a tus conocimientos. Los programadores en C++ pueden utilizar GEOS, mientras que los programadores Java encontrarán en JTS y Geotools las herramientas de geoprocesamiento necesario. Python dispone de GeoScript, Shapely como herramientas específicas del lenguaje.

Documentación

A continuación se enumeran una serie de enlaces a páginas de documentación, tutoriales o ejemplos que pueden ser de ayuda para trabajar con estas librerías:

Documentación de proyectos
Proyecto Documentación OSGeo Live Otros
GDAL/OGR GDAL docs; OGR docs GDAL qs GDAL wiki
JTS Topology Suite JTS Topology Suite docs    
GEOS GEOS API docs   Tutorial de la documentación de Django
GeoTools GeoTools docs   Soporte y comunidad
Shapely Shapely docs    
GeoScript * GeoScript docs   `Tutoriales oficiales <http://geoscript.org/tutorials/index.html>>`_
libLAS libLAS docs libLAS qs  
LASlib/LASzip Tutoriales; Artículo sobre LASzip   Manual de *Minnesota Department of Natural Resources*
PDAL PDAL docs    
SPDlib SPDlib docs   Tutoriales
Laspy LASpy docs    
OSRM General OSRM instructions   OSRM Server API
pgRouting pgRouting docs pgRouting qs Guía para principiantes
OpenTripPlanner OpenTripPlanner docs   Guía de desarrollador;
GeoBatch GeoBatch docs    
Mapnik Mapnik docs Mapnik qs Tutoriales