Title Image

Blog

Obtener datos geográficos libres mediante Overpass Turbo

  |   Geolocalización, SIG, Tratamiento de datos

OpenStreetMap (OSM) dispone de un conjunto de datos enriquecidos con más información de la que se puede pensar a simple vista. Visitar la entrada Map Feature en la wiki del proyecto da una idea de la taxonomía utilizada para describir cada uno de los elementos que se recogen en sus base de datos y poder ver que son cientos de etiquetas las que ayudan a describir casi cualquier tipo de elemento potencialmente cartografiable.

En esta entrada mostraremos algunos sencillos ejemplos sobre cómo extraer esos datos utilizando la API de Overpass. Esta API permite consultar los datos de OSM por los criterios de búsqueda que deseemos mediante un lenguaje de consulta diseñado específicamente para ello.

Tabla de claves y valores para la modelización de elementos en OpenStreetMap

Tabla de claves y valores para la modelización de elementos en OpenStreetMap

Realizaremos unas consultas sobre los datos geográficos que almacena OSM definiendo unos elementos con unas características determinadas y situados en un área concreta. La API acepta dos lenguajes de consulta: Overpass QL y Overpass XML. La primera es una versión simplificada del lenguaje de consulta XML.
Por otra parte, Overpass Turbo es una interfaz basada en web donde podemos ejecutar cualquier tipo de consulta Overpass y mostrar los resultados en un mapa interactivo o directamente descargarlos a nuestro ordenador.

La interfaz de Overpass Turbo es muy sencilla. Se componen de un menú con ocho botones, una sección en el lado izquierdo para introducir nuestra consulta y un visor de mapa a la derecha donde se mostrará el resultado de nuestra petición. Veamos algunos sencillos ejemplos que muestran el potencial de lo que podemos llegar a hacer con Overpass.

La interfaz Overpass Turbo.

La interfaz Overpass Turbo.

El primer paso será encontrar la clave y valor que define el o los elementos que queremos localizar y delimitar el área de búsqueda. Para ello, si desconoces el par clave:valor te sugiero que visites la siguiente tabla de elementos publicada en la wiki de OSM. Ya adelanto que no se encuentran todos, pero si están presentes una buena parte de ellos. Estas lista es un buen punto de partida para conocer la ontología presente en OpenStreetMap y poder bucear por la wiki de OSM para buscar aquella etiqueta y valor que se adapte a las características del elemento que necesitamos encontrar y que no está presente en este listado.

La semántica básica de la API de Overpass se fundamenta en flujos de datos provenientes de OpenStreetMap (nodos, vías y relaciones), los cuales son generados y modificados mediante declaraciones, que se ejecutan una tras otra.

Encontrar algo en la base de datos de OpenStreetMap significa siempre buscar por un lugar o por valores de ciertas etiquetas. En este último caso buscamos unos objetos de tipo punto (type=»node») y con un nombre específico: el valor del nombre clave será BBVA (k=»name» v=»BBVA»). La etiqueta print nos permite visualizar en el mapa todos los elementos encontrados.

<osm-script>
  <query type="node">
    <has-kv k="name" v="BBVA">
  </has-kv></query>
  <print>
</print></osm-script>

Si pulsamos en el botón Ejecutar Overpass Turbo resalta en el mapa de la izquierda aquellos elementos que cumplen con el criterio de consulta que hemos introducido: nos muestra la implantación geográfica del banco BBVA en todo el mundo recogida en OpenStreetMap.

Resultado de una consulta con Overpass Turbo: oficinas bancarias de BBVA en el mundo.

Resultado de una consulta con Overpass Turbo: oficinas bancarias de BBVA en el mundo.

Si el número de elementos encontrados en la consulta es elevado quizá nos interese delimitar el área geográfica de búsqueda. Para ello especificamos el bounding box (bbox-query) o área mínima de búsqueda delimitada por dos pares de coordenadas para la esquina superior derecha e inferior izquierda. El resultado es este.

<osm-script>
  <query type="node">
    <has-kv k="name" v="BBVA"/>
    <has-kv k="amenity" v="bank"/>
    <bbox-query e="-3.00" n="43.60" s="42.20" w="-4.50"/>
  </query>
  <print/>
</osm-script>

El número de resultados es amplio pero es posible que algunos locales estén representados en OpenStreetMap como polígonos y por lo tanto no aparecerán en el mapa debido a que solo estamos buscando puntos. Añadamos, pues, la misma consulta pero esta vez para todo tipo de objetos con determinada etiqueta presentes dentro de un cuadro delimitador. Será necesario repetir la etiqueta para cada tipo de primitiva y utilizar el operador union.
Recuerda que OSM modela la realidad a través de tres tipos de elementos básicos:

  • Los nodos (nodes). Son puntos en el espacio y disponen de información sobre su ubicación.
  • Las vías (ways). Son listas de nodos ordenados. Pueden describir características lineales, como las carreteras, caminos y vías fluviales y también se pueden cerrar para crear áreas.
  • Las relaciones (relations). Son listas de primitivas, incluyendo otras relaciones y permiten modelar las características que no se pueden describir utilizando un único nodo o forma.

Además, con case=»ignore» indicamos que nuestra búsqueda sea insensible a caracteres en mayúsculas y utilizamos la expresión regular regv=»bbva» para conseguir nombres aproximados. En este caso, la consulta requerirá de un tiempo.

<osm-script>
 <union>
  <query type="node">
    <has-kv case="ignore" k="name" regv="bbva"/>
    <has-kv k="amenity" v="bank"/>
    <bbox-query e="-3.00" n="43.60" s="42.20" w="-4.50"/>
  </query>
   <query type="way">
    <has-kv case="ignore" k="name" regv="bbva"/>
    <has-kv k="amenity" v="bank"/>
    <bbox-query e="-3.00" n="43.60" s="42.20" w="-4.50"/>
  </query>
   <query type="relation">
    <has-kv case="ignore" k="name" regv="bbva"/>
    <has-kv k="amenity" v="bank"/>
    <bbox-query e="-3.00" n="43.60" s="42.20" w="-4.50"/>
  </query>
 </union>
 <print/>
</osm-script>
En la esquina inferior derecha del mapa Overpass Turbo contabiliza los elementos encontrados según cada tipo.

En la esquina inferior derecha del mapa Overpass Turbo contabiliza los elementos encontrados según cada tipo.

Si pulsas el botón Exportar, Overpass Turbo te da la posibilidad de guardar el resultado en diferentes formatos, entre ellos geoJSON o KML.

En Overpass Turbo tienes la posibilidad de exportar el resultado de tu consulta a diferentes formatos.

En Overpass Turbo tienes la posibilidad de exportar el resultado de tu consulta a diferentes formatos.

Por último, y para finalizar esta entrada, también podemos encadenar consultas a través de Overpass para conseguir elementos recogidos en OpenStreetMap que satisfagan un segundo criterio de búsqueda, en este caso espacial. El ejemplo de abajo busca cajeros automáticos en un radio de 200 metros alrededor del Museo de la Evolución Humana de la ciudad de Burgos.

<osm-script>
 <query type="way"> 
  <has-kv k="tourism" v="museum"/> 
  <has-kv k="name" v="Museo de la Evolución Humana"/> 
 </query> 
 <query type="node"> 
  <around radius="200"/> 
    <has-kv k="atm" v="yes"/>
 </query> 
 <print/>
</osm-script>

Puedes consultar esta guía con una gran cantidad de ejemplos sobre consultas realizadas con la API de OverPass.