pgr_withPointsDD - 拟议

pgr_withPointsDD - 返回从起点开始的行驶 距离

Warning

下一版本的拟议功能。

  • 它们并未正式出现在当前版本中。

  • 它们可能会正式成为下一个版本的一部分:

    • 这些函数使用 ANY-INTEGER 和 ANY-NUMERICAL

    • 名字可能不会改变。(但仍然有可能改变)

    • 签名可能不会改变。(但仍然有可能改变)

    • 功能可能不会改变。(但仍然有可能改变)

    • pgTap 测试已经完成。 但可能需要更多。

    • 文档可能需要完善。

_images/boost-inside.jpeg

Boost 图内部

可用性

版本3.6.0

  • 签名更改: driving_side 参数从已命名的可选参数改为未命名的必选参数 driving side

    • pgr_withPointsDD单顶点

    • pgr_withPointsDD (多个顶点)

  • 将输出列标准化为 (seq, depth, start_vid, pred, node, edge, cost, agg_cost)

    • pgr_withPointsDD单顶点

      • 添加了 depthpredstart_vid 列。

    • pgr_withPointsDD (多个顶点)

      • 添加了 depthpred 列。

  • When details is false:

    • 只有那些被访问的兴趣点会被移除,也就是说,位于一定距离范围内被到达的兴趣点会被包含在内

  • 弃用签名

    • pgr_withpointsdd(text,text,bigint,double precision,boolean,character,boolean)

    • pgr_withpointsdd(text,text,anyarray,double precision,boolean,character,boolean,boolean)

版本 2.2.0

  • 拟议 函数

描述

修改图以包含点,并使用 Dijkstra 算法,提取成本小于或等于距起点 **距离** 值的所有节点和点。 提取的边将符合相应的生成树。

签名

pgr_withPointsDD(Edges SQL, Points SQL, root vid, distance, driving side, [options A])
pgr_withPointsDD(Edges SQL, Points SQL, root vids, distance, driving side, [options B])
options A: [directed, details]
options B: [directed, details, equicost]
Returns set of (seq, depth, start_vid, pred, node, edge, cost, agg_cost)
OR EMPTY SET

单顶点

pgr_withPointsDD(Edges SQL, Points SQL, root vid, distance, driving side, [options])
options: [directed, details]
Returns set of (seq, depth, start_vid, pred, node, edge, cost, agg_cost)
OR EMPTY SET
示例:

右侧驾驶拓扑,从点 \(1\) 开始,距离不超过 \(3.3\),并提供详细信息。

SELECT * FROM pgr_withPointsDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  'SELECT pid, edge_id, fraction, side from pointsOfInterest',
  -1, 3.3, 'r',
  details => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
   2 |     1 |        -1 |   -1 |    5 |    1 |  0.4 |      0.4
   3 |     2 |        -1 |    5 |    6 |    1 |    1 |      1.4
   4 |     3 |        -1 |    6 |   -6 |    4 |  0.7 |      2.1
   5 |     4 |        -1 |   -6 |    7 |    4 |  0.3 |      2.4
(5 rows)

多个顶点

pgr_withPointsDD(Edges SQL, Points SQL, root vids, distance, driving side, [options])
options: [directed, details, equicost]
Returns set of (seq, depth, start_vid, pred, node, edge, cost, agg_cost)
OR EMPTY SET
示例:

从点 \(1\) 和顶点 \(16\) 出发,在有向图上以 equicost 模式,在距离不超过 \(3.3\) 的范围内

