对于上面的问题,习惯用ArcGIS Flex API开发的朋友在silverlight API 用RouteTask实现网络分析时出现这样的错误提示 会感到很困惑。难道是代码写的有问题?
但是,用同样的代码在接入ArcGIS Online上的路网服务分析功能是没有问题的,能够正常进行的。到这里我们初步可以排除是代码的原因,问题很有可能是出现路网数据本身上。
下面的属性结构是ArcGIS实验数据ArcTutor中的路网数据结构(比较复杂),发布路网服务后经silverlightAPI代码测试,网络分析功能可以正常执行。实际上只要我们把自己路网数据结构修改成与下图所示的路网结构,程序调用时就不会出现本文最开始提示框中的问题。
在我们寻找解决问题方法的同时,也在去发现是什么原因导致问题的出现。下面我们逐步分析是路网中什么样的属性会触发这个问题。
首先,我们拷贝一份上面的路网数据并按照下面的步骤重新创建网络数据集。
上面那些操作设置都是按照默认来进行的,关键是下面的特殊属性设置,也许问题是出现在这里。
为了验证之前的猜测,分三次移除上面的属性。第一次、第二次如下面两图所示:
前两次的属性设置尽管不同,但对最后的服务调用、网络分析功能执行没有影响。在第三次将区全部属性移除后创建的道路网络,在程序中调用就出现了“无法找到属性。,无效的上下文”错误。
现在可以判断是属性HierarchyMultiNet的缺失导致的程序执行报错。用同样的思路排查路网属性结构,最后锁定道路数据中要包含字段NET2CLASS。
在我们自己的路网数据中添加这个字段,重新创建网络数据集、发布服务,在程序中调用,结果如下图所示。