zoukankan      html  css  js  c++  java
  • ArcGIS API 和GIServer

    ArcGIS  API 和GIServer

      先后以ArcGIS Server(9.3)和GIServer(2.2)为服务端,以ArcGIS API for Flex(1.2)、ArcGIS API for Silverlight(2.0,2.2)为客户端进行过GIS项目的开发,以及尝试使用GIServer+ArcGIS API for Javascript为客户端进行开发。在使用GIServer作为服务器端,使用Silverlight API 和Javascript API进行开发时,遇到了一个很类似的致命的问题。

      在加载切片地图(在服务器端做过切片的静态地图)的时候,同样的一个API请求,ArcGIS Server和GIServer返回的Json数据是不一样的,从而导致API在其后来的解析过程中出现错误。

    一 Silverlight API时的singleFusedMapCache

      假设一个做过切片的地图服务(Map Service)的地址为WMS_URL,则ArcGIS Silverlight API在使用ArcGISTiledMapServiceLayer 类型的图层加载该服务的时候,会先以WMS_URL?f=json的URL发送Get请求,以获取相应的信息,从而进行下一步的处理。此时ArcGIS Server返回的JSON数据中会包含一个“singleFusedMapCache”的键,来声明对应的地图服务的类型,而GIServer返回的JSON数据则没有此信息,因此,以GIServer为服务端时,API则会认定此服务的singleFusedMapCache为false,从而告知用户:该图层不能使用ArcGISTiledMapServiceLayer 来加载。从服务地址对应的页面上其实也能够看的出来:

    可以看到GIServer发布的服务比ArcGIS Server发布的服务少了一个关键的属性。
    Javascript API时的再次封装

      同样使用上述的假设的地图服务的地址,Javascript API在加载服务时,同样会先进行以Get请求,来获取信息,不过url有所不同,此次为WMS_URL ?f=json&callback=dojo.io.script.jsonp_dojoIoScript1._js,来表名此次的请求时针对javascript的。此时ArcGIS Server的返回数据如下图所示

    是以dojo.io.script.jsonp_dojoIoScript1._js(为前缀再次封装后的json数据,而GIServer的返回值则如下图所示

    ,只是纯粹的json数据。因此Javascript API在后续的解析中便出现了错误,无法继续下去。

      上述问题肯定也是有办法解决的,毕竟GIServer是一个开源的软件,读一读源代码,修改修改估计也是可行的。还有一个方式,就是重写相关的类比如重写ArcGISTiledMapServiceLayer ,自定义一个layer去请求相应的地图信息等等。想必,聪明如你,必定有合适自己的解决方式吧!

    每多学一点知识,就少写一行代码
  • 相关阅读:
    PSNR计算
    Latex中的(左边有大括号的)方程组解决方案汇总
    CS (Compressive sensing, 压缩传感)
    OpenCV 2.3.0 编译错误之 file INSTALL cannot find opencv_ffmpeg230d.dll(无法找到opencv_ffmpeg230d.dll)
    Visual Studio 2008 编译程序时的 mt.exe 返回错误
    fontDialog,colorDialog,saveDialog改变字体大小,颜色,以后保存图片文件实例
    Lambda入门示例实例
    C#接口入门基础知识复习
    C#,visual studio 2010中实现最简单DragDrop实例
    抽象类实现条件参数必须和抽象类中的一样
  • 原文地址:https://www.cnblogs.com/loveclumsybaby/p/2468822.html
Copyright © 2011-2022 走看看