SELECT * FROM pgr_withPointsDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  'SELECT pid, edge_id, fraction, side from pointsOfInterest',
  ARRAY[-1, 16], 3.3, 'l',
  equicost => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
   2 |     1 |        -1 |   -1 |    6 |    1 |  0.6 |      0.6
   3 |     2 |        -1 |    6 |    7 |    4 |    1 |      1.6
   4 |     2 |        -1 |    6 |    5 |    1 |    1 |      1.6
   5 |     3 |        -1 |    7 |    3 |    7 |    1 |      2.6
   6 |     3 |        -1 |    7 |    8 |   10 |    1 |      2.6
   7 |     4 |        -1 |    8 |   -3 |   12 |  0.6 |      3.2
   8 |     4 |        -1 |    3 |   -4 |    6 |  0.7 |      3.3
   9 |     0 |        16 |   16 |   16 |   -1 |    0 |        0
  10 |     1 |        16 |   16 |   11 |    9 |    1 |        1
  11 |     1 |        16 |   16 |   15 |   16 |    1 |        1
  12 |     1 |        16 |   16 |   17 |   15 |    1 |        1
  13 |     2 |        16 |   15 |   10 |    3 |    1 |        2
  14 |     2 |        16 |   11 |   12 |   11 |    1 |        2
(14 rows)

参数

类型

描述

Edges SQL

TEXT

Edges SQL 如下所述

Points SQL

TEXT

Points SQL 如下所述

Root vid

BIGINT

树的根顶点的标识符。

  • 负值代表一个点

Root vids

ARRAY [ANY-INTEGER]

根顶点的标识符数组。

  • 负值代表一个点

  • \(0\) 值被忽略

  • 出于优化目的,任何重复的值都将被忽略。

distance

FLOAT

结果中包含节点的上限。

driving side

CHAR

  • 值在 [r, R, l, L, b, B] 中表示驾驶的一侧是:

    • r, R 表示右侧驾驶,

    • l, L 表示左侧驾驶。

    • b, B 表示两侧通行(不限制驾驶方向)。

  • 有效值因有向图和无向图而异:

    • 有向图中:[r, R, l, L]。

    • 无向图中:[b, B]。

其中:

ANY-INTEGER:

SMALLINT, INTEGER, BIGINT

可选参数

类型

默认

描述

directed

BOOLEAN

true

  • true 时,该图被视为有 有向

  • 如果为 false ,则该图被视为 无向

带点可选参数

参数

类型

默认

描述

details

BOOLEAN

false

  • 如果为 true ,结果将包括路径中的点。

  • 如果为 false ,结果将不包括路径中的点。

行驶距离可选参数

类型

默认

描述

equicost

BOOLEAN

true

  • true``时,节点只会出现在最近的 ``start_vid 列表中。绑定制动是任意的。

  • false 时,类似于使用单顶点签名的多次调用。

内部查询

Edges SQL

类型

默认

描述

id

ANY-INTEGER

边的标识符。

source

ANY-INTEGER

边的第一个端点顶点的标识符。

target

ANY-INTEGER

边的第二个端点顶点的标识符。

cost

ANY-NUMERICAL

边(source, target)的权重

reverse_cost

ANY-NUMERICAL

-1

边(target, source)的权重

  • 当为负时:边( target, source )不存在,因此它不是图的一部分。

其中:

ANY-INTEGER:

SMALLINT, INTEGER, BIGINT

ANY-NUMERICAL:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Points SQL

参数

类型

默认

描述

pid

ANY-INTEGER

value

点的标识符。

  • 使用正值,因为内部将转换为负值

  • 如果列存在,则它不能为 NULL。

  • 如果列不存在,将自动给出连续的负

edge_id

ANY-INTEGER

距离该点“最近”的边的标识符。

fraction

ANY-NUMERICAL

<0,1> 中的值指示距边缘第一个端点的相对位置。

side

CHAR

b

[b, r, l, NULL] 中的值指示该点是否为:

  • r 在右边,

  • l 在左边,

  • b, NULL 在两边

其中:

ANY-INTEGER:

SMALLINT, INTEGER, BIGINT

ANY-NUMERICAL:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

结果列

Returns set of (seq, depth, start_vid, pred, node, edge, cost, agg_cost)

参数

类型

描述

seq

BIGINT

\(1\) 开始的顺序值。

depth

BIGINT

node 的深度。

  • \(0\)node = start_vid

  • \(depth-1\) is the depth of pred

start_vid

BIGINT

根顶点的标识符。

pred

BIGINT

node 的前驱。

  • node 等于 start_vid 时,它的值就是 node

node

BIGINT

使用 edge 到达的``node`` 的标识符。

edge

BIGINT

pred 到达``node``所使用的 edge 的标识符。

  • \(-1\)node = start_vid

