Blog del Máster
en Tecnologías de la Información Geográfica y Ciencia de Datos
Espaciales

Openstreetmap_logo

Cosas que hacer en compañía de OSM (III)

Importación a bases de datos

Una de las operaciones que nos abre más posibilidades en el manejo de datos OSM es la importación a bases de datos. A través de la importación podemos acceder a las entrañas de los datos e ir más allá de la simple visualización gráfica.

Existen varias herramientas que podemos utilizar para la importación de datos OSM a bases de datos relacionales. Cada una de estas herramientas produce una base de datos con unas características diseñadas para ser el máximo de eficientes para unos usos concretos. Unas bases de datos serán muy eficientes, por ejemplo, para generar imágenes (renderización) mientras que otras serán más eficientes para otros usos como análisis espacial con SQL, geocoding, etc.

Las distintas maneras de organizar los datos, dentro de una base de datos, se conocen como esquemas. Estos esquemas definen la organización y relaciones entre los datos dentro de la base de datos. Cada esquema, por lo tanto, se traduce en unas tablas, columnas y relaciones entre tablas que nos permitiran de manera, más o menos eficiente, dar unos usos concretos a nuestros datos.

Estos esquemas tienen tres características principales. Estas características son:

– Compatibilidad con  ficheros .diff . De este modo se da soporte para la actualización con los últimos datos provenientes de OSM. Encontraréis más detalles sobre los ficheros .diff en el primer POST de esta colección Cosas que hacer en compañía de OpenStreetMap.

Pregeneración de geometrías. Una base de datos con las geometrías predefinidas será mucho más eficiente para la renderización de imágenes que una base de datos que deba generar esas geometrías para cada petición.

Totalidad de los datos. Algunos esquemas reproducen con total precisión la base de datos OSM. Otros esquemas eliminan parte de esa información durante el proceso de importación.

Dos de las herramienas más utilizadas son Oms2pgsql y Imposm. Ambas herramientas importan datos OSM a bases de datos PostgreSQL / PostGIS con geometrías predefinidas por lo que se suelen utilizar tanto para el renderizado de imágenes como para su posterior análisis espacial.

Herramienta Usos Schemas Ficheros
diff
Geometrías Totalidad
de datos
osm2pgsql Renderizar –
Análisis
osm2pgsql No
osmosis Mirroring apidb No
osmosis Análisis pgsnapshot No
imposm Renderizar –
Análisis
imposm No No
osm2pgsql Geocoding nominatim

Heramientas más utilizadas


– Osm2pgsql
Se caracteriza por agrupar en una misma tabla  las entidades que tienen el mismo tipo de geometría (puntos, lineas o polígonos). Las cuatro tablas generadas tienen el mismo número de columnas. Estas tablas son:

planet_osm_point: Entitades de tipo punto
planet_osm_line: Entidades de tipo linea (excluyendo las carreteras)
planet_osm_polygon: Entidades de tipo polígono
planet_osm_roads: Carreteras

Con osm2pgsql disponemos de un fichero ‘default.style‘ que permite personalizar ligeramente el proceso de importación. Este fichero nos permite definir qué datos (atributos con volares concretos) queremos importar.


– Imposm
Esta herramienta genera una tabla para cada entidad e incluso algunas tablas con geometrías simplificadas optimizadas para niveles de zoom concretos. Algunos ejemplos de tablas són amenities, places, transport_points, admin, building, etc. Algunas tablas con geometrías simplificadas son  motorways_gen0, mainroads_gen0, railways_gen0, etc.

Imposm también dispone de un fichero de configuración ‘defaultmapping.py‘ que permite definir que tablas crear durante la importación y qual debe ser el contenido de esas tablas.

Veamos un fragmento del fichero defaultmapping.py.

towers = Points(
   name = ‘towers’,
   mapping = {‘man_made’: (‘tower’, ‘water_tower’)
   }
   fields = (
     (‘height’, Integer()),
   )
)

Este fragmento  indica que se va a crear una tabla ‘towers’ con los elementos que en  su  etiqueta ‘man_made’ tengan los valores ‘tower’ o  ‘water_tower’. Además la tabla Tower dispondrá  de una columna (de tipo entero) para almacenar el atributo ‘height’.

Bases de datos, SQL y análisis espacial

Una de las características más importantes de las bases de datos relacionales es el lenguaje SQL.  Con SQL podemos llevar a cabo cualquier tipo de operación sobre nuestras bases de datos (crear tablas, modificarlas, intertar datos, etc) siendo las operaciones más habituales las de consulta o análisis.

Con las funciones espaciales que PostGIS otorga al lenguaje SQL, podemos llevar a cabo las operaciones más habituales de un SIG de escritorio. Operaciones como dissolve, difference, merge, intersection, etc tienen sus equivalencias en las funciones espaciales de PostGIS.

La siguiente imágen muestra gráficamente el resutlado de sencilas consulas SQL. Concretamente  una zona de buffer de 350metros realizada sobre los rios de la ciudad de Girona. En rojo aparecen las guardarías de la ciudad fruto de otra consulta a la base de datos.

imatge_buffer_rius_guarderies2

A continuación se muestran las sentencias SQL utilizadas para generar la imagen anterior.

Guarderías:

Select * from planet_osm_point where amenity=’kindergarten’;

Crear Buffer:

Select st_buffer(way,350) from planet_osm_line where waterway=’river’;

Encontraréis un ejemplo más avanzado de análisis espacial con SQL en el post Análisis espacial con PostGIS de este mismo blog.

Si deseáis introduciros en el lenguaje SQL espacial sobre PostGIS podéis acceder a la plataforma de http://siglibre www.sigte.udg.edu/formasig

SIGTE
Servicio de Sistemas de Información Geográfica (SIGTE) de la Universitat de Girona


Suscríbete a nuestra newsletter