CartoDB es un servicio web que nos permite almacenar, analizar y construir aplicaciones con datos geoespaciales. En este artículo haré una introducción a su servicio y sus APIs.

Autor:

Intentando mejorar cada día en este mundo tan cambiante de la programación. Sígueme en Twitter o en GitHub. Actualmente estoy disponible para contratar.

¿Qué es CartoDB?

CartoDB es un producto de la empresa Vizzuality que pone a tu disposición una base de datos en la “nube“, concretamente un PostgreSql con la extensión PostGIS, y una serie de APIS para manejar la información y poder mostrarla de múltiples formas.

Cuando te registras en el servicio, tienes a tu disposición un panel desde el cual podrás crear tablas, insertar o importar datos y visualizarlosen vista de mapa. Es muy sencillo crear un mapa con una serie de puntos, líneas o polígonos y compartirlo con otra gente. Esto hace que la aplicación pueda también ser usada por gente que no sea de perfil técnico.

API SQL

Para construir aplicaciones con los datos que almacenamos en el servicio, tenemos a nuestra disposición una API que funciona a través de conexión http, aceptando indistintamente el método GET o POST.

El formato de la url para interrogar a nuestra base de datos es el siguiente:

http://{account}.cartodb.com/api/v2/sql?q={SQL statement}

{account} es el nombre de tu cuenta de usuario que tienes que introducir cuando te das de alta en el servicio. En el ejemplo siguiente se muestra como extraer los puntos de acceso a wifi de la ciudad de Nueva York (los datos se extraen de una base de datos de ejemplo de CartoDB):


https://examples.cartodb.com/api/v2/sql?q=SELECT%20*%20FROM%20nyc_wifi%20LIMIT%201

El resultado obtenido estará en JSON, que permite el traspaso de información de forma más rápida:

{
    time: 0.007,
    total_rows: 1,
    rows:
    [{
        id: 317,
        name: "McDonald's",
        address: "98-01 METROPOLITAN AVE",
        city: "Forest Hills",
        url: "http://www.mcdonalds.com/wireless.html",
        phone: null,
        type: "Fee-based",
        created_at: "2011-10-27T16:39:32.554Z",
        updated_at: "2011-11-02T19:42:11.571Z",
        the_geom_w: "0101000020110F0000CCC7AF7ABF5C5FC1CC2440245DF55241",
        zip: 11375,
        the_geom: "0101000020E610000023BD5A09AF7652C05E4CDE600A5B4440",
        cartodb_id: 530,
        the_geom_webmercator: "0101000020110F0000CCC7AF7ABF5C5FC1CC2440245DF55241"
        }
        ,
        .....
    ]
}

Si necesitas la respuesta en formato GeoJSON, solo tienes que añadir el parámetro format a la url:


https://examples.cartodb.com/api/v2/sql?q=SELECT%20*%20FROM%20nyc_wifi%20LIMIT%201&format=geojson

PostGIS

Una gran ventaja de usar CartoDB es que tenemos disponible PostGIS sin tener que configurar nada. PostGIS es un módulo que añade soporte de objetos geográficos a la base de datos objeto-relacional PostgreSQL, convirtiéndola en una base de datos espacial para su utilización en Sistema de Información Geográfica.

Esto nos permite hacer consultas muy potentes sobre nuestros datos geográficos. Imagina por ejemplo, que deseas sacar las cafeterías que están próximas a tu posición. Teniendo en cuenta que tienes una tabla llamada cafeterias en la que almacenas todas las cafeterías de la ciudad, y que conoces tu posición exacta, podrías sacarlo así:

SELECT * FROM cafeterias WHERE ST_DWithin(the_geom, [MiPosicion],[Distancia]);

[MiPosicion] y [Distancia] deben ser reemplazados por los valores reales. Si quieres saber más sobre PostGIS, revisa su documentación oficial.

Maps API

Cuando trabajas con mapas (por ejemplo con GMaps), tienes dos formas de representar información sobre ellos: usar tiles o vectores. Trabajar con vectores es muy lento, ya que almacenan cada curva del polígono, por eso, CartoDB nos da acceso a una API que genera los tiles para una sección concreta del mapa. Así, en lugar de tener que descargar la información completa de los polígonos, simplemente te descargas una capa transparente que se superpone en el mapa.

