Introducción a CartoDB
- Facilitador: Jorge Sanz · jsanz@cartodb.com · @xurxosanz
- 5 de Abril de 2016
- FOSS4G Argentina· Instituto Geográfico Nacional · Buenos Aires
Encuestas:
Contenidos
- Introducción (30m)
- CartoDB Editor (45m): Hello Map · Más características · El dashboard de CartoDB
- Análisis de datos con SQL (1h): Introducción · PostGIS · Ejemplos de SQL espacial
- Aplicaciones web con CartoDB.js (1h 30m): Ejemplos · Ejemplos avanzados
Introducción (30m)
- Qué es CartoDB
- CartoDB es una plataforma: editor + APIs + SDKs
- Crear una cuenta nueva en CartoDB
Recursos adicionales
CartoDB Editor (45m)
Hello Map
- Acceder a la cuenta
- El dashboard
- Crear un mapa nuevo
- Asistente para crear un mapa nuevo
- Los diferentes tipos de mapas y sus opciones
- Conceptos básicos de CartoCSS
- Cambiar el estilo de un mapa sencillo
Ejercicio:
- Enunciado: hacer un mapa de los cajeros automáticos de Buenos Aires con más de 3 terminales
- Datos
- Fuente
- Shapefile convertido a UTF8
Consideraciones:
- Usar la pestaña de filtros para aplicar la condición por el campo
terminales
- Usar el tipo de mapa por categoría para mostrar a qué banco pertenece cada cajero
Resultado:
Más características
- Interactividad: infowindows y tooltips
- Leyenda de mapa
- En un mapa simple
- Leyenda de mapa por categorías
- Otros elementos del mapa
- Añadir elemento: título, textos, anotaciones e imágenes
- Previsualización del mapa
- Exportar imagen: normal y avanzada
- Metadatos del mapa
- Título, descripción y etiquetas
- Privacidad
- Opciones del mapa
- Cambiar el mapa base
- Otras opciones del mapa
- Añadir nuevas capas
- Orden de capas
- Opciones de publicación: enlace, embed y CartoDB.js
Ejercicio 2:
Crea una copia del mapa del ejercicio anterior y añade las siguientes características:
- Interactividad
- Título
- Metadatos completos
- Añade una capa nueva
- Añade un selector de capas
- Publica tu mapa
Nota: Puedes buscar alguna capa en http://data.buenosaires.gob.ar que se encuentre en formato shp
, obtener la dirección web del fichero de datos (zip) y cargarla directamente en CartoDB.
Resultado:
Recursos adicionales:
- CartoDB Map Academy, Online Mapping for Beginners Lesson
- CartoDB Map Academy, Introduction to Map Design
- CartoDB Map Academy, Intermediate Map Design
- CartoDB Documentation, CartoCSS
- CartoDB Documentation, Maps
El dashboard de CartoDB
- Las opciones del dashboard
- Mapas y tablas en CartoDB
- Listados
- Operaciones
- Selección
- Ordenar
- Duplicar
- Borrar
- El editor de tablas
- Diferencias con el editor de mapas
- Geocodificación
- Sincronización
- Crear un mapa desde la tabla
- Opciones de administración
- Diferencias entre una cuenta normal y una cuenta en una organización
- Características corporativas
- Compartir datasets y mapas con otros miembros y grupos
- Cuotas de almacenamiento
- LDAP
- La API Key
- Perfil público
Recursos adicionales:
- CartoDB Documentation, CartoDB Dashboard
- CartoDB Documentation, Datasets
- CartoDB Documentation, CartoDB Enterprise
- CartoDB Documentation, CartoDB account
Análisis de datos con SQL (1h)
Introducción
En esta sección vamos a cubrir los aspectos más básicos del acceso a información mediante el lenguaje de consulta SQL.
Para poder hacer todos los ejercicios se requiere importar del Data Library los siguientes juegos de datos:
ne_10m_populated_places_simple
: ciudades del mundosamerica_adm0
: países de Sudaméricane_50m_land
: polígono global
Seleccionar datos
Seleccionar todas las columnas:
SELECT
*
FROM
ne_10m_populated_places_simple;
Seleccionar solo algunas columnas:
SELECT
cartodb_id,
the_geom,
adm0name,name
FROM
ne_10m_populated_places_simple;
Seleccionar datos distintos
SELECT
DISTINCT adm0name
FROM
ne_10m_populated_places_simple;
Filtrar
Añadir una condición por un campo
SELECT * FROM ne_10m_populated_places_simple
WHERE
cartodb_id = 1;
Filtrar por un valor
SELECT * FROM ne_10m_populated_places_simple
WHERE
cartodb_id IN (1,3,5,7,9);
Filtrar por cadena de texto
SELECT * FROM ne_10m_populated_places_simple
WHERE
adm0_a3 LIKE 'URY';
Filtro que no tiene en cuenta mayúsculas
SELECT * FROM ne_10m_populated_places_simple
WHERE
adm0_a3 ILIKE 'ury';
Comodines
SELECT * FROM ne_10m_populated_places_simple
WHERE
name ILIKE 'San%';
SELECT * FROM ne_10m_populated_places_simple
WHERE
name ILIKE 'San%';
SELECT * FROM ne_10m_populated_places_simple
WHERE
name ILIKE '%ao';
SELECT * FROM ne_10m_populated_places_simple
WHERE
name ILIKE '%ori%';
Combinar condiciones
SELECT * FROM ne_10m_populated_places_simple
WHERE
name ILIKE '%ori%' AND
cartodb_id < 1000;
SELECT * FROM ne_10m_populated_places_simple
WHERE
name ILIKE '%ori%'
OR cartodb_id < 10;
Otras
Ordenar los resultados
SELECT * FROM ne_10m_populated_places_simple
WHERE name ILIKE '%ori%' AND cartodb_id < 1000
ORDER BY name ASC;
Limitar el número de resultados
SELECT * FROM ne_10m_populated_places_simple
WHERE name ILIKE '%ori%' AND cartodb_id < 1000
ORDER BY name
LIMIT 5;
Contar el número de resultados
SELECT count(*) as conteo
FROM ne_10m_populated_places_simple
WHERE name ILIKE '%ori%';
Lecturas adicionales:
- SQL Lesson of W3Schools
- CartoDB Map Academy, SQL Lesson 1
Ejercicio 4: extraer información mediante SQL
- Encontrar las columnas en
ne_10m_populated_places_simple
que informan sobre:- Nombre de la ciudad
- Población máxima
- Nombre del país
- ¿Qué ciudades encontramos de Argentina? ¿Cuál es su población máxima?
- ¿Qué ciudades de Argentina tienen más de 500.000 habitantes?
- ¿Cuántas ciudades son megacities y su nombre acaba por
a
? - ¿Cuáles son las cinco ciudades más pobladas de Argentina?
PostGIS
geometry
vs geography
En Postgis existen dos tipos de datos geográficos
geometry
: coordenadas cartesianas, la línea más corta entre dos puntos es una recta. Tienen sistema de coordenadasgeography
: coordenadas polares sobre una esfera o un elipsoide. Siempre en geográficas. Útiles para algunas operaciones. La distancia más corta entre dos puntos es una curva ortodrómica.
Fuente: Boundless Postgis intro
Un par de recursos:
Un detalle a tener en cuenta al trabajar con CartoDB:
En CartoDB SIEMPRE visualizamos una consulta a la base de datos.
Los campos the_geom
y the_geom_webmercator
Las tablas de CartoDB tienen dos campos de tipo geometry
:
the_geom
:EPSG:4326
. Coordenadas geográficas sin proyectas en WGS84the_geom_webmercator:
EPSG:3857`. Coordenadas proyectadas en el sistema esférico de Mercator, un estándar de facto en webmapping.
En CartoDB, the_geom_webmercator
es la columna que se renderiza en el mapa. Este campo se genera automáticamente desde el campo the_geom
. En una consulta, podemos sustituir ese campo por cualquier otra geometría que generemos, siempre y cuando cumpla las condiciones de ser de tipo geometry
y estar en el sistema de coordenadas EPSG:3857
.
Un par de recursos adicionales:
- Proyecciones cartográficas en Wikipedia
- Tutorial sobre proyecciones
- Blog post sobre como usar otras proyecciones en CartoDB.
Ejemplos de SQL espacial
Las consultas que se muestran a continuación se pueden aplicar directamente sobre la consola SQL del editor. En este enlace se puede visualizar el resultado de las consultas.
Generar un buffer dado un radio determinado
Para poder usar metros en nuestra medida tenemos que convertir nuestra geometría al tipo geography
y luego de vuelta a geometry
y finalmente transformar el resultado al sistema de coordenadas EPSG:3857
para poder verlo en nuestro mapa.
SELECT
cartodb_id,
name,
ST_Transform(
ST_Buffer(the_geom::geography, 50000)::geometry
,3857
) AS the_geom_webmercator
FROM
ne_10m_populated_places_simple
Calcular la diferencia entre dos geometrías
Obtener la geometría correspondiente Sudamérica restando el contorno de Argentina.
SELECT
a.cartodb_id,
ST_Difference(
a.the_geom_webmercator,
b.the_geom_webmercator
) AS the_geom_webmercator
FROM
ne_50m_land a,
samerica_adm0 b
WHERE
b.adm0_a3 like 'ARG' AND
a.cartodb_id = 1200
Intersectar dos geometrías
Obtener las ciudades que se encuentran en Sudamérica
SELECT
a.*
FROM
ne_10m_populated_places_simple a,
samerica_adm0 b
WHERE
ST_Intersects(
b.the_geom_webmercator,
a.the_geom_webmercator
)
Contar puntos contenidos en cada polígono
Número de ciudades en ne_10m_populated_places_simple
por país de Sudamérica. Usando GROUP BY
:
SELECT
b.cartodb_id,
b.name,
b.the_geom_webmercator,
count(*) AS pp_count,
sum(a.pop_max) as sum_pop
FROM
ne_10m_populated_places_simple a,
samerica_adm0 b
WHERE
ST_Intersects(a.the_geom, b.the_geom)
GROUP BY
b.cartodb_id,
b.name,
b.the_geom_webmercator
Una forma más correcta de hacerlo usando LATERAL
:
SELECT
a.cartodb_id,
a.name,
a.the_geom_webmercator,
counts.number_cities,
to_char(counts.sum_pop,'999,999,999') as sum_pop --con separador de decimales
FROM
samerica_adm0 a
CROSS JOIN LATERAL
(
SELECT
count(*) as number_cities,
sum(pop_max) as sum_pop
FROM
ne_10m_populated_places_simple b
WHERE
ST_Intersects(a.the_geom, b.the_geom)
) AS counts
Obtener las ciudades argentinas que están a menos de 25 km una de otra
SELECT
a.*
FROM
ne_10m_populated_places_simple a,
ne_10m_populated_places_simple b
WHERE
a.cartodb_id != b.cartodb_id
AND ST_DWithin(
a.the_geom::geography,
b.the_geom::geography,
25000
)
AND a.adm0name = 'Argentina'
AND b.adm0name = 'Argentina'
Generar cuadrículas
Cudarícula rectangular de 250km de lado para Argentina
SELECT
row_number() over () as cartodb_id, -- campo generado
CDB_RectangleGrid(
ST_Envelope(the_geom_webmercator), -- caja de la geometría
250000,
250000
) AS the_geom_webmercator
FROM samerica_adm0
WHERE adm0_a3 like 'ARG'
Cuadrícula hexagonal de 250km de lado para Argentina
SELECT
row_number() over () as cartodb_id,
CDB_HexagonGrid(
ST_Envelope (the_geom_webmercator),
250000
) AS the_geom_webmercator
FROM samerica_adm0
WHERE adm0_a3 like 'ARG'
Recursos adicionales
Algunos artículos sobre SQL espacial en el blog de CartoDB
- Generando líneas de círculos máximos cruzando la línea de la fecha
- Buscando las geometrías más cercanas
- Sobre ST_Subdivide
Aplicaciones web con CartoDB.js (1h 30m)
CartoDB.js es la librería JavaScript que permite crear aplicaciones de webmapping usando los servicios de CartoDB de forma rápida y eficiente.
La librería está basada en los siguientes componentes:
- jQuery
- Underscore.js
- Backbone.js
- Puede utilizar indistintamente Google Maps API o Leaflet
Ejemplos
Puedes copiar el código de los siguientes ejemplos y ejecutarlos en tu computadora. También puedes usar los enlaces al editor en línea y hacer ahí tus cambios. Prueba a visualizar tus mapas, consultar tus tablas, cambiar estilos y comportamientos para crear visores de la información que existe en tu cuenta de CartoDB.