CartoDB

PostgreSQL + PostGIS en la nube

Creado por
TheCoffeMaker / @TheCoffeMaker
opensas / @develsas

¿Qué es CartoDB?

  • Herramienta de software libre
  • para almacenar y visualizar información geoespacial en la web
  • de manera sencilla y rápida

Más precisamente

  • Una interfaz de usuario web para subir, crear, editar, vizualizar y exportar información geoespacial
  • Un servidor de base de datos geoespacial basado en PostgreSQL y PostGIS 2.1
  • Un web service REST que soporta consultas de SQL y PostGIS y retorna GeoJSON
  • Un servicio pago para guardar tus bases de datos geoespaciales en la nube
  • o la posibilidad de instalarlo en tu propio servidor

¿Por qué CartoDB?

  • Es software libre
  • Tiene todo el poder de PostgreSQL y PostGIS
  • Es una alternativa libre a google fussion tables
  • Que respeta tu privacidad

Es software libre...

hecho con software libre

  • Ubuntu
  • PostgreSQL 9.1.x
  • PostGIS 2.1
  • Redis
  • Ruby
  • NodeJS
  • Varnish

Agenda para los próximos 60 minutos...

  • Importar datos
  • Crear y publicar visualizaciones
  • Geocodificar
  • Usar postGIS SQL
  • Crear nuestros propios mapa
  • Usar la api

Demo 1

Choropleth de población argentina


Vamos a ver como...

  • Importar datos
  • Modificar columnas
  • Crear columnas calculadas
  • Crear visualizaciones
  • Publicarlas en la web y...
  • ¡Descubrir qué cuernos es un choropleth!

Demo 2

Geocodificación y consultas espaciales


Vamos a ver...

  • Importar y geocodificar direcciones
  • Qué son las proyecciones
  • Cómo CartoDB almacena la información espacial
  • Usar consultas PostGIS para crear geometrías
  • Algunas consultas más comunes
  • Los x puntos más cercanos a otro punto
  • Los puntos a x metros de otro punto

Proyecciones

  • La tierra es esférica, pero nuestros mapas no...
  • Una proyección define un sistema completo de referencia geoespacial.
  • Establece cómo se proyectan los puntos de la superficie esférica de la tierra a un mapa plano
  • Provee sentido geoespacial a lo que de otra manera sería tan sólo un par de números sin significado.

Dos tipos de proyecciones:


the_geom

EPSG:4326 para almacenar la información y realizar operaciones

  • Se trata de un estándar en geodesia, cartografía, y navegación, que data de 1984.
  • Sus siglas significan sistema geodésico mundial.
  • También se lo conoce como WGS 1984 o simplemente WGS 84

Dos tipos de proyecciones:


the_geom_webmercator

EPSG:3857 para desplegar la información en pantalla

  • También conocido como Spherical Mercator projection
  • Sistema de coordenadas popularizado por Google y OpenStreetMap

PostGIS

Creamos una tabla de manera manual


insert into test( the_geom )
values (
  ST_GeomFromText(
    'POINT(-58.38145 -34.60368)'
    , 4326
  )
)
          

PostGIS

Consultamos la proyección de los campos espaciales


select *,
ST_SRID(the_geom)
  as geom_srid,
ST_SRID(the_geom_webmercator)
  as geom_webmercator_srid
from test
          

Jugando con PostGIS

Creamos un punto dinámicamente


select
1 as cartodb_id,
'Obelisco' as nombre,
ST_Transform(
  ST_GeomFromText(
    'POINT(-58.38145 -34.60368)'
    , 4326
  )
  , 3857
) as the_geom_webmercator
          

Jugando con PostGIS

Creamos un polígono dinámicamente


select
1 as cartodb_id,
'Mi poligono' as nombre,
ST_Transform(
  ST_GeomFromText(
    'POLYGON((
      -58.38145 -34.60368,
      -58.48145 -34.60368,
      -58.48145 -34.70368,
      -58.38145 -34.60368
    ))'
    , 4326
  )
  , 3857
) as the_geom_webmercator
          

Magia negra con PostGIS

Los 150 teatros más cercanos al obelisco


select
  *
from
  teatros
