withPoints - 函数族¶
当点也作为输入给出时:
Warning
下一版本的拟议功能。
它们并未正式出现在当前版本中。
它们可能会正式成为下一个版本的一部分:
这些函数使用 ANY-INTEGER 和 ANY-NUMERICAL
名字可能不会改变。(但仍然有可能改变)
签名可能不会改变。(但仍然有可能改变)
功能可能不会改变。(但仍然有可能改变)
pgTap 测试已经完成。 但可能需要更多。
文档可能需要完善。
pgr_withPoints -拟议 - 从/到图表上任意点的路线。
pgr_withPointsCost -拟议 - 最短路径的成本。
pgr_withPointsCostMatrix - 拟议 - 最短路径的成本。
pgr_withPointsKSP -拟议 -K 最短路径。
pgr_withPointsDD - 拟议 -行驶距离。
pgr_withPointsVia - 拟议 - 通过路由
介绍¶
这一系列函数属于 withPoints - 类别,组成它们的函数以某种方式基于 dijkstra 算法。
取决于名称:
pgr_withPoints 是 带有点 的 pgr_dijkstra
pgr_withPointsCost 是 带有点 的 pgr_dijkstraCost
pgr_withPointsCostMatrix 是 带有点 的 pgr_dijkstraCostMatrix
pgr_withPointsKSP 是 带有点 的 pgr_ksp
pgr_withPointsDD 是 带有点 的 pgr_drivenDistance
pgr_withPointsvia is pgr_dijkstraVia with points
参数¶
列 |
类型 |
描述 |
---|---|---|
|
Edges SQL 如下所述 |
|
|
Points SQL 如下所述 |
|
|
Combinations SQL 如下所述 |
|
start vid |
|
路径起始顶点的标识符。 负值用于点的标识符。 |
start vids |
|
起始顶点的标识符数组。 负值用于点的标识符。 |
end vid |
|
路径结束顶点的标识符。 负值用于点的标识符。 |
end 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
分量 SQL¶
参数 |
类型 |
描述 |
---|---|---|
|
ANY-INTEGER |
出发顶点的标识符。 |
|
ANY-INTEGER |
到达顶点的标识符。 |
其中:
- ANY-INTEGER:
SMALLINT
,INTEGER
,BIGINT
高级文档¶
关于积分¶
对于本节,将使用以下城市(参见 示例数据)一些有趣的点(例如餐馆、超市、邮局等)作为示例。
图是 有向 的
红色箭头显示边表上的边
(source, target)
蓝色箭头显示边表上的边
(target, source)
每个点位置显示它与边
(source, target)
的关系在右侧为第 2 点和第 4 点。
左侧为第 1、3 和 5 点。
在两侧为第 6 点。
数据库上的表示遵循 Points SQL 描述,对于本示例:
SELECT pid, edge_id, fraction, side FROM pointsOfInterest;
pid | edge_id | fraction | side
-----+---------+----------+------
1 | 1 | 0.4 | l
2 | 15 | 0.4 | r
3 | 12 | 0.6 | l
4 | 6 | 0.3 | r
5 | 5 | 0.8 | l
6 | 4 | 0.7 | b
(6 rows)
驾驶侧¶
在下面的图片中:
平方顶点是临时顶点,
根据驾驶侧添加临时顶点,
直观地显示不同驾驶侧数据解释方式的差异。
右驾驶侧¶
点 1 位于边
(6, 5)
点 2 位于边缘
(16, 17)
点 3 位于边缘
(8, 12)
点 4 位于边
(1, 3)
点 5 位于边缘
(10, 11)
点 6 位于边
(6, 7)
和(7, 6)
左驾驶侧¶
点 1 位于边
(5, 6)
点 2 位于边
(17, 16)
点 3 位于边缘
(8, 12)
点 4 位于边
(3, 1)
点 5 位于边缘
(10, 11)
点 6 位于边
(6, 7)
和(7, 6)
驾驶侧并不重要¶
就像双方都要考虑所有点
b
无向 图上的首选用法
在 TRSP - 函数族 上,此选项无效
点 1 位于边
(5, 6)
和(6, 5)
点 2 位于边
(17, 16)
和16, 17
点 3 位于边缘
(8, 12)
点 4 位于边
(3, 1)
和(1, 3)
点 5 位于边缘
(10, 11)
点 6 位于边
(6, 7)
和(7, 6)
创建临时顶点¶
本节将演示如何在图内部创建临时顶点。
问题
对于边:
SELECT id, source, target, cost, reverse_cost
FROM edges WHERE id = 15;
id | source | target | cost | reverse_cost
----+--------+--------+------+--------------
15 | 16 | 17 | 1 | 1
(1 row)
插入点:
SELECT pid, edge_id, fraction, side
FROM pointsOfInterest WHERE pid = 2;
pid | edge_id | fraction | side
-----+---------+----------+------
2 | 15 | 0.4 | r
(1 row)
在右侧行驶网络¶
右驾驶侧
只能通过顶点 16 才能到达点
-2
。不影响边
(17, 16)
,因此边被保留。它只影响边
(16, 17)
,因此边被移除。创建两条新边:
边
(16, -2)
的成本为``0.4`` (原始成本*分数 == \(1 * 0.4\))边
(-2, 17)
的成本为``0.6`` (剩余成本)
附加边的总成本等于原始成本。
如果同一条边上有更多点,则递归地重复该过程。
在左侧驾驶网络上¶
左驾驶侧
只能通过顶点 17 才能到达点
-2
。不影响边
(16, 17)
,因此保留边。它只影响边
(17, 16)
,因此边被移除。创建两条新边:
使用原始边
(16, 17)
,因为分数是原始边的分数:边
(16, -2)
的成本为``0.4`` (原始成本*分数 == \(1 * 0.4\))边
(-2, 17)
的成本为``0.6`` (剩余成本)如果同一条边上有更多点,则递归地重复该过程。
翻转边并将它们添加到图中:
边
(17, -2)
变为(-2, 16)
,成本为``0.4`` ,并添加到图中。边
(-2, 16)
变为(17, -2)
,成本为0.6
,并添加到图中。
附加边的总成本等于原始成本。
当驾驶侧无关紧要时¶
可以通过顶点 16 或 17 到达点
-2
。影响边
(16, 17)
和(17, 16)
,因此边被移除。创建四个新边:
使用原始边
(16, 17)
,因为分数是原始边的分数:边
(16, -2)
的成本为``0.4`` (原始成本*分数 == \(1 * 0.4\))边
(-2, 17)
的成本为``0.6`` (剩余成本)如果同一条边上有更多点,则递归地重复该过程。
翻转边并将所有边添加到图中:
边
(16, -2)
被添加到图中。边
(-2, 17)
被添加到图中。边
(16, -2)
变为(-2, 16)
,成本为 0.4,并添加到图中。边
(-2, 17)
变为``(17, -2)``,成本为0.6
,并添加到图中。
另请参阅¶
索引和表格