pgRouting分配源和目标的编号

pgRouting分配源和目标的编号,routing,postgresql-9.2,pgrouting,Routing,Postgresql 9.2,Pgrouting,我有一个河网形状文件,我使用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'); 我想要的是一个包含源/目标的可路

我有一个河网形状文件,我使用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');
我想要的是一个包含源/目标的可路由表,并且从所有源到目标的方向与河流的方向相同。这是示意图

紫色的线是河流

红点是节点(顶点)

红色数字是节点的编号

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

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

pgRouting能否分配源和目标的编号,并使源到目标的方向与流动方向相同?如果不能,我能做什么


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

公差定义了将合并为一个点的两点之间的最小距离。例如,如果有两个点,且它们之间的距离(以datbase单位表示)小于公差,则它们将被视为同一点,并将被指定相同的编号

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

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


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

如果我知道每条边的位置,那么我可以逐个流向检查它们的“源-->目标”方向。因此,这方面的基本问题不是分配给顶点的编号pgRouting,而是分配给顶点的源(或目标)pgRouting的角色。pgr_createtopology()无法按您希望的方式分配编号。您所寻找的是一些图形分析算法的结果,如我上面所述。让我们把问题简化到一个边缘。如何将数字分配给此边?哪一端是源,哪一端是接收器/漏极?我发现一篇文章似乎解决了这个问题,但我不知道这是否可以被driving_distance函数使用,因为文章中的代码似乎没有重新分配源和目标的数量?