1 数据库尝试
路径规划的算法 pgr_dijkstra,pgr_astar, pgr_ksp,pgr_withpoints_参考1,pgr_withpoints_参考2
其中pgr_ksp
是dijkstra算法和yen算法结合,获取两点之间的k条最短路径
- pgr_dijkstra 算法
SELECT gid, geom, node, cost, source, target,
ST_Reverse(geom) AS flip_geom FROM
pgr_dijkstra(
'SELECT gid AS id,
source, target,
cost_len as cost, rcost_len as reverse_cost
FROM r1',
3, 7,
directed := FALSE
),r1 WHERE edge = gid ORDER BY seq;
- pgr_ksp
参数解释:3,7,3 分别为source, target, 返回的几条数据
select * from
pgr_ksp('SELECT gid as id, source, target, cost_len AS cost , cost_len AS revers_cost
FROM r1',
3, 7,3,false ),r1
WHERE edge = gid ORDER BY seq
pgr_withpoints (edges_sql, points_sql, start_vid, end_vid)
pgr_withPoints和 pgr_dijkstra一样也是最短路径规划方法,输出结果也基本一致,但是两者的输入不一样。pgr_dijkstra需要输入的是路网节点编号,也就是说只能从道路的端点算起,而pgr_withPoints可以从道路的中间位置选择起点和终点。
- 参数说明:
edges_sql是从路网表选择出需要参与计算的路径的Sql字符串;
points_sql是从POI表(下文会说明)选择出途径点的Sql字符串;
start_vid是起点的节点id,正值为路网节点,负值为POI表数据;
end_vid为终点节点,同样正值为路网节点,负值为POI表数据。
注意在edges_sql中需要指定cost和reverse_cost(去的花费和来的花费),函数通过这两个值的正负情况来获知道路的通过性(单行、双向、不通)
- pgr_astar
select * from
pgr_astar('SELECT gid as id, source::int, target::int, cost_len::float AS cost,
x1,y1,x2,y2 FROM r1',
array[2,3], array[7,26] ,false),r1
WHERE edge = gid ORDER BY seq
- pgr_bdastar
SELECT gid, geom, node, cost, source, target,
ST_Reverse(geom) AS flip_geom FROM
pgr_bdAstar('SELECT gid as id, source, target,
cost_len AS cost,x1,y1,x2,y2
FROM r1',
2, 7 ,false),r1
WHERE edge = gid ORDER BY seq