一 路径分析—QGIS+PostgreSQL+PostGIS+pgRouting( 二 )

四、路径分析pgRouting 提供的最佳路径算法比较多,具体可以参考:pgRouting 最短路径算法查询
这里用 Shortest Path Dijkstra(狄克斯特拉)算法进行计算 。
最新的 pgr_dijkstra 算法,支持多种方式,一对一、一对多、多对一、多对多等 。
用例:
pgr_dijkstra(Edges SQL, start vid, end vid , [directed])pgr_dijkstra(Edges SQL, start vid, end vids , [directed])pgr_dijkstra(Edges SQL, start vids, end vid , [directed])pgr_dijkstra(Edges SQL, start vids, end vids , [directed])pgr_dijkstra(Edges SQL, Combinations SQL , [directed])RETURNS SET OF (seq, path_seq, [start_vid], [end_vid], node, edge, cost, agg_cost)OR EMPTY SET传入的参数:
1、Edges SQL
a、id,创建拓扑的标识,名称不同用 as
b、source,边起点标识符,拓扑后添加的字段
c、target,边终点标识符,拓扑后添加的字段
d、cost,边权重(长度)
e、reverse_cost,回程权重
2、start vid:路径起始点标识
3、end vid:路径终点标识
4、directed:ture 时,图被认为是有向的
返回参数:
1、seq:查询结果排序值
2、path_seq:一个路径下的排序值,新的路径重新从1开始
3、start_vid:多对一、多对,有这个字段,路径的起始点标识
4、end_vid:一对多、多对多,有这个字段,路径的终点标识
5、node:路径中个个边连接点的标识(上一个边的 end,下一个边的 start)
6、edge:路径中边的标识
7、cost:当前边的成本(长度)
8、reverse_cost:总成本(总长度)
根据上面的具体使用:
-- 最短路径分析-- 直接使用,返回的是算法默认数据SELECT * frompublic.pgr_dijkstra('SELECTid,source::integer,target::integer,length::double precision AS cost,reverse_costFROM roads',1,20,false);-- edge 是创建拓扑时的 id 标识字段,所以可以通过这个在 roads 中筛选,并通过数据库自带的可视化查看结果SELECT * from roads where "id" in(SELECT edge frompublic.pgr_dijkstra('SELECTid,source::integer,target::integer,length::double precision AS cost,reverse_costFROM roads',1,20,false));第二个SQL效果如下:

一 路径分析—QGIS+PostgreSQL+PostGIS+pgRouting

文章插图

经验总结扩展阅读