官方文档
1、安装pgrouting库
参考:pgrouting安装
主要涉及的两个函数:
1、 pgr_createTopology:创建空间拓扑,数据自动保存至新创建的表<edge_table>_vertices_pgr,将空间表的linestr的geometry数据拆分,将拆分后的每个点数据保存到新创建的表中,需要在本地的空间表中新建两个字段,source和target
varchar pgr_createTopology(text edge_table, double precision tolerance,
text the_geom:='the_geom', text id:='id',
text source:='source',text target:='target',
text rows_where:='true', boolean clean:=false)
edge_table:text,表名
tolerance:float8,误差缓冲值,两个点的距离在这个距离内,就算重合为一点。这个距离使用st_length计算
the_geom:text,该表的空间坐标字段
id:text,该表的主键
source:text,空间起点编号
target:text,空间终点编号
rows_where:text,条件选择子集或行。默认值为true,表示源或目标具有空值的所有行,否则将使用条件。
clean:text,每次执行都重建拓扑图,默认false
新表结构:
2、pgr_dijkstra:它是一种图搜索算法,它解决了非负代价边路径图的最短路径问题,即从起始顶点(start_vid)到结束顶点(end_vid)的最短路径。
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]) – Proposed on v3.1
RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
OR EMPTY SET
SELECT * FROM pgr_dijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, 3
);