La forma de acceder a los tiles es igualmente por http, y el formato de la url es el siguiente:


http://{account}.cartodb.com/tiles/{table_name}/{z}/{x}/{y}.png

{z} es el zoom, mietras que {x},{y} son las coordenadas dentro del mapa, la mayoría de los proveedores de mapas generan estos valores automáticamente, asique no te preocupes por eso.
Un ejemplo de url de tile es el siguiente:


https://examples.cartodb.com/tiles/nyc_wifi/14/4831/6163.png

Si accedes a la url, verás que no tiene sentido el tile por sí solo, pero sí cuando se aplica sobre el mapa:

Interactividad

Muchas veces cuando añades capas de información sobre el mapa, quieres que el usuario pueda interaccionar con esa información. Por ejemplo, mostrar información al hacer click en un punto, o al pasar el cursor por encima…

Esto se consigue usando la API de UTFGrids que genera una capa más sobre el mapa sobre la cual se pueden especificar eventos de usuario. El funcionamiento de UTFGrids es complejo, por lo que lo mejor es usar la librería Wax para abstraerse de esa tarea.

El formato de la url para obtener los UTFGrids es similar al resto:

https://{account}.cartodb.com/tiles/{table_name}/{z}/{x}/{y}.grid.json?sql={SQL statement}

Integración con Google Maps

Actualmente existe una librería de Javascript que te permite de forma sencilla crear mapas de Google con datos de CartoDB. Aquí tienes el código y un poco de documentación, sin embargo, la libería está bastante verde. Actualmente están trabajando en una nueva versión, pero si quieres, puedes usar esta modificación que he hecho, que soluciona algunos bugs y permite un poquito más de personalización.

Aplicación de ejemplo

Para aprender más sobre CartoDB, he hecho una aplicación rápida de fin de semana que permite visualizar en un mapa alojamientos en alquiler en la ciudad de Madrid. Puedes verla funcionando aquí, y si deseas explorar el código lo tienes en mi github.

Además, puedes explorar la galería de ejemplos de CartoDB, que tiene varios ejemplos de distintos niveles de dificultad, ¡perfecto para aprender!

Conclusión

El servicio que ofrece CartoDB me parece simplemente magnífico, ofrecen una API super fácil de usar y que funciona super rápido, que es lo que se espera de cualquier API de este tipo. Sin embargo, tengo que confesar que me costó arrancar desde Javascript, y es que (aquí empiezan las cosas malas) las dos librerías que he tenido que usar (la de PHP y la de Javascript) están como ya he dicho muy verdes, tanto en código como en documentación.

Asique a ver si nos dan una alegría los chicos de Vizzuality y en breves sacan nuevas versiones de estas librerías :)

¿Necesitas desarrollar un proyecto web o para móviles? ¡Estamos disponibles!

Visitar Cokidoo

Cokidoo, los creadores de Ontuts, desarrollamos proyectos tecnológicos centrados en redes sociales y aplicaciones web, aplicaciones móviles y consultoría web y bases de datos.

Somos jóvenes, inquietos, versátiles, apasionados por la innovación y enfocados en las nuevas tecnologías. Con Ontuts tratamos de compartir nuestro conocimiento adquirido en los distintos proyectos, ayudando a la comunidad y mostrando nuestra capacidad tecnológica.

Si necesitas un presupuesto sin compromiso, estamos disponibles, no dudes en contactar con nosotros.

Comentarios en esta publicación (3 comentarios)

¿Te ha gustado esta publicación? ¡Puedes compartir tu opinión con todos nosotros! Simplemente pincha aquí mismo.

Estan disponibles una maquina virtual vmdk y una EC2 Amazon AMI para probar CartoDB localmente o en la nube:
http://blog.lolo.asia/cartography/2012/06/11/cartodb-ec2-ami-vmdk-vm-available/

jmzc

¿ Qué opciones tiene de ser usado en un entorno empresarial ? ¿ Hay versión de pago ?
Podría usar la versión local que indica Loic , pero no se si está pensada para un entorno de producción, con miles de nodos y rutas

Interesante información y gracias por los consejos!