网络分析与网络数据集—转向

来源:互联网 发布:日本武士刀淘宝 编辑:程序博客网 时间:2024/05/18 02:24

我在前面有提到转向是构建网络数据集重要的元素。从功能来说,它可以实现,一、转向成本,二、禁止策略。网络数据集中的转向来自两个部分,一、Global Turn,二、Turn Feature Class。

 

 

先看Global Turn。网络数据集默认情况就会创建Global Turn,它存在于网络数据集的每个路口。可以针对不同的道路,不同的转向设置不同的成本,或者限制其转向。转向的设置对距离和时间的Cost属性是有差别的。

 

距离类型的Cost属性,转向的赋值器有三种,Constant和Function比较简单,VB Script赋值器可是一个非常强大的工具,它在分析运行时才会计算其值,因此也必然会影响网络分析的速度。但是很多时候我们还是不得不用,最近刚好有用户提出一个问题,他们发现路径计算的结果在高架上出现了掉头的现象,这是不符合实际情况的,仔细沟通了之后,发现,事实上他们原始的数据存在一定的问题,高架矢量化的是单线双向的,而规范的导航数据,对于这样级别的道路必定双线甚至是多线单向的,上下匝道也是单向。但是没办法,要实现网络分析的功能,并且还要保证结果保持一定的准确性,还不能耗费太大力气去重新纠正数据,虽然有点勉为其难,重新研究了下网络分析当中的边边角角,居然发现Global Turn的VB Script赋值器可以轻松应付这件事(时间类型的Cost属性Turn的设置还会有另外一种方式,稍后提)。

 

 

 

时间类型的Cost属性,转向的赋值器有四种,Constant、Function、VB Script已经介绍,第四种Global Turn Delay赋值器,Global Turn Delay只有在时间类型的Cost属性中才会见到,你可以通过Global Turn Delay设置不同类型转向的通行成本或者禁止某种类型的转向。可以定义不同转向的角度范围,当然最重要的是可以针对不同的转向来设置其通行成本。如果网络数据集设置了hierarchy,那么在Global Turn Delay对话框下部的列表中,可以对不同等级道路之间的转向赋以不同时间成本,默认情况下转向类型的列表框只列出20种常见的Type,要是大家仔细看下我截下的图会发现当中远远不止20种,对的,其中列出了所有可能的类型(很简单,点击Load From File按钮,定位至arcgis install home/NetworkAnalyst/NetworkConfiguration/AllNetworkGlobalTurnDelaySettings.xml,就可以看到所有的转向类型了),前面提到的禁止高架掉头的问题,可以算作一个练习,大家试试如何在Global Turn Delay中实现,应该不难;如果网络数据集没有设置hierarchy,情况就简单多了。

 

 

我们再看Turn Feature Class。到目前为止,我所接触到的应用网络分析的用户或者系统,极少会用到Turn Feature Class的,但Turn Feature Class是模拟道路实际通行状况的非常重要的元素。当然,不是不想用,而是一者可能没有精力和财力去采集实际转向的数据;二者可能自己有转向的数据,不知如何转换成网络分析的Turn Feature Class。第一种情况,我也没办法解决;第二种情况,我想我可以。

 

首先看一下Turn Feature Class的表结构。它本质上就是一个Line Feature Class,是将Turn Feature经过的路段ID、路段所在Feature Class ID等存储起来,默认情况下Turn Feature支持5条路段,这在大部分情况下是足够了,如果有特殊情况,Turn Feature Class最大可以支持到20。

 

 

其实我想,我们如果平常喜欢写程序的话,接下来的事情应该不需要我啰嗦了,一劳永逸的事情就是写个程序,根据自己定义的转向表结构生成网络分析支持的Turn Feature Class。我已经根据下图的Turn表结构写了生成Turn Feature Class的Engine程序,点击打开链接。提到这个程序,说点题外的事情,因为根据这个Turn表生成Turn Feature Class需要通过路段的ID不断搜索其对应的路段Feature,如果原始的路段图层没有建立属性索引,耗时相当厉害,我原先的程序在没有建属性索引的情况下,运行了20多分钟才出来结果,但是建立属性索引之后,仅仅需要4秒钟左右。

 

 

0 0
原创粉丝点击