pgr_withPointsCostMatrix
- 拟议¶
pgr_withPointsCostMatrix
- 使用 pgr_withPoints -拟议 计算成本矩阵.
Warning
下一版本的拟议功能。
它们并未正式出现在当前版本中。
它们可能会正式成为下一个版本的一部分:
这些函数使用 ANY-INTEGER 和 ANY-NUMERICAL
名字可能不会改变。(但仍然有可能改变)
签名可能不会改变。(但仍然有可能改变)
功能可能不会改变。(但仍然有可能改变)
pgTap 测试已经完成。 但可能需要更多。
文档可能需要完善。
可用性
版本 2.2.0
新 拟议 函数
描述¶
使用 Dijkstra 算法,计算并返回成本矩阵。
Dijkstra算法,由荷兰计算机科学家Edsger Dijkstra于1956年提出。它是一种图搜索算法,解决具有非负边路径成本的图的最短路径问题,产生从起始顶点到结束顶点的最短路径。 该实现可以与有向图和无向图一起使用。
主要特点是:
可用作 pgr_TSP 的输入。
当得到的矩阵是对称且没有 \(\infty\) 值时直接使用。
用户有责任使矩阵对称。
通过使用非对称值的几何平均或调和平均。
通过使用 max 或 min 非对称值。
通过将上三角形设置为下三角形的镜像。
通过将下三角形设置为上三角形的镜像。
确定 \(\infty\) 值也是用户的责任。
每个函数都是其所属家族的一部分。
它不返回路径。
返回图中节点对组合的最短路径的成本总和。
仅在具有正成本的边进行处理。
当存在路径时返回值。
当起始顶点和结束顶点相同时,就没有路径。
未包含值 (v, v) 中的总成本为 0。
当起始顶点和结束顶点不同且不存在路径时。
未包含值 (u, v) 中的总成本为 \(\infty\) 。
假设返回的值存储在表中:
唯一索引将是一对:
(start_vid, end_vid)
。
根据函数及其参数,结果可能是对称的。
(u, v) 的总成本与 (v, u) 相同。
start vids 中的任何重复值都会被忽略。
返回值是有序的:
start_vid
升序end_vid
升序
签名¶
总结
[directed, driving_side]
(start_vid, end_vid, agg_cost)
的集合Note
与 withPoints 函数系列的其他成员不同,没有 详细信息 标志。
- 示例:
无向 图上的点 \(\{1, 6\}\) 和顶点 \(\{10, 11\}\) 的成本矩阵
返回 对称 成本矩阵
在 points_sql 查询上使用默认
side
值使用默认
driving_side
值
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 10, 11, -6], directed := false);
start_vid | end_vid | agg_cost
-----------+---------+----------
-6 | -1 | 1.3
-6 | 10 | 1.7
-6 | 11 | 1.3
-1 | -6 | 1.3
-1 | 10 | 1.6
-1 | 11 | 2.6
10 | -6 | 1.7
10 | -1 | 1.6
10 | 11 | 1
11 | -6 | 1.3
11 | -1 | 2.6
11 | 10 | 1
(12 rows)
参数¶
列 |
类型 |
描述 |
---|---|---|
|
Edges SQL 如下所述 |
|
|
Points SQL 如下所述 |
|
start vids |
|
起始顶点的标识符数组。 |
可选参数¶
列 |
类型 |
默认 |
描述 |
---|---|---|---|
|
|
|
|
带点可选参数¶
参数 |
类型 |
默认 |
描述 |
---|---|---|---|
|
|
|
[
|
内部查询¶
Edges SQL¶
列 |
类型 |
默认 |
描述 |
---|---|---|---|
|
ANY-INTEGER |
边的标识符。 |
|
|
ANY-INTEGER |
边的第一个端点顶点的标识符。 |
|
|
ANY-INTEGER |
边的第二个端点顶点的标识符。 |
|
|
ANY-NUMERICAL |
边( |
|
|
ANY-NUMERICAL |
-1 |
边(
|
其中:
- ANY-INTEGER:
SMALLINT
,INTEGER
,BIGINT
- ANY-NUMERICAL:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
Points SQL¶
参数 |
类型 |
默认 |
描述 |
---|---|---|---|
|
ANY-INTEGER |
value |
点的标识符。
|
|
ANY-INTEGER |
距离该点“最近”的边的标识符。 |
|
|
ANY-NUMERICAL |
<0,1> 中的值指示距边缘第一个端点的相对位置。 |
|
|
|
|
[
|
其中:
- ANY-INTEGER:
SMALLINT
,INTEGER
,BIGINT
- ANY-NUMERICAL:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
结果列¶
(start_vid, end_vid, agg_cost)
的集合
列 |
类型 |
描述 |
---|---|---|
|
|
起始顶点的标识符。 |
|
|
结束顶点的标识符。 |
|
|
从 |
Note
当 start_vid 或 end_vid 列具有负值时,标识符用于点。
其他示例¶
在 Points SQL 中使用 pgr_findCloseEdges。¶
求从顶点 \(1\) 到图上点 (2.9, 1.8) 的两个最近位置的路线的矩阵成本。
SELECT * FROM pgr_withPointsCostMatrix(
$e$ SELECT * FROM edges $e$,
$p$ SELECT edge_id, round(fraction::numeric, 2) AS fraction, side
FROM pgr_findCloseEdges(
$$SELECT id, geom FROM edges$$,
(SELECT ST_POINT(2.9, 1.8)),
0.5, cap => 2)
$p$,
ARRAY[5, 10, -1, -2]);
start_vid | end_vid | agg_cost
-----------+---------+----------
-2 | -1 | 3.9
-2 | 5 | 2.9
-2 | 10 | 3.1
-1 | -2 | 0.3
-1 | 5 | 3.2
-1 | 10 | 3.2
5 | -2 | 2.9
5 | -1 | 6.8
5 | 10 | 6
10 | -2 | 1.1
10 | -1 | 0.8
10 | 5 | 2
(12 rows)
点 \(-1`对应于距离点`(2.9, 1.8)\) 最近的边。
点 \(-2`对应于点`(2.9, 1.8)\) 的下一个闭合边。
与 pgr_TSP 一起使用。¶
SELECT * FROM pgr_TSP(
$$
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 10, 11, -6], directed := false);
$$
);
seq | node | cost | agg_cost
-----+------+------+----------
1 | -6 | 0 | 0
2 | -1 | 1.3 | 1.3
3 | 10 | 1.6 | 2.9
4 | 11 | 1 | 3.9
5 | -6 | 1.3 | 5.2
(5 rows)
另请参阅¶
索引和表格