最短路径分析之两点之间的k条最短路径

前言

在用高德地图导航的时候都会发现,高德会推荐多条线路。我们之前做的dijkstra算法只能实现两点之间的1条最短路径的计算。dijkstra算法需要和yen算法结合,才能实现获取两点之间的k条最短路径。关于后面的数据准备有疑惑的,可以参考上篇博文WebGIS开发之最短路径分析入门

Yen算法

首先利用Dijkstra算法求得从源节点到目的节点的第一条最短路径Q(1)。求接下来K-1条短路径时,采用递推法中的偏离路径算法思想。在求Q(i+1)时,将Q(1)上除了目的节点外的所有节点都视为偏离节点,并计算每个偏离节点到目的节点之间的最短路径,然后将其与Q(1)上的源节点到偏离节点的路径拼接到一起共同构成候选路径,从而求得最短偏离路径。

数据准备

数据准备和WebGIS开发之最短路径分析入门一样就可以,不需要做新的处理

求取k条最短路径(KSP)

PostGIS里调用ksp算法,计算从102号点到30号点的98条最短路线
点位示意图

代码如下:

 SELECT  * FROM pgr_ksp('SELECT id,source,target,
                         length::double precision AS cost
                        FROM unimelb_edges',102, 30, 9,false)				

结果部分如下图:
查询结果

预览结果

利用下面代码可以同时查出点和线,在pgAdmin中进行进行预览

		select shp,id from unimelb_edges where id in (SELECT  edge FROM pgr_ksp('SELECT id,source,target,
                         length::double precision AS cost
                        FROM unimelb_edges',102, 30, 9,false))union select shp,id from unimelb_nodes where id in(102,30)	

查询结果如下图所示
结果预览

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值