This intermediate workshop was given by Jorge Sanz on April 5, 2016 at . As taught, it was 4 hours long.
  • 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)

  • 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:

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:


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 mundo
  • samerica_adm0: países de Sudamérica
  • ne_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:

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 coordenadas
  • geography: 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.

cart vs sph

LA-CDG

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 WGS84
  • the_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:

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


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:

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.

Ejemplos avanzados