Cómo cargar datos de OpenStreetMap en PostgreSQL


En este tutorial veremos cómo cargar datos de OpenStreetMap en vuestra base de datos PostgreSQL.

¿Qué es OpenStreetMap?

OpenStreetMap es un proyecto colaborativo para crear mapas editables y bajo una licencia abierta.

Para comenzar debemos descargarnos los datos de OSM:

Para ello podemos dirigirnos a la página de Planet OSM y veremos que se encuentra la base de datos completa y actualizada de OpenStreetMap en diferentes formatos:

  • Latest Weekly Planet XML File (85 GB), se trata de la última versión completa de OpenStreetMap en formato XML.
  • Latest Weekly Changesets (3.1 GB), se trata de los últimos cambios añadidos a la base de datos completa, muy útil si ya tenéis descargada la versión anterior y solo queréis ir actualizando los cambios, además contiene no solo datos actualizados sino también versiones anteriores de los elementos eliminados.
  • Latest Weekly Planet PBF File (49 GB), se trata de la última versión completa de OpenStreetMap en formato PBF.

Los tamaños son orientativos ya que cada semana se realiza una copia nueva y completa de todos los datos en OpenStreetMap.

Como habréis notado los tamaños son bastante inmanejables para la mayoría de nuestros ordenadores.

Para descargarnos fragmentos más pequeños nos vamos a dirigir a la web de geofabrik.de.

¿Qué es geofabrik?

Se trata de una empresa alemana que trabaja continuamente con datos de OpenStreetMap, extraen, seleccionan y procesan estos datos y los sirven de manera gratuita.

Nos dirigimos al apartado descargas y veremos que esta organizado en bloques, para este tutorial nos descargaremos un país no muy extenso, por ejemplo, vamos a descargarnos los datos de ecuador.

Si vemos las especificaciones técnicas de geofabrik:

  • El formato de datos .osm.pbf es el formato común para el intercambio de datos sin procesar de OpenStreetMap. Es rápido de leer y escribir y puede ser procesado directamente por la mayoría de los programas que manejan datos OSM. Los archivos de geofabrik .osm.pbf son 100% puros, OSM sin filtro y contienen todos los datos y metadatos disponibles en OSM para la región; lo único que no contienen es el historial, es decir, información sobre ediciones pasadas.
  • Los archivos .osm.bz2 son versiones comprimidas de datos XML de OSM para la región. Generan estos archivos a partir de los archivos .osm.pbf con un proceso en segundo plano de baja prioridad, lo que significa que a menudo serán un día más antiguos que los equivalentes .osm.pbf. También son más lentos de procesar y más grandes.
  • Los archivos .shp.zip contienen varias capas. A diferencia de los archivos pbf / bz2, los archivos shapefile no están completos geofabrik ha realizado una selección de características y atributos, además no admiten geometrías multipolígono, es decir, podrían faltar entidades de área complejas.

El archivo que nos interesa es el de ecuador-latest.osm.pbf vemos que fue actualizado hace 13 horas y que contiene todos los datos de OSM hasta el 2020-02-05 (Tamaño de archivo: 64 MB).

Lo descargamos y guardamos el archivo, nosotros vamos a guardarlo en el escritorio.

Ahora vamos a descargar el programa osm2pgsql para cargar los datos en nuestra base de datos OpenStreetMap.

¿Qué es osm2pgsql?

Osm2pgsql es un programa basado en la línea de comandos que convierte los datos de OpenStreetMap en bases de datos PostgreSQL.

Lo descomprimimos y guardamos la carpeta donde os sea más cómodo, nosotros vamos a guardarla en el escritorio.

El siguiente paso es crear nuestra base de datos PostgreSQL con el complemento PostGIS, le vamos a llamar ecuador a la base de datos, si no sabéis como hacerlo os dejamos el siguiente tutorial:


  • Como Instalar PostGIS 3.0

    En este Tutorial veremos como Instalar PostGIS 3.0 a través de la herramienta Stack Builder


Además, debemos añadir a la base de datos la extensión hstore.

					
CREATE EXTENSION postgis;						
CREATE EXTENSION hstore;
					
				

