Chinaunix首页 | 论坛 | 博客
  • 博客访问: 873753
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 系统运维

2012-04-24 21:42:39

 先后以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去请求相应的地图信息等等。想必,聪明如你,必定有合适自己的解决方式吧!

努力学习~~
阅读(1537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~