Generador de informes CSV y ficheros GeoJSON para 1calle1nombre
Go to file
Hugoren Martinako 4c986b8182 reports 202404 2024-04-18 09:58:14 +02:00
bin avoid errors in merge step 2024-02-04 20:57:54 +01:00
config add query to check single municipalities 2022-01-23 20:13:37 +01:00
features include CE & ML on loops; create again geojsons 2022-01-05 20:43:51 +01:00
mapfiles add CE & ML to map file 2022-11-23 20:21:40 +01:00
reports reports 202404 2024-04-18 09:58:14 +02:00
.gitignore lint scripts 2021-02-05 15:05:53 +01:00
Dockerfile add Dockerfile 2021-04-02 19:18:17 +02:00
README.md create geojson CE & ML, include them in bin/generator; fix typos README 2022-01-04 12:24:28 +01:00

README.md

Introducción

etl-1calle1nombre es un generador de informes CSV y ficheros GeoJSON para el proyecto #1calle1nombre. La fuente original de datos es https://download.geofabrik.de/europe/spain.html y https://download.geofabrik.de/africa/canary-islands.html

Requisitos

  • osmium-tool unirá en un solo fichero .pbf los datos descargados de Geofabrik (spain + canary-islands)
  • osm2pgsql insertará el .pbf del paso anterior en la base de datos. Es necesario tener una base de datos postgres instalada, con su correspondiente extensión PostGIS. También se necesita activar la extensión unaccent, presente por defecto en la instalación de postgres.
  • nodejs (opcional, solo para merge) utilizará la herramienta npx para ejecutar mapshaper que es quién unirá en un fichero geográfico (topojson) los datos CSV con los GeoJSON.

Docker

Se puede levantar el entorno mediante docker en dos pasos, primero construye la imagen y después arranca el contenedor:

