prRouting--Dijkstra相关函数

分析结果在QGIS可视化

在这里插入图片描述

常见的网络分析

如何输出几何图形

  1. 一般使用分析函数以pgr_dijkstra,分析出的结果如下是一张表,无法用直观的图形显示:
select * from pgr_dijkstra(
	'select id, source, target, cost from road',
	1,9,false
);

在这里插入图片描述

  1. 通过postgis函数将其转换为图形:

    • 分析这张表可以看出edge表示边的编号,那么只需要将其与带空间geom列的表关联即可得到空间属性
    select * from pgr_dijkstra(
    'select id, source, target, cost from road',
    1,9,false) as res
    join road as pt on res.edge = pt.id;
    

    在这里插入图片描述

    • 如果只需要如何一个几何图形,使用postgisST_Union函数合并几何即可
    select ST_Union(geom) as route from pgr_dijkstra(
    	'select id, source, target, cost from road',
    	1,9,false ) as res
    	join road as pt on res.edge = pt.id;
    

    在这里插入图片描述

分析函数

pgr_dijkstra:基于迪杰斯特拉算法的最短路径分析
  1. 单点到单点
select * from pgr_dijkstra(
	'select id, source, target, cost from road',
	1,9,false
) 
  1. 单点到多点\多点到单点
SELECT * FROM pgr_dijkstra(
    'SELECT id, source, target, cost FROM road',
    1, -- 起点
    ARRAY[8, 9], -- 终点数组
    false -- 图是无向的
);
  1. 多点到多点
SELECT * FROM pgr_dijkstra(
    'SELECT id, source, target, cost FROM road',
    ARRAY[1, 2], -- 起点
    ARRAY[8, 9], -- 终点数组
    false -- 图是无向的
);
  1. 表格组合
    例如有如下表:
sourcetarget
56
510
65
615
614

需要依次找出sourcetarget

SELECT * FROM pgr_dijkstra(
    'SELECT id, source, target, cost, reverse_cost FROM edges',
    'SELECT source, target FROM combinations',
    false
);
pgr_KSP:基于Dijkstra的K条最短路径算法

也和pgr_dijkstra算法一样分为一对一,多对一,多对多,组合

-- 语法
pgr_KSP(Edges SQL, start vid, end vid, K, [options])
-- 实例:得到6到17的2条路径
SELECT * FROM pgr_KSP(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  6, 17, 2);

相关参数

  • 当heap_paths为false时:
    函数返回最多K条路径。这里的K是pgr_KSP函数的第四个参数,表示要查找的最短路径数量。例如,如果K设置为3,那么函数会返回从起点到终点的3条最短路径(如果有这么多路径的话)。
  • 当heap_paths为true时:
    函数会返回在处理过程中计算出的所有路径。具体来说,假设最短路径有N条边,那么堆(heap)中大概会包含超过N * K条路径,尤其是当K的值较小且K大于5时。这是因为pgr_KSP函数在寻找最短路径的过程中,会将一些中间路径存储在堆中,以便后续进一步筛选和计算。当heap_paths为true时,这些中间路径也会被返回,而不仅仅是最终筛选出的K条最短路径。
SELECT * FROM pgr_KSP(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  6, 17, 2,
  directed => false, heap_paths => true
);
pgr_dijkstraCostpgr_dijkstraCostMatrixpgr_drivingDistance计算相关
  1. pgr_dijkstraCost:计算最短路径的花费,也是4种方式
SELECT * FROM pgr_dijkstraCost(
  'SELECT id, source, target, cost FROM road',
  1, ARRAY[6,5]);

在这里插入图片描述

  1. pgr_drivingDistance:指定距离distance能到的点
-- 语法
pgr_drivingDistance(Edges SQL, Root vid, distance, [directed])
pgr_drivingDistance(Edges SQL, Root vids, distance, [options])
-- 实例
SELECT * FROM pgr_drivingDistance(
  'SELECT id, source, target, cost FROM road',
  1, 8000) as res
  JOIN road ON res.edge = road.id;
  1. pgr_dijkstraCostMatrix:计算成本矩阵
    例如:需要计算节点1,2,3,4,11到彼此之间所花费的成本
--语法
pgr_dijkstraCostMatrix(Edges SQL, start vids, [directed])
-- 实例
SELECT * FROM pgr_dijkstraCostMatrix(
  'SELECT id, source, target, cost FROM road',
  array[1,2,3,4],
  false)

在这里插入图片描述

如果存在不可到达的点

11,12不可到达,使用其不会出现任何查询结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值