martes, 7 de marzo de 2017

Obtener datos OSM en QGIS.

Como sabemos OpenStreetMap (OSM) es una interesante fuente de datos geográficos. A pesar de que su contenido es muy variable y dependiente de lo habitada o frecuentada que sea una zona, y a pesar también de que se podría discutir bastante sobre el control y el rigor de muchos de los datos que los usuarios suben, a día de hoy es una base muy aprovechable cuando se trata de obtener datos para nuestros trabajos o representaciones de todo tipo.
Es precisamente por ese cierto caos de información, unido a un listado de categorías realmente amplio, por lo que a menudo se hace imprescindible clasificar y discriminar los datos que se ofrecen para obtener justamente aquello que necesitemos.

En el artículo de hoy, y con ayuda de QGIS, vamos a mostrar cómo descargar la información vectorial disponible en OpenStreetMap y cómo filtrarla para obtener datos individualizados.

Abrimos el programa QGIS. Lo primero que necesitamos es decidir la zona de terreno cuyos datos nos interesan; esto teóricamente lo podemos hacer cargando en pantalla cualquier mapa, objeto vectorial o cualquier referencia espacial que nos centre la vista sobre nuestro área de interés. Para evitar posteriores problemas de proyecciones entre nuestro objeto-referencia y los datos de OSM yo os recomiendo utilizar directamente el complemento OpenLayers, disponible en el repositorio de QGIS y que nos permite cargar en el programa las cartografías de los grandes productores mundiales como Google, Bing u OSM entre otros.
Una vez instalado este imprescindible complemento lo tendremos disponible en el menú Web de QGIS. Lo utilizamos y cargamos la modalidad del mapa OSM que queramos:
A continuación nos movemos por el mapa encuadrando nuestro área de interés. Para este caso práctico nosotros vamos a elegir la ciudad de León.
Nuestro área de interés -núcleo urbano de la ciudad de León- encuadrado en la vista de QGIS.
Momento ahora de usar las utilidades para gestionar datos OSM que QGIS trae por defecto en sus últimas versiones, y que podemos encontrar bajo el menú Vectorial. Como es obvio comenzamos por la descarga de datos:

Se nos abre la ventana gestora de la descarga de datos, muy sencilla:
Disponemos de tres opciones: a partir del lienzo del mapa, a partir de una capa cargada en QGIS, o introducir manualmente las coordenadas de la zona a descargar. Usaremos la primera opción, para lo que previamente hemos encuadrado en el lienzo la zona de nuestro interés. En archivo de salida simplemente damos un nombre y una ubicación al archivo de descarga.
Terminada nuestra descarga, cuyo tiempo y tamaño dependerá de la zona a descargar, se nos ha generado un archivo con el nombre dado y extensión .osm que es la clásica para las descargas vectoriales desde OpenStreetMap y se trata de un archivo vectorial con estructura XML.
Este archivo sería ya perfectamente visible en QGIS, que nos permite su carga como capa vectorial, pudiendo elegir los elementos a cargar (puntos, áreas, polígonos).
Archivo .osm generado por la descarga y abierto en bruto en QGIS.
Cada grupo de elementos contiene ya su tabla de atributos estructurada con los datos de OSM, por lo que en un proceso manual podríamos utilizarlos, clasificarlos o discriminarlos a voluntad.

Sin embargo, nos interesa mucho más obtener un archivo de base de datos con el que sea mucho más fácil trabajar en QGIS y realizar las distintas operaciones sobre datos geográficos que necesitemos. Para ello usamos la segunda función del menú: importar topología a partir de XML.
En Archivo de entrada cargamos nuestro archivo .osm de la descarga. El resto de parámetros se rellenan por defecto
 (aunque podemos modificarlos): archivo DB de salida y conexión SpatialLite (magnífica utilidad con la que siempre tendremos disponibles los datos a través de carga de capa vectorial de base espacial).
