我有一组postgis脚本,它们生成两个表-一个是一组点,第二个是围绕它们的道路。所有数据都在同一投影中,并且两个输出都存储在带有postgis 2.1的postgres 9.2表中
道路网的注浆拓扑已创建,点表中的列包含最近的路段。
然后,我想生成道路网的一个子集,该子集代表使用最小生成树之类的东西连接所有点的最小网络。道路网络是无方向性的,成本只是路线长度。
我可以使用v.net系列模块在QGIS / Grass中执行此操作,但理想情况下,我也希望在SQL中保留最后一步。
我已经看过新的apspWarshall postgis函数,但是对于如何鼓励它将精力集中在连接点而不是整个网络上,我感到困惑。
这是我编写的简短脚本,试图创建一个框架来解决此问题,但我看不到在哪里可能集中功能从边缘的子集开始。
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
在单路径最短路径问题中,该功能要求起点和终点,但显然不是在所有问题上都要求。同样在草丛中,v.net.spanningtree和v.net.steiner期望将一组点和线作为组合网络使用。
有没有人对如何在PostGIS中做到这一点提出建议?