$ docker build -t ${PWD##*/} . && docker run -it ${PWD##*/}

Herramientas

Ejecutar los distintos comandos desde el directorio raíz del proyecto.

bin/generator [destination]

Programa de conveniencia para simplificar el proceso de generación de archivos mensuales. Primero ejecuta bin/updatedb para traerse los datos, luego bin/report para crear los CSV del mes actual para cada provincia. Y por último, genera en el directorio que se se haya pasado por parámetro, o en su defecto, el actual, un fichero topojson por cada comunidad autónoma, usando bin/merge, uniendo todos los CSV que pertenezcan a ella. Asimismo, se crea otro fichero topojson adicional, en el que se agrupan todos los resultados agregados por comunidad autónoma.

Los pasos funcionan de manera secuencial, pero es posible saltarse algún paso proveyendo la variable de entorno STEP con el número desde el que se quiere comenzar. Por ejemplo:

$ STEP=1 bin/generator    # No ejecutará el primero paso, bin/updatedb
$ STEP=2 bin/generator    # No ejecutará los dos primeros pasos, ni bin/updatedb ni bin/report

bin/updatedb [file.pbf]

Encargado de descargarse los datos de Geofabrik y ejecutar osm2pgsql. Por defecto la base de datos es osm y el usuario con el que se ejecuta es el nombre de tu propio usuario. Opcionalmente se le puede proveer de un fichero .pbf para cargar en base de datos ese fichero, en lugar de descargárselos.

bin/report location

Generador de informes CSV en la carpeta reports/<YYYYMM>/<location>.csv, donde YYYYMM es una carpeta con un nombre de tipo fecha en dicho formato; y location es el nombre del parámetro que hayamos puesto.

Acepta un parámetro de entrada location para generar el informe específico de un sitio. Si se ejecuta sin parámetros el informe se crea para todo el país (ES). Este parámetro puede ser los dos digitos identificativos del código ISO3166-2 de la provincia/comunidad o su nombre, también acepta ccaa y prov como atajos para todas las comunidades y todas las provincias, respectivamente.

$ bin/report ccaa                   # Informes para cada CCAA: AN.csv, AR.csv, AS.csv...
$ bin/report AS CL CT               # Informes para Asturias, Castilla y León y Catalunya
$ bin/report badajoz "La rioja"     # Informes para badajoz y la rioja: badajoz.csv, "La rioja.csv"
$ bin/report cádiz SEVILLA M        # Informes para Cádiz, Sevilla y Madrid: cádiz.csv, SEVILLA.csv, M.csv

bin/feature [-a|--admin admin_level] [-t|--tolerance tolerance] location

Generador de ficheros GeoJSON en la carpeta features/<admin>/<location>.feature.geojson, donde location es el nombre del parámetro que hayamos puesto, y admin, el nivel administativo, que por defecto es municipios. Opcionalmente, se puede especificar el nivel de agrupación --admin y el detalle --tolerance de la feature generada.

Funciona de igual manera que bin/report: acepta un parámetro de entrada location para generar el informe específico de un sitio. Si se ejecuta sin parámetros el informe se crea para todo el país (ES). Este parámetro puede ser los dos digitos identificativos del código ISO3166-2 de la provincia/comunidad o su nombre, también acepta ccaa y prov como atajos para todas las comunidades y todas las provincias, respectivamente.

La opción -a, o también --admin, sirve para agrupar el parámetro de entrada según se indique. Si no se especifica, el archivo resultante esta dividido por municipios. Acepta ccaa y prov, los cuales dividirán la entrada en comunidad autónoma o provincia.

La opción -t, o también --tolerance, especifica el nivel de detalle del GeoJSON. Corresponde con la función ST_Simplify de PostGIS. Acepta valores entre 0 y 1, donde 1 es mínimo nivel de detalle. Por defecto es de 0.001.

$ bin/feature prov                 # Divisiones municipales cada provincia: A.municipios.geojson, AB.municipios.geojson...
$ bin/feature RI lugo              # Divisiones municipales para La Rioja y lugo: RI.municipios.geojson, lugo.municipios.geojson
$ bin/feature -a ccaa              # Divisiones de comunidad para cada CCAA: AS.ccaa.geojson, AN.ccaa.geojson...
$ bin/feature -t 0.01 -a prov VA   # Divisiones provinciales para Valladolid con un detalle menor: VA.prov.geojson

bin/merge -r|--reports csv -g|--feature feature [-f|--format format] [-n|--name name]

Genera un fichero TopoJSON a partir de uno (o varios) CSV y el GeoJSON que se especifique. El archivo 1calle1nombre.json resultante se crea en la carpeta raíz del proyecto. Este comando utiliza node para ejecutar la herramienta mapshaper.

Los parámetros -r, también se puede escribir --reports, y -g, o --feature en su versión larga, son obligatorios; donde csv es la ruta de archivo CSV (se pueden usar asteriscos, --globbing-- para indicar más de un elemento, o bien, pasarle una expresión, siempre envolviendo el argumento entre comillas dobles) y feature la ruta del GeoJSON en concreto. El parámetro -f o --format es opcional, si queremos el resultado en topojson o geojson (por defecto, topojson). Por último, el parámetro opcional -n o --name para cambiar el nombre al archivo resultante, que por defecto es 1calle1nombre.json

$ bin/merge -r reports/202001/CL.csv -g features/CL.geojson       # Output en TopoJSON
$ bin/merge -r "reports/*/GL.csv" -g features/municipios/GL.geojson -f geojson  # Output en GeoJSON con datos de todos los csv
$ bin/merge -r "reports/*/GL.csv" -g features/municipios/GL.geojson -n GL.json  # Fichero resultante GL.json en formato TopoJSON
$ bin/merge -r "$(grep -lnrw reports -e ES-EX)" -g features/municipios/EX.geojson  # Obtiene todos los CSV que contienen el identificador ES-EX, de Extremadura

La unión de archivos se produce a través del campo id presente tanto en los reports como las features, correspondiente al código INE del municipio. Por tanto, aplicar unos csv a un geojson de una región diferente, no producirá el resultado esperado.

Actualmente se ejecuta una transformación de los datos del informe, agrupando cada date y percentage en una propiedad llamada values, y dejando id y name tal cual. Es decir, un objeto properties de la forma:

{
  "id": "05154",
  "name": "Navadijos",
  "values": {
    "2020-01-01": 0,
    "2020-11-01": 0.52,
    "2020-12-01": 0.52,
    "2021-01-01": 0.52,
    "2021-02-03": 0.52
  }
}

bin/mapfile location

Generador de ficheros CSV en la carpeta mapfiles/<location>.mapfile.csv, que contienen un mapa de claves de los municipios (o entidades) dentro de la localización. Útil para editar o actualizar antiguos informes.