Ich habe eine Reihe von Postgis-Skripten, die zwei Tabellen erzeugen - eine aus einer Reihe von Punkten und die zweite aus einer Reihe von Straßen, die sie umgeben. Alle Daten befinden sich in der gleichen Projektion und beide Ausgaben werden mit postgis 2.1 in postgres 9.2-Tabellen gespeichert
Die Verfugungstopologie des Straßennetzes wurde erstellt und die Punktetabelle enthält eine Spalte mit dem nächstgelegenen Straßensegment.
Ich möchte dann eine Teilmenge des Straßennetzes generieren, die das kleinste Netzwerk darstellt, das alle Punkte mit einem Minimum Spanning Tree verbindet. Das Straßennetz ist ungerichtet und die Kosten sind einfach die Streckenlänge.
Ich kann dies in QGIS / Grass mit der v.net-Familie von Modulen tun, aber im Idealfall möchte ich diesen letzten Schritt auch in SQL beibehalten.
Ich habe mir die neue apspWarshall-Postgis-Funktion angeschaut, bin aber ratlos darüber, wie sie dazu angeregt werden kann, ihre Energie auf das Verbinden der Punkte und nicht auf das gesamte Netzwerk zu konzentrieren.
Dies ist das kurze Skript, das ich zusammengestellt habe, um ein Framework zur Lösung dieses Problems zu erstellen, aber ich kann nicht erkennen, wo es möglich ist, die Funktion zu fokussieren, um mit einer Teilmenge der Kanten zu beginnen.
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
Bei Problemen mit einem einzelnen Pfad und kürzesten Pfaden fragt die Funktion nach dem Anfang und dem Ende, aber anscheinend nicht bei allen Punktproblemen. Ebenso erwarten der v.net.spanningtree und der v.net.steiner in Grass eine Reihe von Punkten und Linien als ein kombiniertes Netzwerk, mit dem gearbeitet werden kann.
Hat jemand einen Vorschlag, wie das in PostGIS geht?