Motores de enrutado que toman en consideración la elevación del terreno y utilizan datos de OpenStreetMap

OpenStreetMap es una fuente cartográfica de datos libres (y abiertos). Esto ha permitido ser utilizada por múltiples aplicaciones y motores de enrutado. Entre ellos tenemos BRouter, OpenRouteService, YourNavigation y Cycle.travel. También existen Mapzen y GraphHopper. Ambos utilizados por el sitio web de OpenStreetMap. Ambos motores son software libre. BRouter, OpenRouteService, YourNavigation y Cycle.travel también son software libre.


Brouter, OpenRouteService, YourNavigation y Cycle.travel son un servicio web con una interfaz web disponible. BRouter además está disponible fuera de línea, empleando los datos disponibles en OpenStreetMap para generar rutas. Todos ellos tienen rutas con un punto de inicio y uno final. Todos ellos soportan añadir múltiples puntos intermedios.

Todos estos servicios emplean datos de elevación del terreno suministrados por la NASA. Algunos (GraphHopper, Mapzen) permiten otros proveedores de datos. Esto permite saber la pendiente del recorrido a realizar. Esto es información muy útil si es una ruta para bicicleta o a pie. De hecho, su principal objetivo es ofrecer rutas en bicicleta.

De todos ellos BRouter es un poco más especial. BRouter permite comprobar hasta tres alternativas distintas a la propuesta original por parte del enrutador. Dispone de distintos perfiles de ruta según el medio de transporte: bicicleta, coche, a pie, tren, río, excursionismo (trekking) o senderismo (hiking). Para cada medio hay distintos perfiles.

En el caso de que las rutas no te satisfagan, BRouter permite establecer tus propios perfiles. Un perfil consiste en una serie de parámetros que establecen la función de coste empleada por los algoritmos de enrutado. Emplea tres: Dijkstra y A* (A-star) para seleccionar caminos y un tercero para añadir al coste los datos de elevación del terreno. En la web de BRouter encontraréis más información. Dejo los enlaces al final de esta entrada.

Un perfil consiste en asignaciones clave=valor. También permite algunas construcciones típicas de un lenguaje de programación. Esto permite personalizar mucho mejor el funcionamiento del algoritmo evitando pasar por zonas indeseadas que otros enrutadores utilizan. Hay una guía de desarrollo de perfiles. Entre sus recomendaciones está la de usar la versión web de BRouter ya que permite modificar perfiles en línea. Se pueden probar ahí y luego exportarlos al móvil. El cliente web también permite guardar la ruta en formatos GPX, KML, GeoJSON y CSV.



La oferta de Google Maps es un poco hardcore. La alternativa no es mejor.

La oferta básica de BRouter nos da una pendiente más digerible. Aún así sigue siendo bastante con un tramo al inicio de la subida con una pendiente del 15%.



El gráfico de pendiente tiene un detalle bastante elevado así que podemos apreciar bien las diferencias entre las distintas alternativas.


En su versión fuera de línea nos permite usarlo con OsmAnd. OsmAnd es software libre. OsmAnd dispone además del servicio OSM Live que mediante una contribución económica permite recibir actualizaciones de OpenStreetMap en periodos inferiores al ciclo mensual sin OSM Live activado. El 50% del total de contribuciones de OSM Live va a parar a colaboradores de OpenStreetMap dados de alta en OSM Live. El otro 50% de las contribuciones va a parar al desarrollo de OsmAnd.

Al instalar BRouter y ejecutarlo por primera vez se le indica una carpeta para descargar los archivos de rutas. En el mapa que se nos presenta se pulsa sobre los recuadros que necesitemos para cubrir, por ejemplo, España. La descarga es de unos 136 MiB y es lenta. Una vez los datos están descargados, ya podemos utilizar en OsmAnd a BRouter como servicio de enrutado. Hay que configurar OsmAnd para que utilice a BRouter cambiando en los ajustes de navegación el servicio de navegación. Se puede escoger para los tres perfiles de OsmAnd (automóvil, bicicleta y a pie). Por la naturaleza de BRouter lo más adecuado es usarlo para rutas en bicicleta y también a pie.

