Propuesta: añadir toll=no a autovías gratuitas españolas sin tag toll

Hola a todos,

Estoy trabajando con GraphHopper como motor de routing y he identificado un problema que afecta a la calidad de las rutas en España.

GraphHopper infiere toll=ALL para cualquier highway=motorway que no tenga el tag toll explícito en OSM. Esto lo hace en su clase OSMTollParser.java como medida de seguridad para no asumir que una autopista es gratuita cuando no tiene datos.

El resultado práctico es que autovías gratuitas como la A-23 (Autovía Mudéjar) son tratadas como de peaje por el motor de routing, generando rutas incorrectas cuando un usuario quiere evitar los peajes.

Con Overpass API he comprobado que actualmente hay 39.536 ways con highway=motorway en España que no tienen el tag toll:

area["ISO3166-1"="ES"]->.spain;
way["highway"="motorway"][!"toll"](area.spain);
out count;

Me preguntaba que os parece el añadir toll=no a todas las autovías gratuitas españolas que actualmente no tienen el tag toll. Si una vía no es de peaje, debería tenerlo explícito en lugar de dejarlo sin definir.

No tengo mucha experiencia, por eso os lo quería comentar antes de hacer cualquier cambio. Las dudas que tengo son:
*¿Hay alguna razón por la que estas vías no tienen toll? ¿Alguna convención específica en OSM España que desconozca?
*¿Hay tramos dentro de esos 39.536 ways que sí sean de peaje o tengan situaciones mixtas que debería filtrar antes de editar?

*Veis correcta la query para sacar los las carreteras que son motorway pero no tienen el tag de toll?

Si lo veis bien la idea sería ejecutar el cambio via script usando la API de OSM en changesets de máximo 10.000 elementos, con mensajes de changeset descriptivos y pausas entre ellos.
No tocaría ningún way que ya tenga toll=yes o toll=no explícito.

Gracias de antemano por el feedback,

Un saludo!!

Parece que el problema es esencialmente éste, y la solución pasa por ajustar el comportamiento del método getCountryDefault.

Hacer un etiquetado masivo en OSM para solventarlo me parece un caso de “mapear para el renderer”.

4 Likes

Consultando la wiki, acepta que se use toll=no. Por lo tanto, yo no vería problema en caso que la consulta sirva para añadir toll=no si estás 100% seguro que no se añadirá un toll=no a una vía que sí que es de pago…

Puede que un Maproullette fuese una mejor opción.

O que únicamente añadieses toll=no a autopistas que tengas claras. Por ejemplo, creo que la Autovía Mudéjar sí que es gratis en su totalidad, pero la AP-7 que recorre el Mediterráneo, no. Así que habría que ir con mucho cuidado…

Tienes toda la razón, y agradezco el apunte. Después de investigarlo más, el fix correcto está efectivamente en GraphHopper, no en OSM.

He encontrado que el mecanismo adecuado es crear una SpainCountryRule siguiendo el patrón que ya usa GraphHopper para Austria y Alemania, que sobrescribiría el comportamiento de getCountryDefault para devolver Toll.NO en motorway y trunk cuando no hay tag explícito. España no tiene CountryRule todavía.

De momento he aplicado una solución local modificando el PBF antes de importarlo en GraphHopper, que resuelve el problema inmediato. Pero el plan es abrir un PR en GraphHopper con la SpainCountryRule para que el fix quede en el proyecto oficial y beneficie a otros.

Gracias de nuevo por orientarme en la dirección correcta.

2 Likes

Si, exacto probando una ruta que pasaba por la Autovía Múdejar es la que ha hecho que me de cuenta de que no se devuelve el tag toll. Creo que la AP-7 ahora es gratuita en casi todo su totalidad.
No conocía Maproullette le daré un vistazo.

Muchas gracias!!
Gracias!!

La línea 101 define una regla para varios países, incluído el país ESP que sería probablemente España.

Bastaría con eliminar ESP de la lista de esa línea para que se active el comportamiento por defecto (línea 108) que es inferir toll=no.