arcgis serverSOE几何网络分析

前言:前一段时间公司有个项目需要分析排水户到污水厂的流向,点击地图上的排水户在管网上生成到污水厂的流向。网上查了一系列资料,看需要SOE构建几何网络,使用下游溯源分析功能才能实现污水厂流向的分析。
在这里需要感谢王培晓同学对ArcGIS Server中SOE开发的详细介绍ArcGIS Server之扩展几何网络分析。
本人的代码就是基于他的代码进行功能的实现,在他的代码的基础上进行了升级和更正(他的代码里有一部分接口是缺失的,我在后面会给予说明,还有就是他所实现的功能不能显示流向的箭头,流向箭头的功能我进行了优化改造)。
实现这个功能我进行了以下几个步骤

1.首先在arcmap中研究怎么使用几何网络分析功能,以前对这块没有进行过实验,相当于重新搞了一遍实验教程。

1.1

首先在arccatlog或者arcmap的右侧目录里新建个人地理数据库,在新建的个人地理数据库中选择新建要素数据集,右键新建的要素数据集,选择导入,多个要素,将我们准备好的要进行构建几何网络分析的要素数据导入,我这边导入了三个要素,一个是排水户数据图层(源),一个是管网数据图层(网络),一个是污水厂数据图层(汇),

1.2

导入数据后,继续右键要素数据集,选择新建几何网络,打开向导。主要需要选择的是将污水厂和排水户进行设置连接要素类型,选择为源或汇,权重的话流向分析用不到不用进行设置,经过这些设置就能构建几何网络了,将构建的几何网络拖入到arcmap中.arcgis serverSOE几何网络分析_第1张图片

1.3

在构建几何网络分析的时候设置了源和汇的图层都会生成一个新的字段AncillaryRole,这个字段的默认值为none,需要打开编辑功能更改其属性值,将流向的终点设置为汇,起点设置为源(我只设置了一个汇,没设置源,有了汇,从每条管线的起点都会向汇流入,从而生成流向)这个我没设置源,让他值默认为none,我这个数据是拷的别的地方的,里面有个字段enabled,一开始这个的值为false,我怎么都生成不了流向,把这个改成了true才生成了流向。arcgis serverSOE几何网络分析_第2张图片
这个我设置了汇,有了汇,自然就向汇流,流向自然就生成了
arcgis serverSOE几何网络分析_第3张图片

1.4

用arcmap中几何网络分析功能,尝试生成流向。英文版的翻译好像是unitty开头的,记不清了,总之和汉化版的不是同一个位置。开启编辑功能,这时分析流向的按钮才能变成可用状态,进行流向分析。
arcgis serverSOE几何网络分析_第4张图片
arcgis serverSOE几何网络分析_第5张图片
arcgis serverSOE几何网络分析_第6张图片
arcgis serverSOE几何网络分析_第7张图片

1.5

如果发现流向没什么问题,就按照征程流程发布动态地图服务就可以了。

2 构建SOE

构建SOE这部分可以参考王培晓同学的代码,从他的github上下载相关的代码,这里指出他的代码的一些没有描述的问题(也就是我遇到的坑)

2.1

首先是版本的问题,他只说了10.2的能用,10.1的需要修改才能用,我自己本身是10.2的版本所以直接就能使用,后来发现现场是10.1版本,我又把自己电脑的版本改成了10.1,改成10.1后发现VS2012无法编译,后来发现这是一个总所周知的bug
在SOE工程文件下找到.csproj文件,用记事本打开,找到 Project="KaTeX parse error: Expected 'EOF', got '\ESRI' at position 24: …ExtensionsPath)\̲E̲S̲R̲I̲\ESRI.ArcGIS.Ad…(MSBuildExtensionsPath)\ESRI\ESRI.ArcGIS.AddIns.Server.11.targets’)" 修改为
“Project="KaTeX parse error: Expected 'EOF', got '\ESRI' at position 24: …ExtensionsPath)\̲E̲S̲R̲I̲\ESRI.ArcGIS.Ad…(MSBuildExtensionsPath)\ESRI\ESRI.ArcGIS.AddIns.Server.targets’)" 即可
也就是说如果是10.2版本就要加上.11,10.1版本的就要去掉这个.11。

2.2

第二是代码问题,王同学的代码我下载下来以后,自己运行了一下,发现除了我想要的下游溯源分析功能之外的几何网络分析的所有功能他都写上了(我用不了,难受了),然后我就找到了一本ArcEngine的书找到了下游分析的接口,加上了这么一段,这样就把几何网络分析的几个功能接口补齐了。arcgis serverSOE几何网络分析_第8张图片
此外他的实例中只返回了下游分析的线和汇的点要素数据,无法在地图上显示水的流向箭头问题,(当然如果你们项目不需要展示箭头的话,后面这个介绍箭头显示的可以不用了),后来经过AE开发的同事指导,又加了一段代码,多返回一个字段EsirFlowDieection,该字段一般有两个值,当值为EsriFDWithFlow时,表示流向和矢量化方向相同,当值为EsriFDAgainstFlow时,来表示水的流向和矢量化方向相反。下面我详细介绍下这个字段的原理
arcgis serverSOE几何网络分析_第9张图片
下图1 2 3分别是指2我创建这个线要素时候点的顺序,红色箭头表示实际水的流向,我们发现1 2 3顺序的方向就是水流的方向,这时EsirFlowDieection的值就是EsriFDWithFlow,表名方向一致。
arcgis serverSOE几何网络分析_第10张图片
当构建线要素和水流方向不一致时,这时EsirFlowDieection的值就是EsriFDAgainstFlow,表名流向和矢量化方向相反。
arcgis serverSOE几何网络分析_第11张图片
为什么要做这个分析呢,
如下图所示,如果在构建线要素时候先通过[1,2]顺序构建了线要素A,又通过[3,2]顺序构建了线要素B,请求后端A、B两个线要素会返回A:[1,2],B:[3,2]。
当我们生成流向箭头的时候是根据线要素的坐标顺序来生成的,如果给的线要素是[1,2]格式,那么生成的流向就是1→2,如果给的线要素是[3,2]格式,那么生成的流向就是3→2,如果照这么处理下去就会出现1→2,3→2,和我们实际1→2→3的流向不一致,所以这个EsirFlowDieection的属性值就很重要了,当流向是2→3,返回的线要素是[3,2]的时候,EsirFlowDieection的值就为EsriFDAgainstFlow,我们对线要素的数组顺序进行调换,这样就能保证生成流向箭头方向和流向一致了。
arcgis serverSOE几何网络分析_第12张图片
不知道大家能不能看懂,感觉写的越多越乱。

3

这样SOE项目就搭建完了,运行编译一下就能得到SOE的文件了,将SOE文件上传到arcgis server扩展上,然后开启扩展即可,当然也有人扩展失败,原因大致有两个,一是电脑上SDK版本问题,二是安装server时候framework 3.5环境没安装,还有浏览器的原因,谷歌不行要到IE上传,问题不一而足,网上大多都能搜到。

4

现在server端试一下能否进行分析
arcgis serverSOE几何网络分析_第13张图片
下面的三个没用到,也没具体研究,有障碍线、障碍点,用来做爆管分析之类用的到吧。
arcgis serverSOE几何网络分析_第14张图片
这样就能查到返回的线要素和点要素,以及流向属性了。就可以在前端进行渲染展示了。

你可能感兴趣的:(arcgis,arcgis,server,SOE,几何网络分析,流向分析)