优化是个系统的工程,一个复杂的系统,性能的问题可能存在在很多的地方,硬件、数据、网络、代码等等。硬件、网络往往是已经没有办法决定的事情,如果整个环境,从硬件的选取、网络的搭建开始,那可以参考ArcGIS的Capacity Planning Tool(在Google搜索Arc08CapacityPlanning,会找到下载链接),根据用户具体的并发需求,选择硬件的配置。我们可以从其它几个方面考虑来提高网络分析的效率。
第一,原始数据的存储方式。ArcGIS对空间数据的存储方式有几种类型,shape file、personal geodatabase、file geodatabase、sde geodatabase,从esri对不同存储方式的测试来看,file geodatabase具有最好的效率,但是因为考虑到sde geodatabase的高级功能,多用户编辑、版本、历史归档,更多的用户会选择将数据存储到sde geodatabase中。从我测试的情况,网络分析的计算,很大一部分时间耗费在stops、facilities等投影到最近的道路上,因此原始数据一定要有空间索引。
第二,网络分析参数的设置。有些可能影响计算时间的设置,hierarchy选项,use hierarchy会节省道路搜索的时间;道路限制条件的选择,限制条件考虑越多,计算也会越耗费时间,所有不需要的限制条件,uncheck;网络数据集属性的选择,大家应该还记得属性的赋值器当中VB Script的特点,它是在网络分析的时候实时计算的,同样会花费时间,因此如果可以一开始将属性build进网络数据集,就不要留到分析的时候去做;是否返回direction和geometry的设置,本来我想把这个放到第三当中,可是似乎这也属于网络分析参数的设置,B/S架构下,客户端首先触发某个操作,核心的计算发生在服务器端,计算完成之后,结果传输到客户端,客户端解析并显示,网络条件一定的话,减少数据的传输量也是提高效率的一个方面,因此如果没有必要返回direction,就不用多此一举。
第三,Dissolve Network。这也是10新增的功能,它在原来的网络数据集基础上创建新的网络数据集,新的数据集线对象更少。Dissolve Network的原理是将逻辑上相连并且属性相同(道路名称相同、hierarchy相同、限制条件相同)的对象合并,这样网络数据集中的线对象减少,搜索遍历更有效,网络分析的速度更快,同样也意味着产生路径结果、方向提示速度更快。
基本上考虑了这些方面之后,网络分析的速度应该能够达到满意的程度。当然创新永无止境,如果大家在现实应用中有更好的方法可以一起分享,我也会不断补充。