Listo nuestro archivo con extensión .db procedemos a importar los datos mediante la tercera herramienta del menú: exportar topología a SpatialLite.
En archivo de base de datos de entrada seleccionamos nuestro archivo .db. A continuación podemos escoger el tipo de fenómeno a exportar (punto, polilínea o polígono). Pulsando el botón Cargar de la base de datos se nos muestran en pantalla todas las categorías presentes en los datos. Seleccionamos aquellas que queramos importar (o todas) y dejamos la casilla Cargar en la vista del mapa cuando se termine activada para que los datos se carguen en el lienzo de nuestro proyecto.
El número de etiquetas que seleccionemos configurará lo completa que será la tabla de atributos de los elementos importados. Para este ejemplo nosotros queremos discriminar los puntos clasificados como supermercados en OSM; además queremos contar con la información del nombre de la tienda si la tuviera. Por tanto en las etiquetas marcamos los campos shop y name.
Aceptamos y QGIS nos importa todos los puntos de la base de datos OSM en la capa Leon_points; como sólo estamos interesados en los supermercados abrimos su tabla de atributos y notamos que algunos están etiquetados como supermarket...
... por lo que hacemos una consulta a la base de datos usando una expresión...
El programa nos devuelve, seleccionados en amarillo en pantalla y seleccionados también en la tabla de atributos, aquellos puntos cuya etiqueta en la categoría shop es igual a supermarket.

Ahora ya podríamos exportar nuestra selección como archivo vectorial shape y conservar nuestra solicitud (click derecho sobre la capa y Guardar como... marcando la casilla 'exportar sólo datos seleccionados' en la ventana de exportación a SHP). Y trabajar con aquellos datos de OSM que nos interesaban de la mejor manera posible.
Es muy importante para saber qué datos podemos conseguir desde OSM conocer el etiquetado que se utiliza en dicha cartografía, por lo que recomendamos dar un buen repaso o tener siempre a mano el catálogo de claves y valores que se utilizan habitualmente en OSM. Solo así podremos saber, por ejemplo, que la etiqueta path corresponde a sendero, track a camino, etc, etc... y podremos hacer nuestras búsquedas con buenos resultados.
Otro ejemplo, esta vez sobre las polilíneas de la base de datos, y posterior consulta highway=pedestrian sobre las mismas para discriminar aquellas calles catalogadas como peatonales en OSM y colocarlas sobre ortofoto Google.
El etiquetado de OSM es bastante abrumador y extensivo (véase aquí una muestra solamente para la clase highway) y a menudo no se respeta (o se completa muy básicamente) por parte de algunos editores. En cualquier caso creemos que este proceso es una absoluta maravilla para obtener datos individuales y clasificados de la magnífica fuente OSM. Un saludo y gracias por compartir.

6 comentarios:

  1. Como siempre como todos tus post, muy buen trabajo. Felicitaciones.
    desde Patagonia Argentina. Saludos

    ResponderEliminar
    Respuestas
    1. Muchas gracias! Un abrazo fuerte para que llegue tan lejos! Saludos.

      Eliminar
  2. Hola! muy buen post! me sirvió mucho. Te hago una consulta, ¿hay manera de obtener las alturas de las calles? El eje de calles se descarga con los nombres y tipo de ruta unicamente. Gracias!
    Saludos
    Evelyn

    ResponderEliminar
    Respuestas
    1. Gracias evelyn! Que yo sepa no ya que los datos osm originales no cuentan con datos de altura ni siquiera curvas de nivel. Puedes en cambio añadir un archivo DEM a los datos y saber así la altitud en cada punto. Saludos!!

      Eliminar
  3. buenas, te consulto porque en vectorial no me aparece la opción open streetmaps. como lo puedo solucionar para habilitarlo.

    ResponderEliminar
    Respuestas
    1. Este sistema desapareció del menú vectorial en las últimas versiones de QGIS. Busca algún complemento para descarga de datos OSM, hay varios y muy buenos. Saludos.

      Eliminar