Técnica · cuaderno

BRouter no es Komoot.

Lo que pasa cuando intentas calcular 64 trazados de senderismo con un motor pensado para bicicleta

La pregunta empezó como una limitación: no podemos publicar mapas con trazas inventadas por IA, y los GPX oficiales de la Xunta, la JCyL, la FEDME o el CNIG no siempre están publicados. ¿Qué línea pinto sobre OpenTopoMap entonces? La respuesta que encontramos fue BRouter, el motor de routing libre que también usan Komoot y OsmAnd. La asunción inicial — equivocada — fue que si BRouter sirve para Komoot, sirve para nosotros.

Esto es lo que pasó cuando intentamos calcular 64 trazados.

Lo que BRouter hace bien

Para entender la limitación hay que entender la fortaleza. BRouter recibe dos coordenadas y devuelve la línea óptima entre ellas siguiendo la red de caminos de OpenStreetMap, ponderada por el perfil que le pases: car-fast, trekking, fastbike, etc. Para el ciclismo de carretera funciona perfecto: las carreteras están en OSM, sus atributos también (asfalto, ancho, dirección), y la red está casi siempre completa.

Para senderismo en sierras españolas con buena cobertura OSM también funciona. La Garganta del Cares nos salió a 1.527 puntos de trazado con coordenadas razonables, una poligonal coherente con el sendero real y altimetría suficiente para dibujar perfil. Aneto, 905 puntos. Mulhacén por la veredilla, similar. La razón: estos itinerarios están mapeados con detalle en OSM porque hay comunidad activa de senderistas que sube tracks y los integra como ways.

Lo que falla en la Meseta

El Camino de Santiago a su paso por Tierra de Campos es otro animal. Allí el sendero jacobeo cruza llanuras agrícolas donde el camino real va por cordeles de tierra entre cebada que cambian con la rotación de cultivos. Esos cordeles a veces están en OSM, a veces no, a veces están con otro highway. BRouter, al no encontrar el way que el peregrino caminaría, rodea por la carretera asfaltada paralela. Resultado: una traza geográficamente correcta para un coche, geográficamente mentirosa para una persona andando.

El caso peor que encontramos fue Sarria-Portomarín. Distancia oficial Oficina del Peregrino: 22,4 km. Cálculo BRouter inicial: 168 kilómetros. El motor estaba bajando por carretera nacional, entrando en Lugo, dando un rodeo absurdo. Cuando lo investigamos: faltaba un tramo del sendero jacobeo gallego en la base OSM por el que pasábamos, y BRouter no podía conectar los waypoints sin salir a la red rodada.

Otro caso: Castrojeriz-Frómista, la etapa de la meseta castellana. Saltos entre puntos consecutivos de hasta 2.291 metros en una etapa que tiene 24 km totales. El trazado parecía geográficamente correcto en el mapa, pero al graficarlo como perfil altimétrico saltaba como un electrocardiograma.

Los tres niveles de intervención

Tras dos meses calculando, refinando y volviendo a calcular, nos quedó esta jerarquía:

Nivel 1 — no tocar. Cuando OSM tiene el sendero mapeado con detalle (highway=path + sac_scale + el operador del PR/GR como tag), BRouter devuelve algo aprovechable. Es lo que tenemos en la mayoría de cumbres pirenaicas y picos andaluces. 64 fichas con esta categoría.

Nivel 2 — corregir waypoints. Si el waypoint que le pasamos a BRouter está a 50 metros de la traza real, el motor calcula desde el punto erróneo y mete artefactos. La solución es fijar las coordenadas usando la cartografía del CNIG: extraer la coordenada exacta del waypoint oficial y pasarla a BRouter. Esto nos arregló 14 GPX con waypoints OSM mal ubicados.

Nivel 3 — subdividir. Cuando entre dos waypoints hay un gap grande de OSM y BRouter pierde el camino, la salida es meter waypoints intermedios artificiales para forzar el ruteo por el corredor correcto. Escribimos un script fix-trazados-saltos.mjs que detecta saltos >500 m entre puntos consecutivos y subdivide la sección por la mitad llamando a BRouter de nuevo. Reducción de flags de auditoría: del 34 al 25, un 27 %. El salto peor pasó de 2.291 m a 641 m.

Las etapas que aún no convergen tras subdivisión son todas Tierra de Campos. Eso ya no es problema de algoritmo; es problema de base de datos OSM. Para esas etapas la única solución real es conseguir el GPX oficial de la Xunta o la JCyL o la FEDME, y la mayoría no son públicos. Por eso el siguiente paso del proyecto es fetch-gpx-oficiales: pedirlos uno a uno a los organismos emisores.

Lo que dijo el sello editorial

Tras dos meses, decidimos que ningún trazado se publica sin un nivel de confianza explícito visible al usuario:

oficial-cartografia · trazado descargado del CNIG / IGN / Xunta. La línea es exactamente la del organismo. Cero invención.

oficial-federativo · trazado descargado de FEDME / federación autonómica. Sello blanco-amarillo. Equivalente a oficial.

comunitario-verificado · trazado de relations OSM con metadatos completos del PR/GR, contrastado con tracks de senderistas. No es la administración pero la calidad es buena.

interpolado-brouter · cálculo BRouter sin track de referencia. El usuario lo sabe.

esquematico-geodesico · línea recta entre cumbre y collado en casos alpinos no rutables. El usuario lo sabe.

Lo importante es la última columna de esa lista. Si un peregrino baja un GPX nuestro y se mete por un sendero que BRouter calculó pero la cartografía del CNIG marca como cerrado, queremos que sepa desde el principio que el dato no era oficial. Eso es lo que distingue una guía de un sitio que recopila tracks aleatorios.

El otro descubrimiento incómodo

La cosa que no esperábamos: para algunas cumbres alpinas, BRouter directamente no funciona. El Aneto por la vía normal cruza el glaciar de Coronas, donde no hay ningún highway en OSM porque ¡no es un highway! Es hielo. BRouter no encontró ruta y devolvió un error 404 amistoso. Para esos tres casos pintamos una línea geodésica recta entre puntos y le metimos el sello esquematico-geodesico, explicando al usuario que el trazado real depende del estado del glaciar de ese día y que la cartografía oficial del CNIG es la única referencia.

Komoot, para que conste, hace algo parecido: en alta montaña sin red OSM densa pierde precisión. La diferencia es que Komoot no le dice al usuario por qué; nosotros sí.

Cuándo sirve este motor

BRouter sirve para tres cosas, en este orden: complementar trazados oficiales cuando faltan tramos puntuales; generar borradores rápidos para fichas en desarrollo; documentar honestamente dónde no llega tu fuente. No sirve para sustituir un GPX oficial. No sirve para Tierra de Campos. No sirve para glaciares.

Lo seguimos usando porque, con sus límites declarados, es la mejor opción libre que existe. Pero entender los límites tardamos dos meses en aprenderlos, y para entonces ya habíamos publicado 48 trazados que tuvimos que auditar y reclasificar uno a uno.

Cristian Corrales
· Tras auditoría H14 y H20