Mam zestaw skryptów Postgis, który generuje dwie tabele - jedną z zestawu punktów, a drugą zestaw otaczających je dróg. Wszystkie dane są w tej samej projekcji i oba wyjścia są przechowywane w tabelach postgres 9.2 z postgis 2.1
Utworzono topologię sieci drogowej, a tabela punktów zawiera kolumnę zawierającą najbliższy odcinek drogi.
Chciałbym wtedy wygenerować podzbiór sieci drogowej, który reprezentuje najmniejszą sieć, która łączy wszystkie punkty za pomocą czegoś w rodzaju drzewa rozpinającego minimum. Sieć dróg nie jest kierowana, a koszty to po prostu długość trasy.
Mogę to zrobić w QGIS / Grass przy użyciu rodziny modułów v.net, ale idealnie chciałbym również zachować ten ostatni krok w SQL.
Spojrzałem na nową funkcję postspis apspWarshall, ale nie wiem, jak można ją zachęcić do skupienia energii na łączeniu punktów, a nie całej sieci.
Jest to krótki skrypt, który przygotowałem, próbując stworzyć platformę, aby rozwiązać ten problem, ale nie widzę, gdzie można skupić funkcję na początku z podzbiorem krawędzi.
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
W przypadku problemów z najkrótszą ścieżką dla pojedynczej ścieżki funkcja prosi o początek i koniec, ale najwyraźniej nie we wszystkich punktach Podobnie w Grass v.net.spanningtree i v.net.steiner oczekują zestawu punktów i linii jako połączonej sieci do pracy.
Czy ktoś ma jakieś sugestie, jak to zrobić w PostGIS?