pgr_analyzeOneWay¶
pgr_analyzeOneWay
— 分析单向街道并识别翻转路段。
该函数分析图中的单向街道并识别任何翻转的路段。
可用性
版本2.0.0
官方 函数
描述¶
单向路段的分析非常简单,但可以成为一种强大的工具,可以识别由于错误地设置路段方向而产生的一些潜在问题。 如果一个节点有从该节点出口的边并且没有边进入该节点,则该节点是`source` 。 相反,如果所有边都进入该节点但没有一条边退出该节点,则该节点是`sink`。 对于`source` 类型节点来说,逻辑上不可能存在,因为如果没有车辆进入该节点,则任何车辆都无法离开该节点。 同样,如果您有一个`sink`节点,那么您将在该节点上堆积无限数量的车辆,因为您可以进入它但不能离开它。
那么我们为什么要关心这些是否不可行呢? 如果边的方向被错误地反转,我们就可以准确地生成这些条件。 想象一下一条分开的高速公路,在北行车道上,有一个路段输入错误,或者可能是一系列多个路段输入错误,或者这可能发生在环岛上。 结果可能是 source 节点和/或`sink`节点。
因此,通过计算进入和退出每个节点的边数,我们可以识别 source 节点和 sink 节点,以便您可以查看网络的这些区域以进行修复和/或将问题报告给数据供应商。
先决条件
待分析的边表必须包含源列和目标列,其中填充了线段顶点的id以及对应的存储顶点信息的顶点表<edge_table>_vertices_pgr。
使用 pgr_createVerticesTable 建立顶点表。
使用 pgr_createTopology 建立拓扑和顶点表。
签名¶
[oneway, source, target, two_way_if_null]
TEXT
参数¶
- edge_table:
text
网络表的名称(可能包含模式名称)- s_in_rules:
text[]
source节点 输入 规则- s_out_rules:
text[]
source节点 输出 规则- t_in_rules:
text[]
target节点 输入 规则- t_out_rules:
text[]
target节点 输出 规则- oneway:
text``oneway 列名,网络表的名称。 默认值为``oneway
。- source:
text``网络表的Source列名称。 默认值为``source
。- target:
text``网络表的Target列名称。 默认值为 ``target
。- two_way_if_null:
boolean
将单向 NULL 值视为双向的标志。 默认值为true
。
Note
强烈建议使用命名符号。 有关示例,请参阅 pgr_createVerticesTable 或 pgr_createTopology。
函数返回:
OK
分析完成后。使用这个顶点表:<edge_table>_vertices_pgr。
完全填充顶点表的
ein
和eout
列。
FAIL
当分析因错误而未完成时。未找到顶点表。
未找到网络表所需的列或该列的类型不正确。
source 、 target 或 oneway 的名称相同。
这些规则被定义为文本字符串数组,如果与 oneway
值匹配,则 source或 target 输入 或 输出 条件将被视为 true
。
顶点表
顶点表可以使用 pgr_createVerticesTable 或 pgr_createTopology 创建
顶点表的结构为:
- id:
bigint
顶点的标识符。- cnt:
integer
edge_table 中引用该顶点的顶点数。 请参阅 pgr_analyzeGgraph。- chk:
integer
指示顶点可能有问题。 请参阅 pgr_analyzeGraph。- ein:
integer
edge_table 中引用该顶点作为传入的顶点数。- eout:
integer
Edge_table 中引用该顶点作为传出的顶点数。- the_geom:
geometry
顶点的点几何。
其他示例¶
ALTER TABLE edges ADD COLUMN dir TEXT;
ALTER TABLE
SELECT pgr_createTopology('edges', 0.001, 'geom');
NOTICE: PROCESSING:
NOTICE: pgr_createTopology('edges', 0.001, 'geom', 'id', 'source', 'target', rows_where := 'true', clean := f)
NOTICE: Performing checks, please wait .....
NOTICE: Creating Topology, Please wait...
NOTICE: -------------> TOPOLOGY CREATED FOR 0 edges
NOTICE: Rows with NULL geometry or NULL id: 0
NOTICE: Vertices table for table public.edges is: public.edges_vertices_pgr
NOTICE: ----------------------------------------------
pgr_createtopology
--------------------
OK
(1 row)
UPDATE edges SET
dir = CASE WHEN (cost>0 AND reverse_cost>0) THEN 'B' /* both ways */
WHEN (cost>0 AND reverse_cost<0) THEN 'FT' /* direction of the LINESSTRING */
WHEN (cost<0 AND reverse_cost>0) THEN 'TF' /* reverse direction of the LINESTRING */
ELSE '' END;
UPDATE 18
/* unknown */
SELECT pgr_analyzeOneWay('edges',
ARRAY['', 'B', 'TF'],
ARRAY['', 'B', 'FT'],
ARRAY['', 'B', 'FT'],
ARRAY['', 'B', 'TF'],
oneway:='dir');
NOTICE: PROCESSING:
NOTICE: pgr_analyzeOneway('edges','{"",B,TF}','{"",B,FT}','{"",B,FT}','{"",B,TF}','dir','source','target',t)
NOTICE: Analyzing graph for one way street errors.
NOTICE: Analysis 25% complete ...
NOTICE: Analysis 50% complete ...
NOTICE: Analysis 75% complete ...
NOTICE: Analysis 100% complete ...
NOTICE: Found 0 potential problems in directionality
pgr_analyzeoneway
-------------------
OK
(1 row)
另请参阅¶
索引和表格