lunes, 11 de mayo de 2015

Importando datos en CartoDB con Geobide


La publicación de aplicaciones web mapping con plataformas alojadas en la nube se enmarcan en un sector tecnológico que va madurando a gran velocidad. Estas plataformas proporcionan una infraestructura muy fiable y escalable para la implementación de soluciones a nivel de web, con costes de soporte y administración mínimos, y con más flexibilidad de la que cabría esperar.

Este artículo se centra en la carga de datos en CartoDB utilizando como herramienta el conversor de formatos GeoConverter que se distribuye con la suite gratuita Geobide. El ejercicio nos va a servir por un lado para demostrar la flexibilidad que nos ofrece CartoDB para integrarnos de forma sencilla en su arquitectura, y por otro, instruirnos en el uso de GeoConverter y su nuevo "plugin" para la lectura y escritura de datos en ese repositorio.

Wikipedia dice sobre CartoDB:

“CartoDB is a Software as a Service (SaaS) cloud computing platform that provides GIS and web mapping tools for display in a web browser. CartoDB users can use the company's free platform or deploy their own instance of the open source software. CartoDB is offered as freemium service, where accounts are free up to a certain size”

O sea, describe la típica arquitectura de herramientas geográficas alojadas en la nube con una política de precios basada en el volumen de datos alojados y en un portfolio de capacidades tecnológicas para ajustarlas a nuestras propias necesidades.

Por otra parte Geobide es una suite gratuita que engloba un conjunto de herramientas desktop para transformar y geoprocesar datos geográficos. Geobide soporta los formatos CAD/GIS vectoriales más comunes en el mercado (Shapefile, DGN, DXF/DWG, SDE, FGDB, PostGIS, LAS, ...).



El ejercicio me va a permitir demostrar la flexibilidad que ofrece CartoDB con sus APIs y lo fácil que nos va a resultar integrar nuestras propias herramientas en esa arquitectura basada en la nube.

Pongámonos ya manos a la obra!

Como es lógico, CartoDB ofrece su propio importador de datos desde diferentes formatos de fichero (Shapefile, CSV) pero yo voy a “practicar” con su API desarrollando un nuevo lector-escritor de su repositorio de datos para Geobide. Este nuevo "plugin" se ofrece ya de forma gratuita y lo puedes descargar libremente junto con toda la suite Geobide desde su web. Ahí va un pantallazo de GeoConverter con los todos formatos soportados incluyendo también el correspondiente a CartoDB.


De las diferentes APIs para desarrolladores que ofrece CartoDB hay una que me ha parecido especialmente interesante por su flexibilidad, y es la SQL API. Según la documentación, CartoDB aloja los datos, nuestros propios datos subidos a la nube, en PostgreSQL/PostGIS y esta API nos permite interactuar con ellos utilizando directamente sentencias SQL a las capas geográficas alojadas.


Guau!!!! eso suena muy bien, pues a ver si es verdad :-). El desarrollo del nuevo plugin lo he basado en el uso de ese API que mediante sentencias SQL estilo “CREATE TABLE”, “SELECT”, “INSERT”, … se gestionan los datos de la capa en CartoDB. Podemos ahora con GeoConverter personalizar mejor el proceso de importación de los datos (aspecto no demasiado elaborado en la herramienta propia de CartoDB) en aspectos como la definición de los campos de las geometrías, o en la definición de reglas y expresiones para la personalización de los valores de sus atributos.

Quedan fuera de este artículo los detalles técnicos del desarrollo del plugin para GeoConverter que daría para otro artículo distinto donde documentar el uso de su SDK para la creación de nuestros propios gestores de formatos u otras funcionalidades.

Bueno, pues vamos a allá y como ejercicio podemos utilizar una capa de municipios de mi querida tierra Navarra. Esta capa la tengo descargada de la IDE de Navarra (IDENA) y es un Shapefile de 360 recintos con sus específicos atributos en el correspondiente fichero DBF.



Sobra decir que podríamos usar como entrada de GeoConverter nuestra propia capa de datos, y en cualquiera de los formatos CAD/GIS soportados, incluso ahora también el propio CartoDB!

Puedes consultar en este link la ayuda completa de GeoConverter.


Paso 1, Seleccionar la fuente de datos de entrada.

Indicamos en este punto el formato y aquellos datos que son personalizables en la lectura de la capa a cargar.


Para un Shapefile, simplemente debemos indicar el nombre del fichero.



Paso 2, Definir un filtro alfanumérico y/o espacial a aplicar a esos datos de entrada si queremos sólo cargar un extracto de toda la capa.



Paso 3, Definir la fuente de datos de salida.

En este ejercicio definimos como salida el formato “CartoDB”, indicando el nombre de usuario y ApiKey de usuario CartoDB donde vamos a volcar los datos. 




La definición geométrica y alfanumérica de la capa es automáticamente mostrada por GeoConverter desde la capa de entrada, pero podemos modificar por ejemplo la tabla de atributos para ajustarla a nuestras preferencias y que será la que en un fin último veremos como dataset en CartoDB.

A modo didáctico vamos a personalizar la tabla de atributos, borrando algún campo que viene de la capa de entrada, y añadimos alguno asignando su valor en base a una expresión basada en datos de los features (valores de campos o datos geométricos como área, longitud, …). La expresión que podemos definir puede contener la combinación de atributos, operadores matemáticos estándar, y funciones de utilidad que necesitemos para calcular el valor final del atributo.



Paso 4, definir la transformación espacial de las geometrías a grabar.

CartoDB almacena las geometrías de cada capa en dos campos “the_geom” y “the_geom_webmercator” en los sistemas de referencia espacial “EPSG:4326” y “EPSG:3857” respectivamente. El segundo sistema de referencia es gestionado automáticamente por CartoDB así que para nosotros como usuario nuestra capa se maneja en “EPSG:4326”.

Indicamos pues la transformación a aplicar a la capa a cargar. El sistema de referencia espacial de la capa de municipios de mi ejemplo es el “EPSG:25830”, y como salida indicamos el “EPSG:4326”.



Y ya está! Pulsar el botón "Procesar" y listo. Ya tenemos nuestra capa en el repositorio de CartoDB para usarla en su estupenda plataforma!




En este punto me gustaría comentar la buena impresión que ofrecen las herramientas de CartoDB para un recién llegado como yo a este producto, con una interfaz moderna e intuitiva. Un "bonus" por esta plataforma!

Como conclusión final del artículo podemos resumir que hemos comprobado la flexibilidad que nos ofrece CartoDB con sus APIs y lo hemos aplicado en desarrollar un "plugin" en otra herramienta externa. De paso nos ha servido para descubrir la enorme potencialidad que se abre con esas APIs de este “gis-cloud”.

Se me queda en el tintero mejorar el plugin de Geobide para la carga de las geometrías. Actualmente inserto cada una de ellas en una sentencia SQL tipo “INSERT INTO ...” independiente y que como era de preveer es muy lento para la carga masiva de datos. La solución me vendrá de modificar el proceso interno de inserción basado en paquetes o ficheros. Pero eso es una tarea a investigar en sus APIs y en la que debo profundizar. Actualización: Fijado, el core ahora gestiona las inserciones de las geometrías usando una transacción compleja que agrupa las sentencias SQL por paquetes.

No hay comentarios:

Publicar un comentario