7 votos

Cómo puedo saber por qué un OSM forma no puede utilizarse para la encaminamiento, y cómo puedo solucionarlo

De fondo

Yo uso osm2po en una aplicación que necesita para el cálculo de distancias, tiempos, y la ruta entre los dos lugares.

En resumen, me toman los datos de Geofabrik como entrada para osm2po a la salida de un grafo dirigido con OSM Nodos como los nodos del grafo, y OSM Maneras como los bordes del gráfico.

Más adelante, para calcular la distancia, el tiempo, y la ruta entre los dos lugares, yo utilice este gráfico para la configuración regional más cercana de los nodos, a continuación, utilice uno de los osm2po router para construir una ruta entre los dos nodos.

Esto está funcionando bien la mayoría del tiempo.

Y cuando una de enrutamiento no se pueden hacer, por lo general debido a que los datos de OSM (particularmente de OSM formas) contiene un error o está ausente.

Más al punto

A través de la depuración de un caso particular, he localizado dos nodos a los que no se desplazan de uno a otro.

Este y este.

Como se puede ver, la única manera de que esos dos nodos puede ser enrutados juntos (con un coche) es de alguna manera salir de sus calles locales y va a través de este camino.

Después de más de depuración, veo que osm2po nunca use esta manera, supongo que no lo ve como un segmento válido.

Mis preguntas

  1. Mirando los datos de OSM, ¿cómo puedo saber (entender) por qué de esta manera no es válido para el enrutamiento ?
  2. En relación a mi primera pregunta: ¿cómo puedo arreglar (presentar modificaciones a) de OSM para permitir el enrutamiento utilizando de esta manera ?

EDITAR:

Se me olvidaba decir que si trato de ruta a partir de un nodo a otro nodo que son parte de esta misma manera, el enrutamiento es, obviamente, trabajando muy bien.

5voto

Kyle Heironimus Puntos 3015

Ok, me siento acerca de mí responder a mi propia pregunta. Supongo que tenía que hacerle la pregunta a pensar más y ser capaces de resolver el problema.

Resulta que el problema no estaba en los datos de OSM, pero con la osm2po fichero de configuración por defecto que uso para generar el gráfico.

El problema

En algún lugar (de la línea 188, si usted está utilizando osm2po 5.1.8) en el fichero de configuración por defecto, no es esta la línea de

wtr.allow.motor[car|_vehicle].[yes|destination] = car

Esta línea se utiliza para incluir en el gráfico final (para car de enrutamiento) las formas que tiene la etiqueta motorcar o motor_vehicle asociada con el valor yes o destination.

Y un par de líneas de bajo:

wtr.deny.motor[_vehicle|car] = car

Esta línea se utiliza para no incluir en el gráfico final, de todas las maneras que tienen los otros valores (para que otros que yes o destination) para las etiquetas de arriba (motorcar o motor_vehicle).

Y cuando miramos de esta manera, podemos ver que en efecto el motor_vehicle etiqueta, pero su valor es designated.

Así osm2po obedientemente, rechazó la forma de la gráfica final, por tanto, el tipo de respuesta a mi primera pregunta.

La solución

Yo sólo tenía que copiar el defualt osm2po.config archivo en mi proyecto, cambiar esta línea

wtr.allow.motor[car|_vehicle].[yes|destination] = car

con esta línea

wtr.allow.motor[car|_vehicle].[yes|destination|designated] = car

a continuación, vuelva a generar el gráfico y ejecutar mi caso de prueba para ver que funcionaba.

Ahora el gráfico final, que contiene la manera en que yo estaba buscando y osm2po es ahora capaz de utilizarlo para el enrutamiento.

Nota

Dependiendo de sus necesidades de enrutamiento, puede ser vale la pena mirar esta página (en alemán, la versión en inglés no es muy útil).

Explica somes de los valores que podemos esperar en este motor_vehicle etiqueta.

Por ejemplo, se encontró que también necesito permissive. Así que en mi osm2po.config archivo, ahora tengo esta línea:

wtr.allow.motor[car|_vehicle].[yes|destination|designated|permissive] = car

4voto

Fh. Puntos 225

De hecho, la default.config es muy estricta y para ser honesto es demasiado estricta para mi gusto. Tropecé a través de una pregunta similar hace semanas y modificado las notas osm2po de 5.1.0 informar sobre este problema.

La solución anterior es correcta. Pero creo que no hay así muchas etiquetas más positivas, que sería más corto para modificar la opción de denegar en su lugar a algo. Así:

wtr.deny.motor[_vehicle|car].no = car

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X