У мене є набір сценаріїв postgis, який генерує дві таблиці - одну з набору точок, а другу набір доріг, які їх оточують. Усі дані в одній проекції і обидва виходи зберігаються в таблицях постгресів 9.2 з постгігами 2.1
Створена топологія дорожньої мережі та таблиця точок містить стовпчик, що містить найближчий відрізок дороги.
Тоді я б хотів створити підмножину дорожньої мережі, яка являє собою найменшу мережу, яка з'єднує всі точки, використовуючи щось на кшталт дерева мінімального прольоту. Дорожня мережа непряма, а витрати - це просто довжина маршруту.
Я можу це зробити в QGIS / Grass, використовуючи сімейство модулів v.net, але в ідеалі я хотів би зберегти цей останній крок і в SQL.
Я переглянув нову функцію постгіс 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?