order by
  ST_Distance(
    the_geom,
    ST_GeomFromText(
      'POINT(-58.38145 -34.60368)'
      , 4326
    )
  )
limit 150
          

Magia negra con PostGIS

250 metros a la redonda del obelisco


select
1 as cartodb_id,
ST_Buffer(
  ST_Transform(
    ST_GeomFromText(
      'POINT(-58.38145 -34.60368)'
      , 4326
    )
    , 3857
  )
  , 500
) as the_geom_webmercator
          

Magia negra con PostGIS

Entendiendo ST_Buffer


select
1 as cartodb_id,
ST_Buffer(
  ST_Transform(
    ST_GeomFromText('POLYGON((
      -58.38145 -34.60368, -58.48145 -34.60368, -58.48145 -34.70368, -58.38145 -34.60368
    ))', 4326)
    , 3857
  )
  , 1500) as the_geom_webmercator
union
select
2 as cartodb_id,
  ST_Transform(
    ST_GeomFromText('POLYGON((
      -58.38145 -34.60368, -58.48145 -34.60368, -58.48145 -34.70368, -58.38145 -34.60368
    ))', 4326)
    , 3857
  ) as the_geom_webmercator

Magia negra con PostGIS

Los teatros a 250 metros del obelisco


select
  *
from
  teatros
where
ST_Within(
  the_geom_webmercator,
  ST_Buffer(
    ST_Transform(
      ST_GeomFromText(
        'POINT(-58.38145 -34.60368)'
        , 4326
      )
      , 3857
    )
    , 500
  )
)
          

Demo 3

Creando tus propios mapas


Vamos a ver...

  • Crear una zonificación con un mapa en geojson
  • Combinar capas en una misma visualización
  • Combinar tablas en una campo calculado
  • Otra vez un choropleth y...
  • si hay más teatros en el norte que en el sur de la ciudad

Magia negra con PostGIS

Combinando tablas

Los teatros según nuestras zonas


select
  *,
  (
    select count(*)
    from teatros
    where ST_Within(teatros.the_geom, caba.the_geom)
  ) as teatros

from caba
          

Demo 4

Una aplicación completa

Usando CatoDB como web service


Vamos a ver...

  • Acceder a nuestra información vía web service
  • Nuestros datos como json
  • Una aplicación completa
  • Una consulta compleja

Magia negra con PostGIS

Una consulta compleja via web service


select
  tipo, subtipo, nombre, direccion, telefono, email, web, lat, lon
from cultura
where (
  ST_Within(
    the_geom,
    ST_Envelope(
      ST_GeomFromText(
        'LINESTRING(
          -58.456084263829254 -34.58568073843928,
          -58.328412043543786 -34.622176987831935
        )', 4326
      )
    )
  )
) and (
  lower(nombre) like '%corrientes%' or lower(direccion) like '%corrientes%'
) and (
  lower(subtipo) in ('salas teatrales')
)

          

Magia negra con PostGIS

La línea


select
1 as cartodb_id,
ST_Transform(
  ST_GeomFromText(
    'LINESTRING(
      -58.456084263829254 -34.58568073843928,
      -58.328412043543786 -34.622176987831935
    )', 4326
  )
  , 3857
) as the_geom_webmercator
          

Magia negra con PostGIS

El sobre


select
1 as cartodb_id,
ST_Transform(
  ST_Envelope(
    ST_GeomFromText(
      'LINESTRING(
        -58.456084263829254 -34.58568073843928,
        -58.328412043543786 -34.622176987831935
      )', 4326
    )
  )
  , 3857
) as the_geom_webmercator
          

Magia negra con PostGIS

Los teatros


select
  *
from
  teatros
where (
  ST_Within(
    the_geom,
    ST_Envelope(
      ST_GeomFromText(
        'LINESTRING(
          -58.456084263829254 -34.58568073843928,
          -58.328412043543786 -34.622176987831935
        )', 4326
      )
    )
  )
) and (
  lower(nombre) like '%corrientes%' or lower(direccion) like '%corrientes%'
)

          

¿Preguntas?

Links de interés

Datasets utilizados

FIN

TheCoffeMaker / @TheCoffeMaker
opensas / @develsas