У меня есть набор сценариев postgis, которые генерируют две таблицы - одну из набора точек и вторую группу дорог, которые их окружают. Все данные находятся в одной проекции, и оба вывода хранятся в таблицах postgres 9.2 с postgis 2.1
Была создана топология pgrouting сети дорог, и в таблице точек есть столбец, содержащий ближайший сегмент дороги.
Затем я хотел бы создать подмножество дорожной сети, которая представляет собой наименьшую сеть, которая соединяет все точки, используя что-то вроде минимального связующего дерева. Дорожная сеть является ненаправленной, а затраты - это просто длина маршрута.
Я могу сделать это в QGIS / Grass, используя семейство модулей v.net, но в идеале я бы хотел сохранить этот последний шаг и в SQL.
Я посмотрел на новую функцию postgis apspWarshall, но не знаю, как можно побудить его сосредоточиться на соединении точек, а не на всей сети.
Это короткий сценарий, который я собрал, пытаясь создать структуру, чтобы решить эту проблему, но я не вижу, где можно сфокусировать функцию, чтобы начать с подмножества ребер.
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
В задачах с кратчайшим путем по одному пути функция запрашивает начало и конец, но, очевидно, не во всех точках. В равной степени в Grass v.net.spanningtree и v.net.steiner ожидают набор точек и линий в качестве объединенной сети для работы.
У кого-нибудь есть предложения как это сделать в PostGIS?