Los perfiles de BRouter se guardan en la carpeta «brouter» situada donde se indique que BRouter descargue sus archivos. Si utilizamos el almacenamiento interno y la ruta en el sistema de archivos es /storage/emulated/0, entonces los perfiles estarán en /storage/emulated/0/brouter.

Hay que decir que en la versión para Android si el área en OpenStreetMap es muy densa, BRouter se queda en un radio de acción de unos 150 Km (Crossing the Alpes, ver web de BRouter).

Cambiando de enrutador, pasamos a OpenRouteService.  ORS Posee únicamente de interfaz web y la API correspondiente. Dispone también de diversos perfiles. Maneja parámetros básicos modificables mediante deslizantes u otros controles gráficos. Dichos parámetros son la pendiente, tipo de superficie, habilidad del conductor.

Con OpenRouteService obtenemos una ruta algo mejor a la de BRouter, que ya era mejor que la de Google Maps, incluyendo las alternativas de BRouter

En el gráfico de pendiente (recuadro inferior derecha) podemos escoger distintos modos de representación. Cada uno nos indicará el valor del parámetro escogido a medida que transcurre el recorrido. Como en todos los enrutadores, al pasar el ratón por encima nos muestra también un marcador en el mapa que coincide con el punto en el cual el valor del gráfico es aplicable.
OpenRouteService permite exportar la ruta a GPX, KML, GeoJSON y RawJSON.

Cycle.travel nos da una ruta similar a la propuesta «Original» de BRouter. No hay posibilidad de seleccionar alternativas o variar parámetros.

YourNavigation también dispone de distintos perfiles. No son personalizables. La ruta trazada también es similar a la «Original» de BRouter.



En cuanto a Cycle.travel, no ofrece nada en especial. YourNavigation ofrece navegación paso a paso.

Ruta con GraphHopper

Gráfico de pendiente de la ruta de GraphHopper

GraphHopper parece que sortea justo la parte con más pendiente de la propuesta «Original» de BRouter. Lo mismo ocurre con Mapzen.

Ruta con Mapzen

Pendiente de la ruta de Mapzen

Mapzen y Cycle.travel son los únicos que han hecho un zig-zag antes de comenzar el zigzag de la montaña. Mapzen se desvía un poco más para realizar un zig-zag adicional en la montaña disminuyendo la pendiente. Otro camino por el cual evitar una dura pendiente. Mapzen dispone de un entorno de desarrollo para Android. Entre sus repositorios de Github nos encontramos también con el código fuente de un reemplazo para los servicios de localización de Google Play.

Todos los enrutadores que emplean datos de OpenStreetMap y elevación han superado a Google Maps. Además son software libre por lo que cualquiera con los conocimientos necesarios puede añadir mejoras o pulir el enrutador para determinadas situaciones.

OpenRouteService parece un buen servicio web y es junto con Mapzen el que mejor ruta ha dado en términos de pendiente.

Con BRouter he estado modificando los valores de algunos parámetros pero no he obtenido los mismos resultados que con ORS o MapZen.

ORS no lo eligiría como el enrutador único y definitivo. Los algoritmos de enrutado no pueden encontrar la ruta óptima entre dos puntos. Emplean heurísticas (criterios de selección) para escoger un camino entre dos puntos. Esto significa que mientras que ORS puede haber dado el mejor resultado en este trayecto puede que en otro distinto de el peor resultado. Sin embargo normalmente estos algoritmos suelen estar cerca del 70% del óptimo el 90% de las veces.

A falta de un metaenrutador, lo mejor es comprobar ORS, Mapzen, graphopper y Brouter cuando vayamos a realizar una ruta. Lástima que OpenStreetMap no ofrezca la información de pendiente en su interfaz web. Y lástima que salvo BRouter, ninguno de ellos se integre con OsmAnd.

En cualquier caso, el premio al peor resultado se lo lleva Google Maps.


Enlaces:
  1. Brouter
    1. Web con más detalles. Explicación de algoritmo, perfiles de parámetros de costes.
  2. OsmAnd (F-Droid). También está en Google Play.
  3. OpenRouteService. Código fuente del servicio web.
  4. Cycle.travel
  5. YourNavigation.
  6. OSRM.
  7. GraphHopper. Código fuente.
  8. Mapzen. Repositorio en GitHub.

Comentarios