pgRouting 分配源和目标的数量

Posted

技术标签:

【中文标题】pgRouting 分配源和目标的数量【英文标题】:pgRouting assign number of source and target 【发布时间】:2014-05-27 10:39:33 【问题描述】:

我有一个河网 shapefile,我使用 pgRouting 2.0 来路由它。我使用以下 sql 代码使其可路由,

alter table tc_15000_w_area add column source integer;
alter table tc_15000_w_area add column target integer;
select pgr_createTopology('tc_15000_w_area', 0.0001, 'the_geom', 'gid');

我想要的只是一个包含源/目标的可路由表,并且从所有源到目标的方向与河流的方向相同。这是示意图,

紫色线是河流

红点是节点(顶点)

红色数字是节点数

每个河段都有其源(节点)和目标

但我检查了结果表,我发现 node#11 始终是目标。这将使至少一个边缘的方向错误(流向)。

pgRouting 是否可以分配源和目标的编号,使从源到目标的方向与流向相同?如果不能,我该怎么办?

我在 sql 代码中使用了不同的容差,但得到了相同的结果,我在 PostgreSQL 8.4 下使用 pgRouting 版本 1.x 也得到了相同的结果。

【问题讨论】:

【参考方案1】:

容差定义将合并为一个点的两点之间的最小距离。例如,如果您有两个点,并且它们之间的距离(以数据库单位表示)小于容差,则它们将被视为同一点并分配相同的编号。

在运行 pgr_createtopology() 之前给定几何表中的边段,您如何知道流向?基于数字化的方向?我们在分配数字时不会考虑这一点。在我们处理边时,编号是按照先到先分配的原则分配的。

要解决您的问题,您可能需要编写一个节点重新编号算法,其工作原理如下: 1. 运行 pgr_createtopology() 2.从网络汇(即:河网的排水沟)进行深度优先搜索并以相反的顺序分配编号(排水沟最大,向上游移动更小)。

我会为此创建新的节点源和目标列。可能有更好的方法来解决这个问题,但目前还不是很明显。

【讨论】:

如果我知道每条边的位置,那么我可以通过流向检查它们的“源-->目标”方向。所以这个的基本问题不是关于分配给顶点的 pgRouting 的数量,而是关于源(或目标)pgRouting 分配的顶点的角色。 pgr_createtopology() 无法按照您希望的方式分配数字。您正在寻找的是我上面描述的一些图形分析算法的结果。让我们将问题简化为一条边。如何将数字分配给此边缘?哪一端是源头,哪一端是水槽/排水管? 我发现一个帖子似乎解决了这个问题,dirkraffel.com/2011/09/06/… 但我不知道这是否可以被driving_distance函数使用,因为帖子中的代码似乎没有重新分配来源的数量和目标?

以上是关于pgRouting 分配源和目标的数量的主要内容,如果未能解决你的问题,请参考以下文章

p:pickList不更新源和目标

画布 globalCompositeOperation 源输入和目标输入不能与多个源和目标一起使用

CopyFiles 使用电子表格列作为源和目标

csharp Automapper - 多对象源和一个目标

使用 Postgis 和 pgRouting 的行车路线 [关闭]

从可变源和目标位置复制文件并重命名重复项