PgRouting: ¿Cómo recortar enlaces cuando se alcanzan los costos máximos?


13

Tengo un archivo de forma de polilínea que representa una red de carreteras y un segundo archivo de forma que contiene puntos. Me gustaría usar PostGIS (presumiblemente PgRouting) para identificar subredes o áreas de servicio que se irradian desde estos puntos.

Esencialmente, espero hacer la pregunta: "A partir del punto X, ¿hasta dónde podría caminar en una dirección determinada, dado un presupuesto total de viaje de 1 km, siguiendo la red de carreteras?" El resultado sería un conjunto de polilíneas recortadas que representan el rango total de posibilidades de viaje, dado un presupuesto de viaje de 1 km.

Como referencia, este análisis de GRASS parece ser exactamente lo que quiero hacer (excepto que quiero hacer esto en PostGIS): http://www.gdf-hannover.de/lit_html/grass60_v1.2_en/node57.html#sec: optalloc

El siguiente ejemplo parece ser casi lo que quiero hacer, excepto que parece responder a la pregunta "¿a qué nodos podría viajar dado un presupuesto de viaje de X distancia?" http://underdark.wordpress.com/2011/02/12/drive-time-isochrones/

La segunda no es exactamente la respuesta que estoy buscando, ya que quiero que las polilíneas se ajusten a mi distancia de viaje; no me importa si llego hasta un nodo.


Una opción que se me ocurre es dividir de alguna manera mis polilíneas en muchos puntos. Eso me acerca a la respuesta correcta, pero parece bastante hacky, y todavía no me lleva allí.
Peter

Respuestas:


2

Uno de los pensamientos que tenía era 1) ejecutar la rutina driving_distance y 2) usar la rutina "points_as_polygon" de pgRouting (que llama a la función alphashape) para generar el (los) polígono (s) más pequeño (s) a distancias de costo determinadas basadas en los puntos de la rutina driving_distance devoluciones. Luego, puede seleccionar todas las calles dentro de los polígonos que le darían una idea general de viaje.

Si no ha seguido la discusión en la lista de usuarios de pgRouting , últimamente han estado discutiendo más opciones (hilos de mayo y junio de 2011).


1
Interesantes discusiones de la lista de usuarios. Lástima que la función driving_distance tenga errores.
oscuro

1

Dado que este es realmente un problema de gráficos, lo que necesita es la información de conectividad / topología + costo. Para pg_routing, esa es la tabla que envía a los algoritmos de ruta más corta. Este artículo tiene información sobre cómo construir uno (supongo que ya tiene uno). Lo siento, no puedo darle la función exacta en pg_routing que hace esto, pero escribir uno debería ser factible. Sin embargo, puedo decirte que si sigues llamando a shortest_path una y otra vez, estás haciendo el algoritmo a continuación una y otra vez y destruyendo el resultado, no es eficiente en absoluto.

Luego, su solución se convierte en caminar por cada borde mientras los agrega a una "lista caminada" y calcula un costo hasta que su presupuesto (es decir, la distancia) se sobregire. Si el presupuesto es aceptable (es decir, el presupuesto no se ha sobregirado), también agrega la geometría a una "bolsa de geometría de lista aceptable". Solo tiene que procesar cada borde exactamente una vez. Para el último borde (donde sus presupuestos están sobregirados), necesita obtener la longitud e interpolar la distancia exacta que desea viajar , luego agregar el resultado a la "lista aceptable". Su resultado es una unión de esa bolsa de geometría.


1
Hay una sutileza en el último paso: se pueden alcanzar algunos bordes desde cualquiera de sus puntos finales. Esto puede hacer que se incluyan porciones de ambos extremos o incluso todo el borde, aunque atravesar todo el borde desde cualquiera de los puntos finales excedería el límite presupuestario. Por ejemplo, considere viajar desde el punto a a lo largo de un gráfico no dirigido con bordes de longitud de unidad {(a, b), (a, c), (b, c)} y un presupuesto de 1.6. Puede alcanzar b o c a un costo de 1, con 0.6 para gastar. Esto hace que cada punto a lo largo del borde (b, c) sea accesible.
whuber

Tienes razón :) +1
Ragi Yaser Burhum

1

"A partir del punto X, ¿hasta dónde podría caminar en cualquier dirección, dado un presupuesto total de viaje de 1 km, siguiendo la red de carreteras?"

Como solo tiene que considerar una región pequeña (radio de 1 km como máximo), probablemente podría evitar dividir los enlaces en varias piezas pequeñas (dependiendo de la precisión que desee lograr) y crear los nodos necesarios. Las redes de "alta resolución" resultantes aún deben ser manejables.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.