Componer un mapa GeoJSON & TopoJSON de las secciones censales españolas

Cómo componer un mapa GeoJSON y TopoJSON desde los archivos dbf y shp.

Data Visualization

Introducción

Las administraciones públicas distribuyen sus mapas (generalmente) en el formato Shapefile.

Shapefile

El shapefile es un formato vectorial geoespacial introducido a principio de los 90. Realmente está compuesto por una colección de al menos tres archivos:

También pueden contener otros archivos como .proj, .shp.xml, .sbn

En este ejemplo se va a utilizar el shapefile (INE Cartografía digitalizada) de las [secciones censales] (http://en.eustat.eus/documentos/elem_3830/definicion.html) de España:

A pesar de ser útiles para muchas cosas, los shapefiles no fácilmente legibles por el ser humano o integrables en una página web. Su principal problema es el tamaño del archivo .shp:

ginopalazzo@MacBook-Air cartografia_censo2011_nacional $ ls -la
total 777048
        352 Feb 22 12:29 .
       1952 Feb 22 12:23 ..
   11220226 Mar 14  2014 SECC_CPV_E_01_R_INE.dbf
        404 Mar 14  2014 SECC_CPV_E_01_R_INE.prj
     363236 Mar 14  2014 SECC_CPV_E_01_R_INE.sbn
      10172 Mar 14  2014 SECC_CPV_E_01_R_INE.sbx
  109242236 Mar 14  2014 SECC_CPV_E_01_R_INE.shp
      19492 Mar 14  2014 SECC_CPV_E_01_R_INE.shp.xml
     287780 Mar 14  2014 SECC_CPV_E_01_R_INE.shx

109Mb of shapes and 11Mb of data is not the best way to represent a map in a browser.

GeoJSON & TopoJSON

GeoJSON, basado en JSON, permite almacenar colecciones de tipos de datos geométricos (incluyendo atributos no espaciales) en una única estructura.

Una extensión interesante de GeoJSON es TopoJson, que codifica la topología geoespacial y proporciona ficheros de salida de tamaños significativamente menores (hasta un 80%).

  241037101 Feb 22 12:29 SECC_CPV_E_01_R_INE_geoJSON.json
   35648891 Feb 22 12:24 SECC_CPV_E_01_R_INE_topoJSon.json
   11220226 Mar 14  2014 SECC_CPV_E_01_R_INE.dbf
        404 Mar 14  2014 SECC_CPV_E_01_R_INE.prj
  109242236 Mar 14  2014 SECC_CPV_E_01_R_INE.shp
     287780 Mar 14  2014 SECC_CPV_E_01_R_INE.shx

Cómo convertir shapefiles a archivos derivados de JSON?

NodeJS & CL

Mike Bostock ha escrito largo y tendido sobre este tema con muchos ejemplos interesantes: https://medium.com/@mbostock/command-line-cartography-part-1-897aa8f8ca2c

Python

Hay algunas soluciones gist con diferentes librerias en Python: