Server Objects Extension(SOE)开发(三)
前言
SOE出现之前,一些复杂、耗时的gis操作,通常都是使用gp服务实现的。前面将gp服务和soe进行了对比分析,为了测试两种的效率,曾经做了个demo,使用soe和gp同时执行相同的业务逻辑,记录两者的完成的时间,通过我个人的测试(ps,不代表官方立场)同样的业务gp一次请求比soe慢2s左右,如果并发的话,soe的优势应该更加的明显。下面就介绍这个demo。
一、demo背景
demo为对高程点数据进行插值,重分类,并最后将插值结果转换成矢量以json的形式返回到前端
1.1demo的最终效果
开发环境:vs2010,ags server 10.1,ags server javascript api 3.3

二、gp的实现
gp的实现通过model builder创建,这是gp比soe有优势的地方,实现特别简单,通过拖拽。关于如何创建和发布gp服务,可以参考另一篇文章:http://www.cnblogs.com/myyouthlife/archive/2013/02/26/2933486.html

三、soe的实现
制作demo的过程中,为了演示soe中的参数的处理,属性的使用,结果的处理,指定了下面的几点条件
1.输入参数分别为栅格像元大小和插值方法
2.可以变换插值图层和插值字段
3.插值结果进行前端展
3.1属性的设置和获取
通过在rest模板的Properties中设置属性,这里设置了Field_name 插值字段和Layer_Name插值图层,并设置了默认值。从10.1开始属性的设置非常的简单和方便,在Rest模板的Properties中设置即可。

当设置完后,soe部署后,在manager 对应的soe下可以看到属性栏中增加了插值字段和图层,如下图所示,方便soe的管理人员控制插值字段和插值图层

在soe,属性值的获取,一般是Construct()方法内,通过下面的代码可以获取在manager中设置的属性值

3.2 参数的反序列化
在插值操作的处理函数中,通过获取JsonObject对象的TryGetString()和TryGetAsDouble,在soe端获取前端指定的插值像元大小和插值方法,demo中只涉及到两插值方法krige和idw

tips:请注意这里像元大小的类型是double?,表示cellsize的值可以为null值
3.3 数据源的获取
demo中获取数据源的代码分为三步,1.通过IMapServer接口获取MapServer对象,给对象中包含地图文档内容,并通IMapLayerInfo和IMapLayerInfos获取某一图层和所有的图层 2.通过判断图层名是否等于属性中设置的插值图层名3.使用IMapServerDataAccess的GetDataSource方法获取插值图层。
tips:这里并没有使用IMap和ILayer接口,获取地图文档和图层

3.4 业务的实现
业务的实现,主要是调用Ao接口的过程,完成插值,等插值结果进行重分类,默认为等间距的重分类,对重分类结果进行raster to polygon的操作。
3.5结果的序列化
插值的结果为栅格,通过将栅格转换成矢量,将矢量中每个feature转换成graphic的形式返回前端,并在前端利用api的进行渲染。下面的代码遍历feature中的id值和分类等级作为graphic中attribute,而将feature.shape作为grapic的geometry,构建json形式的graphic对象
tips:当时这么做的目的是方便,但是这样会存在着隐患,一是当栅格转矢量的效率,二是当矢量要素过大时,通常当要素大于1000时,浏览器渲染表现就会吃力。

四、前端的调用
前端调用包含几个方面的内容:
1、参数的传递
2、接受服务器端返回的json的graphic对象
3、graphic的渲染
五、完整的代码下载
文件夹中包含客户端代码和前端代码
下载地址:https://github.com/myyouthlife/esrichinadevsummit2013-agssoe-InterpolationAndGPServicesSample
Server Objects Extension(SOE)开发(三)的更多相关文章
- Server Objects Extension(SOE)开发(二)
前言 SOE的提供了REST和Soap两种模板,只要在模板特定的方法中添加自己的业务逻辑代码即可,开发流程非常的简单便捷.那怎么知道自己的业务逻辑代码该写在模板的那个方法里面呢?这就需要很好的理解SO ...
- Server Objects Extension(SOE)开发(一)
1.SOE相关 1.1 什么是SOE SOE(Server对象扩展:Server Object Extenstion),其通过采用ArcObjects的相关的接口.类库对ArcGIS Server的基 ...
- 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》
一.课程笔记 1.1 软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...
- ArcGIS SOE开发异常之 ClassFactory cannot supply requested class
最近SOE开发一个功能,辛辛苦苦写完, 异常: ClassFactory cannot supply requested class 辛苦解决: 百度一下,描述这个问题的帖子很多,不过内容基本一致.大 ...
- App开发三种模式
APP开发三种模式 现在App开发的模式包含以下三种: Native App 原生开发AppWeb App 网页AppHybrid App 混合原生和Web技术开发的App 详细介绍: http:// ...
- iOS开发三步搞定百度推送
iOS开发三步搞定百度推送 百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...
- 基于Spring MVC的Web应用开发(三) - Resources
基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的we ...
- Java Web高性能开发(三)
今日要闻: Clarifai:可识别视频中物体 最近几年,得益于深度学习技术的发展,谷歌和Facebook等企业的研究人员在图形识别软件领域取得了重大突破.现在,一家名为Clarifai的创业公司则提 ...
- SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型
原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...
随机推荐
- 解析 PHP 中 session 的实现原理以及大网站应用应该注意的问题
一 PHP SESSION原理 session 是在服务器端保持用户会话数据的一种方法,而 cookie 是在客户端保持用户数据.HTTP 协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系 ...
- Pattern Recognition and Machine Learning 模式识别与机器学习
模式识别(PR)领域: 关注的是利⽤计算机算法⾃动发现数据中的规律,以及使⽤这些规律采取将数据分类等⾏动. 聚类:目标是发现数据中相似样本的分组. 反馈学习:是在给定的条件下,找到合适的动作, ...
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- centos/rhel下实现nginx自启动脚本实例
1. 建立脚本文件nginxd [root@could]# vi /etc/init.d/nginxd 插入以下内容 #!/bin/bash # # chkconfig: - 85 15 # de ...
- php使用N层加密eval gzinflate str_rot13 base64 破解方法汇总
php使用N层加密eval gzinflate str_rot13 base64 破解方法汇总 来源:本站转载 作者:佚名 时间:2011-02-14 TAG: 我要投稿 PHP使用eval(gzin ...
- java-MapDemo
Map数据结构的使用 package com.example; import java.util.HashMap; import java.util.Map; /** * MapDemo.java D ...
- 关于WPF界面框架MahApps.Metro的一个BUG
碰到了这个问题,记录一下,以便以后查阅: 在一个WPF项目中使用MahApps.Metro界面框架,其中有一个功能是嵌入一个带句柄的标记. 首先WPF是出了窗体和WebBrowser带有句柄外,其他控 ...
- C语言结构体指针的引用问题
在写栈的一个应用时遇见这样的一个问题 SqStack s; s->base = (int*)malloc(sizeof(int)*10); 通过这样一个代码引用的时候,会导致程序出现异常 经过一 ...
- inode表元数据,存储在物理存储体上
一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规.目录.符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看到的那些信息,这些信息存在inode中而不是 ...
- XCode 4.6下XIB文件提示“...could not be opened..."的问题
最近更新了Mac系统和XCode,当我把一个以前的项目用Xcode5打开以后,再用Xcode4.6打开时,选中XXXX.xib/storyboard文件,有的文件会弹出 "The docum ...