OSM + ImpOSM + TileMill

by Pedro Juan Ferrer on

This blogpost was migrated from the previous content management system that hosted this blog. If you want to check for old comments or to find anything looking weird please follow this link to check the Internet Wayback Machine.

Hacía tiempo que no le dedicaba un ratillo a los temas geofrikis, no por falta de ganas, sino porque soy disperso, muy muy muy disperso, pero se cruzó la posibilidad de mezclar cartografía y juegos de rol y …

Allí que medio liando a otro, que no hace falta que le líe nadie, llamado @RealIvanSanchez, preparamos una versión online del mapa de Cunia, la ciudad sin alma del juego de rol Rol Negro de la editorial Ediciones Sombra.

Y por aquí os voy a comentar el stack que usamos para la hazaña…

OSM

Esto es una opinión personal, pero mira, si tienes que hacer un mapa de una ciudad y sus servicios creo que lo mejor es recurrir a los profesionales y en esto la OSMF gana, y punto.

No solo por llevar el crowdsourcing al ámbito cartográfico, sino porque han desarrollado herramientas de tratamiento de datos geográficos de manera distribuida que son la envidia de la industria, como JOSM o Potlatch 2.

The Rails Port

La idea detrás de The Rails Port es que cualquiera pueda tener un servidor de OSM en casa, para lo que se ha preparado un despliegue realmente sencillo siguiendo la filosofía de Ruby on Rails.

Bueno puede que la idea no fuera que lo pudieras tener literalmente en casa, pero el caso es que así puede ser así que aprovechando que tengo un servidor Dreamplug en casa instalamos en el mismo un The Rails Port para que contuviera la infraestructura del servicio

El único problema que nos encontramos fue que la versión de Rake que hay que usar para el despliegue es específica y aunque el cambio está documentado, por la razón que fuera pensamos que lo habíamos hecho aunque en realidad NO lo habíamos hecho.

Datos OSM

La parte de cómo hemos dibujado Cunia posiblemente la cuente en otro sitio aquí me referiré someramente a la herramienta JOSM que es el editor en Java y multiplataforma que se utiliza principalmente para crear información en formato OSM.

Pantallazo de josm con cunia

Pantallazo de josm con cunia

Partiendo de una imagen del mapa actual que se colocó de fondo se han digitalizado todas los ejes de calle y actualmente estamos trabajando en poner los nombres y edificios singulares, dejando para más adelante las florituras.

Al tener montado el The Rails Port varias personas pueden trabajar contra el mismo juego de datos, que es el verdadero potencial de usarlo en el servidor.

ImpOSM

ImpOSM es un nuevo importador de datos de OSM que inserta datos en un PostGIS.

Es una aplicación multiplataforma desarrollada en Python por Omniscale (Dominik Helle y Oliver Tonnhofer), los mismos de MapProxy.

Su principales características es que permiten modificar el mapeo de los datos a importar e incluso filtrarlos, que tiene soporte multiprocesador y que normaliza los datos antes de insertarlos.

Una de las cosas que más me han gustado de ImpOSM es el flujo de trabajo de la información que permite tener hasta 3 versiones de los datos (desarrollo, producción y una versión anterior) y cambiar de una a otra con un simple comando.

Instalación

La instalación es súmamente sencilla ya que al estar incluída en el Python Package Index responderá tanto a pip como a easy_install, solo hay que asegurarse de que se tienen instaladas las dependencias y estas ya vienen preparadas para instalar en un solo comando en la página correspondiente de la documentación.

La documentación recomienda instalar los Speedups de Shapely simplemente hay que acordarse de hacerlo como root (o usando sudo)

Uso

En la página de ImpOSM hay un pequeño tutorial que presenta las opciones más comunes de la aplicación.

Para importar los datos de OSM que tenemos seguiremos los mismos pasos del tutorial.

Crear la base de datos

Cuidado con la pequeña errata del tutorial porque la creación la base de datos se hace con imposm-psqldb y no con imposm-pgsql que es lo que pone.

Revisad bien el archivo create-db.sh y aseguraos que o bien están las rutas a los scripts de Postgis (opción por defecto del instalador) o bien se crea la base de datos usando la template de PostGIS, esto último si sois fans de las templates de PostgreSQL

Si todo ha ido bien tendréis una base de datos PostGIS monda y lironda en vuestro servidor.

Carga de datos

Os aconsejo en este punto que al menos la primera vez sigáis el tutorial donde se leen, optimizan y escriben los datos en tres pasos, más que nada porque a base de C&P no os va a costar mucho… yo directamente le voy a dar el comando todo-en-uno:

$ imposm --read --write --optimize -d osm cunia20110608.osm

Dependiendo de vuestro juego de datos esto tardará más o menos… en este caso unos segundillos. El proceso va mostrando información en pantalla de los pasos que va dando.

