Tengo un conjunto de scripts postgis que genera dos tablas: una de un conjunto de puntos y la segunda un conjunto de carreteras que los rodean. Todos los datos están en la misma proyección y ambas salidas se almacenan en tablas postgres 9.2 con postgis 2.1
Se ha creado la topología de la red de carreteras y la tabla de puntos tiene una columna que contiene el segmento de carretera más cercano.
Entonces me gustaría generar un subconjunto de la red de carreteras que represente la red más pequeña que conecta todos los puntos usando algo así como un árbol de expansión mínima. La red de carreteras no está dirigida y los costos son simplemente la longitud de la ruta.
Puedo hacer esto en QGIS / Grass usando la familia de módulos v.net, pero idealmente me gustaría mantener este paso final en SQL también.
He visto la nueva función postgis apspWarshall, pero no sé cómo se puede alentar a centrar su energía en conectar los puntos y no en toda la red.
Este es el script corto que he creado en un intento de crear un marco para resolver esto, pero no puedo ver dónde es posible enfocar la función para comenzar con un subconjunto de los bordes.
SELECT seq, id1 AS node, id2 AS edge, cost, the_geom
FROM pgr_apspWarshall('SELECT gid AS id,
source,
target,
st_length(the_geom) AS cost
FROM road_network
',
false, false
) AS tree
JOIN road_network As roads
ON tree.id2 = roads.gid
En los problemas de ruta más corta de ruta única, la función solicita el inicio y el final, pero aparentemente no en los problemas de todos los puntos. Igualmente en Grass, v.net.spanningtree y v.net.steiner esperan un conjunto de puntos y líneas como una red combinada para trabajar.
¿Alguien tiene alguna sugerencia sobre cómo hacer esto en PostGIS?