zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    在UNICODE编码格式下, CString 转换为 char* :
    inet_ntop(), inet_pton(), htonl(), ntohl()
    'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)'
    NMAKE:fatal error U1077.“...cl.exe” return code 0xc0000135
    拷贝(复制)构造函数和赋值函数
    GIS 地图中术语解释
    Linux 下防火墙端口设置
    LInux 下安装jdk
    ln 命令
    zip命令
  • 原文地址:https://www.cnblogs.com/myyouthlife/p/3349555.html
Copyright © 2011-2022 走看看