pgRouting分配源和目标的数量

时间:2014-05-27 10:39:33

标签: routing postgresql-9.2 pgrouting

我有一个河网络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');

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

enter image description here

  

紫色线是河

     

红点是节点(顶点)

     

红色数字是节点数

     

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

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

enter image description here

pgRouting可以分配源和目标的数量,并使从源到目标的方向与流向相同吗?如果没有,我该怎么办?

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

1 个答案:

答案 0 :(得分:0)

容差定义将合并为单个点的两个点之间的最小距离。例如,如果您有两个点,并且它们之间在数据库单位中的距离小于容差,那么它们将被视为相同的点,并将被赋予相同的数字。

在运行pgr_createtopology()之前,在几何表中给出一个边缘段,你怎么知道流的方向?基于数字化的方向?我们在分配数字时不会考虑这个问题。在处理边缘时,数字按先到先分配的方式分配。

要解决您的问题,您可能需要编写节点重新编号算法,其工作方式如下: 1.运行pgr_createtopology() 2.从网络接收器(即:河网的排水管)进行深度优先搜索并以相反的顺序分配数字(从排水管中最大,在向上游移动时更小)。

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