Esquema de datos por defecto

ImpOSM trae un esquema de datos por defecto que separa los fenómenos en varias tablas en función de algunas de las etiquetas más usadas de OSM, en concreto podremos encontrar:

  • Amenities
  • Places
  • Transport_points
  • Administrative polygons
  • Buildings
  • Landusages
  • Aeroways
  • Waterareas
  • Roads (en realidad repartidas en varias tablas en función de la categoría)
  • Railways
  • Waterways

También vienen unas tablas con geometrías de las vías de transporte generalizadas en función de dos tolerancias y unas vistas que agrupan todas las carreteras.

Flujo de trabajo

La importación de datos se hace sobre tablas a las que se le añade el prefijo osm_new_ en el nombre.

Para trabajar sobre las tablas se debería hacer un despliegue de las mismas, con ImpOSM basta con ejecutar el comando:

$ imposm -d osm --deploy-production-tables

Para que cambie el prefijo a osm_. Si ya hubieramos hecho otro despliegue las actuales tablas osm_ se renombran automáticamente a osm_old_. Cada vez que se hace un despliegue se borrarán primero las osm_old_.

Para revertir el despliegue se puede ejecutar el comando:

$ imposm -d osm --recover-production-tables

Y para borrar las old

$ imposm -d osm --remove-backup-tables

TileMill

TileMill es una aplicación web de diseño de mapas basado en Mapnik y node.js y que usa Cascadenik para configurar la apariencia del mapa.

Solo existe para Unix (Ubuntu 10.10), Mac y CentOS.

Actualmente está en su versión 0.3.2 y aunque se echan de menos algunas funcionalidades está claro que es funcional y que su potencial futuro es impresionante.

Instalación

La instalación de TileMill es un poquito más complicada ya que requiere bastante compilación e instalación de paquetes, sobretodo porque tira de Mapnik2 que en estos momentos está en desarrollo.

En alguna versión anterior de Ubuntu no se pueden instalar todos los paquetes de los repositorios oficiales, en mi caso me toco tirar del repositorio Lucidbleed para resolver algunas dependencias de la compilación de Mapnik.

Además hay paquetes opcionales que no están descritos en la documentación pero que es muy interesante que estén instalados si queremos que TileMill corra con total funcionalidad como por ejemplo python-pysqlite2.

El primer paso es instalar Mapnik2 compilándolo desde el código fuente tal como se expone en la web de TileMill.

A continuación se hace tres cuartos de lo mismo con la propia aplicación.

En principio la instalación de ambas aplicaciones debería ser bastante indolora, pero ya sabéis que estáis compilando y a veces se presentan problemas. Que tengáis Buena Suerte.

Uso

La principal ventaja que ofrece TileMill sobre otros procedimientos de generación de tiles o teselas es, en mi opinión, Carto/Cascadenik, una nueva manera de diseñar cartografías basada en CSS que junto con la interfaz web y la integración con Mapnik hace que puedas trabajar el un mapa a distintos niveles con una comodidad pasmosa.

El lenguaje permite crear distintas simbologías en función de niveles de zoom, categorías asignadas a la capa, contenidos de la capa y todo siguiendo la lógica CSS.

Un ejemplo, tomado de uno de los ejemplos que vienen con la aplicación, sería:

.highway\[type='motorway'\] {
  .line\[zoom>=7\]  {
    line-color:spin(darken(@motorway,36),-10);
    line-cap:round;
    line-join:round;
  }
  .fill\[zoom>=10\] {
    line-color:@motorway;
    line-cap:round;
    line-join:round;
  }
}

Añadimos dos veces la capa de carreteras, una de ellas le asignamos la categoría .fill y la otra la categoría .line. En el ejemplo le estamos asignado el color @motorway que debemos tener ya definido y que oscurecemos para hacer el efecto de caja. El efecto caja solo se verá en niveles de zoom iguales o superiores a 10.

El nudo de Cunia con la A3

El nudo de Cunia con la A3

Exportación

TileMill permite exportar las composiciones en tres formatos: Fichero PNG, Fichero PDF y Fichero mbtiles.

Este último fichero es una base de datos SQLite 3 con las teselas de los niveles de zoom que queramos, un formato que parece prometedor que por ejemplo emplea la solución Maps on a stick. Pero si quieres usar los tiles en por ejemplo OpenLayers deberás cambiarlos de formato usando mbutil.

Conclusión

La verdad es que el combo del que trata esta entrada es bastante potente, aunque aquí esté aplicado a una afición son realmente unas herramientas muy profesionales y que se pueden incluir en el flujo de trabajo a nivel profesional sin pasar demasiado miedo.

Espero que os resulten útiles.

Updated: 2022-03-03, Version: c62b004.