Una vez tenemos la base de datos lista y con el complemento PostGIS instalado, vamos a lanzar el siguiente Script:

					
osm2pgsql C:\Users\geopois\Desktop\ecuador-latest.osm.pbf -d ecuador -U postgres -P 5432 -S default.style -C 3000 -–hstore –H localhost -W –-cache-strategy sparse
					
				

La primera parte del script ejecuta el programa osm2pgsql.

La segunda parte debemos indicar la ruta del archivo pbf descargado de geofabrick, en nuestro caso la ruta será C:\Users\geopois\Desktop\ecuador-latest.osm.pbf.

Luego viene el nombre de la base de datos, en nuestro caso la hemos llamado ecuador.

A continuación, hay que indicar el gestor de la base de datos que para nosotros será postgres y el puerto en el que se ejecuta que es el 5432.

El 3000 es la memoria cache destinada la proceso, si se da el caso que no funciona la carga de archivos probar a aumentar la memoria chache por ejemplo a 7000 y si tenéis 8 GB de RAM.

Ejecutamos la pantalla del símbolo del sistema, escribiendo cd en el buscador de Windows.

  1. Nos dirigimos a la carpeta de osm2pgsql:
  2. cd Desktop
  3. cd osm2pgsql
  4. Ejecutamos el script para ello copiamos y botón derecho del ratón sobre la pantalla del símbolo del sistema.
  5. Introducimos la contraseña de nuestro PostgreSQL.

Si todo ha ido bien os debería aparecer algo parecido en la consola de Windows:

					
Reading in file: C:\Users\geopois\Desktop\ecuador-latest.osm.pbf
Using PBF parser.

Processing: Node(9293k 2323.4k/s) Way(928k 29.96k/s) Relation(2890 481.67/s)  parse time: 43s
Node stats: total(9293451), max(7188825568) in 4s
Way stats: total(928891), max(770058728) in 31s
Relation stats: total(7065), max(10672059) in 8s

Sorting data and creating indexes for planet_osm_point
node cache: stored: 9293451(100.00%), storage efficiency: 50.00% (dense blocks: 0, sparse nodes: 9293451), hit rate: 100.00%

Sorting data and creating indexes for planet_osm_line
Copying planet_osm_point to cluster by geometry finished
Creating geometry index on planet_osm_point
Creating indexes on planet_osm_point finished
All indexes on planet_osm_point created in 28s
Completed planet_osm_point

Sorting data and creating indexes for planet_osm_polygon
Copying planet_osm_line to cluster by geometry finished
Creating geometry index on planet_osm_line
Creating indexes on planet_osm_line finished
All indexes on planet_osm_line created in 113s
Completed planet_osm_line

Sorting data and creating indexes for planet_osm_roads
Copying planet_osm_roads to cluster by geometry finished
Creating geometry index on planet_osm_roads
Creating indexes on planet_osm_roads finished
All indexes on planet_osm_roads created in 29s
Completed planet_osm_roads

Copying planet_osm_polygon to cluster by geometry finished
Creating geometry index on planet_osm_polygon
Creating indexes on planet_osm_polygon finished
All indexes on planet_osm_polygon created in 136s
Completed planet_osm_polygon

Osm2pgsql took 234s overall
					
				

Ahora nos dirigimos a nuestra base de datos PostgreSQL a través del programa pgAdmin 4 y verificamos que se han creado las siguientes tablas:

  • planet_osm_line
  • planet_osm_point
  • planet_osm_polygon
  • planet_osm_roads

Y ya tenemos lista y preparada nuestra base de datos PostgreSQL con los datos de todo el país de ecuador descargados de OpenStreetMaps, y además totalmente actualizados.

¿Alguna pregunta? ¿Quieres realizar sinergias o colaboraciones? ¿Te gustaría enviarnos feedback sobre el tutorial? No dudes en contactar a jgabas@geopois.com.



Sobre el Autor


Javier Gabás Jiménez

Soy un apasionado de los mapas y la infraestructura de datos espaciales, me divierto mucho buscando formas de comprender y presentar datos visualmente, así como entender la programación que hay debajo. Ingeniero en geomática y topografía por la Universidad Politécnica de Madrid, cuando no estoy trabajando o estudiando, estaré viajando y disfrutando de la vida junto a mi pareja.



Formamos parte del programa de emprendimiento #17actuaupm