(十)ArcGIS Server之开发SOE(中)
来源:互联网 发布:vb时间控件属性 编辑:程序博客网 时间:2024/04/29 19:30
- 引言
- 首先发布我们的地图服务
- 编写代码扩展地图服务
- 1创建一个SOE程序取名为MyGNServer
- 2 因为我们扩展MapServer修改SOE扩展的类型
- 3 查看关键函数代码
- 4 修改Rest资源对应的函数我们将图层中的几何网络图层名称显示出来
- 4 修改Rest操作对应的函数这里才是核心代码注意在这里我们获得了AO对象很关键
- 5 将SOE文件注册到ArcGIS Server
- 6 将SOE和地图服务绑定
- 调试SOE程序
- 1 首先在我们程序代码中添加断点注意我断点的位置
- 2 将SOC添加到进程调试
- 3 访问httplocalhost6080arcgisrestservicesTestMyGNServerMapServerextsMyGNServer注意断点进入的地方
- 4 运行代码查看网页注意RootResHandler是什么时候运行的
- 5 运行SearchGN方法注意进入的断点我们获得了INetWork对象AO对象SampleOperHandler是什么时候运行的
- 6 运行结果
- 7 假设我们输入的名称不对
- SOE开发注意的地方
- 1 本博客代码下载地址SOE开发中
1. 引言
在上一篇博客中主要了解了什么是SOE,然后我们创建了一个简单的SOE程序,但是那个程序几乎没什么价值,因为功能实现太简单了。在真实的项目中,用到SOE开发,必然是遇到了技术难题,需要借助AO扩展地图服务的功能。如果借助AO实现一些复杂的功能,我们必然要获得一些AO对象。在本篇博客中,将以一个小demo,来介绍如何在SOE中获得AO对象。
2.首先发布我们的地图服务。
- 为了下一篇博客做铺垫,我们发布一个地图服务(此服务可以进行几何网络分析)
- 将该图层发布为地图服务
- 发布成功
3.编写代码扩展地图服务
在本实例中先不实现复杂的功能,我们首先实现一个简单的功能:前台传入一个图层名称,然后SOE程序判断地图服务中几何网络图层的名称是否和我们传入的名称相同(注意这里是网络图层。)
3.1创建一个SOE程序,取名为MyGNServer
3.2 因为我们扩展MapServer,修改SOE扩展的类型
3.3 查看关键函数代码
private RestResource CreateRestSchema() { RestResource rootRes = new RestResource(soe_name, false, RootResHandler); //创建一个操作,然后判断是否存在名称为GNName的网络图层 RestOperation sampleOper = new RestOperation("SearchGN", new string[] { "GNName"}, new string[] { "json" }, SampleOperHandler); rootRes.operations.Add(sampleOper); return rootRes; }
3.4 修改Rest资源对应的函数(我们将图层中的几何网络图层名称显示出来)
private byte[] RootResHandler(NameValueCollection boundVariables, string outputFormat, string requestProperties, out string responseProperties) { responseProperties = null; mapServer = (IMapServer3)serverObjectHelper.ServerObject; pMapServerDataAcc = serverObjectHelper.ServerObject as IMapServerDataAccess; INetworkClass pNetWork = null; //这里直接写死了,按理说应该是循环查找 pNetWork = pMapServerDataAcc.GetDataSource(mapServer.DefaultMapName, 0) as INetworkClass; JsonObject result = new JsonObject(); result.AddString("几何网络的名称为:", pNetWork.AliasName); return Encoding.UTF8.GetBytes(result.ToJson()); }
3.4 修改Rest操作对应的函数(这里才是核心代码,注意:在这里我们获得了AO对象,很关键)
private byte[] SampleOperHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties) { responseProperties = null; string parm = null; bool found = operationInput.TryGetString("GNName", out parm); mapServer = (IMapServer3)serverObjectHelper.ServerObject; pMapServerDataAcc = serverObjectHelper.ServerObject as IMapServerDataAccess; INetworkClass pNetWork = null; //这里直接写死了,按理说应该是循环查找,注意这里是几何网络,也就是获得了INetworkClass对象 pNetWork = pMapServerDataAcc.GetDataSource(mapServer.DefaultMapName, 0) as INetworkClass; JsonObject result = new JsonObject(); //判断用户输入的和地图服务是否对应 if (pNetWork.AliasName == parm) { result.AddBoolean("用户传入的名称", true); } else{ result.AddBoolean("用户传入的名称", false); } return Encoding.UTF8.GetBytes(result.ToJson()); }
3.5 将SOE文件注册到ArcGIS Server
3.6 将SOE和地图服务绑定
3.调试SOE程序
3.1 首先在我们程序代码中添加断点(注意我断点的位置)
3.2 将SOC添加到进程调试
- 点击VS的调试按钮,点击附加到进程
- 将ArcSOC添加到进程(所有的ArcSOC进程)
3.3 访问http://localhost:6080/arcgis/rest/services/Test/MyGNServer/MapServer/exts/MyGNServer(注意断点进入的地方)
3.4 运行代码,查看网页(注意RootResHandler
是什么时候运行的)
3.5 运行SearchGN
方法(注意进入的断点,我们获得了INetWork对象(AO对象),SampleOperHandler是什么时候运行的?)
3.6 运行结果
3.7 假设我们输入的名称不对
4. SOE开发注意的地方
- 自从ArcGIS 10.1之后,发布的地图服务都是基于msd文档的。所以ArcGIS10.1(包括10.1版本)在SOE中是无法获得IMap,ILayer对象的。既然无法获得IMap,ILayer对象,那么10.1之前的SOE代码(只要用到IMap对象,或者用到ILayer对象)是完全无法使用的。通俗点说,就是淘汰了。
- 在10.1版本以后的SOE开发过程中,如果想要获得要素类对象,或者说要素类中的数据,需要通过
IMapServerDataAccess
接口,该接口有两个方法GetDataSource()
和GetDisplayDateSource()
,第一个方法主要获取表,要素类,栅格数据。 但是在地图文档中我们有的数据是和其他数据有关联的的比如join操作,那么通过第二个方法我们不但可以获取源表的数据,还可以获取目的表的数据。 - ArcGIS10.0 版本发布的地图服务是基于mxd文档的,下面的代码在ArcGIS 10.0是可以运行的,但是在10.1之后代码是不可以运行的.(一定要记住在10.1之后,是不可能获得IMap对象的)
IMapServer mapServer = (IMapServer3)serverObjectHelper.ServerObject; IMapServerObjects3 pMSO = mapServer as IMapServerObjects3; IMap map = pMSO.get_Map(mapServer.DefaultMapName);
4.1 本博客代码下载地址:SOE开发(中)
1 0
- (十)ArcGIS Server之开发SOE(中)
- (九)ArcGIS Server之介绍SOE(上)
- ArcGIS Server 扩展-SOE系列(一)
- ArcGIS Server 扩展-SOE系列(二)
- ArcGIS 10.1 for Server 扩展开发(SOE)
- ArcGIS 10.1 for Server 扩展开发(SOE)
- Java环境下SOE—Rest开发之4(ArcGIS Server Manager属性页面设计需注意的几个 问题)
- ArcGIS SOE开发
- ArcGIS for Server的SOE开发思路解析
- ARCGIS 10.1 for Server SOE介绍及开发实例(1)
- ARCGIS 10.1 for Server SOE介绍及开发实例(2)
- ARCGIS 10.1 for Server SOE介绍及开发实例(3)
- ARCGIS 10.1 for Server SOE介绍及开发实例(4)
- ARCGIS 10.1 for Server SOE介绍及开发实例(5)
- ArcGIS for Server的SOE开发思路解析
- ArcGIS for Server的SOE开发思路解析
- ArcGIS Server 10.1 中SOE的新特性
- arcgis server soe调试不了
- Hanlp配置与使用
- Activity的生命周期
- imx6之kernel移植
- 美发布《2025年的数学科学》报告
- Activiti 指定节点跳转(适合退回、撤回)流程
- (十)ArcGIS Server之开发SOE(中)
- 敏捷开发也需要对症下药
- mongodb手记
- nginx之allow、deny
- 进行Log的统一管理和解决Log信息过长打印不全的问题
- SCNView如何灵活使用DAE文件
- HTMl5的sessionStorage和localStorage
- Android中对Log日志文件的分析---待整理
- select2 多查询关键字