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.
Respuestas:
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).
fuente
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.
fuente
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.
fuente