cost

FLOAT

遍历 edge 的成本。

agg_cost

FLOAT

start_vidnode 的总成本。

其他示例

Points SQL 中使用 pgr_findCloseEdges

求图上点 (2.9, 1.8) 距离最近的两个位置的行驶距离。

SELECT * FROM pgr_withPointsDD(
  $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[-1, -2], 2.3, 'r',
  details => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -2 |   -2 |   -2 |   -1 |    0 |        0
   2 |     1 |        -2 |   -2 |   11 |    8 |  0.1 |      0.1
   3 |     2 |        -2 |   11 |   16 |    9 |    1 |      1.1
   4 |     2 |        -2 |   11 |   12 |   11 |    1 |      1.1
   5 |     2 |        -2 |   11 |    7 |    8 |    1 |      1.1
   6 |     3 |        -2 |   12 |   17 |   13 |    1 |      2.1
   7 |     3 |        -2 |   16 |   15 |   16 |    1 |      2.1
   8 |     3 |        -2 |    7 |    8 |   10 |    1 |      2.1
   9 |     3 |        -2 |    7 |    6 |    4 |    1 |      2.1
  10 |     3 |        -2 |    7 |    3 |    7 |    1 |      2.1
  11 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
  12 |     1 |        -1 |   -1 |   11 |    5 |  0.2 |      0.2
  13 |     2 |        -1 |   11 |    7 |    8 |    1 |      1.2
  14 |     2 |        -1 |   11 |   16 |    9 |    1 |      1.2
  15 |     2 |        -1 |   11 |   12 |   11 |    1 |      1.2
  16 |     3 |        -1 |    7 |   -2 |    8 |  0.9 |      2.1
  17 |     3 |        -1 |    7 |    3 |    7 |    1 |      2.2
  18 |     3 |        -1 |    7 |    6 |    4 |    1 |      2.2
  19 |     3 |        -1 |    7 |    8 |   10 |    1 |      2.2
  20 |     3 |        -1 |   16 |   15 |   16 |    1 |      2.2
  21 |     3 |        -1 |   12 |   17 |   13 |    1 |      2.2
(21 rows)

  • \(-1\) 对应距离点 \((2.9, 1.8)\) 最近的边。

  • \(-2\) 对应于点 \((2.9, 1.8)\) 的下一条近边。

驾驶侧并不重要

从点 \(1\) 开始,在距离不超过 \(3.3\) 的范围内,无论驾驶方向如何,提供详细信息。

SELECT * FROM pgr_withPointsDD(
  'SELECT id, source, target, cost, reverse_cost FROM edges ORDER BY id',
  'SELECT pid, edge_id, fraction, side from pointsOfInterest',
  -1, 3.3, 'b',
  directed => false,
  details => true);
 seq | depth | start_vid | pred | node | edge | cost | agg_cost
-----+-------+-----------+------+------+------+------+----------
   1 |     0 |        -1 |   -1 |   -1 |   -1 |    0 |        0
   2 |     1 |        -1 |   -1 |    5 |    1 |  0.4 |      0.4
   3 |     1 |        -1 |   -1 |    6 |    1 |  0.6 |      0.6
   4 |     2 |        -1 |    6 |   -6 |    4 |  0.7 |      1.3
   5 |     2 |        -1 |    6 |   10 |    2 |    1 |      1.6
   6 |     3 |        -1 |   -6 |    7 |    4 |  0.3 |      1.6
   7 |     3 |        -1 |   10 |   -5 |    5 |  0.8 |      2.4
   8 |     3 |        -1 |   10 |   15 |    3 |    1 |      2.6
   9 |     4 |        -1 |    7 |    3 |    7 |    1 |      2.6
  10 |     4 |        -1 |    7 |    8 |   10 |    1 |      2.6
  11 |     4 |        -1 |    7 |   11 |    8 |    1 |      2.6
  12 |     5 |        -1 |    8 |   -3 |   12 |  0.6 |      3.2
  13 |     5 |        -1 |    3 |   -4 |    6 |  0.7 |      3.3
(13 rows)

另请参阅

索引和表格