全部博文(372)
2012年(372)
分类: 系统运维
2012-04-24 21:42:39
在加载切片地图(在服务器端做过切片的静态地图)的时候,同样的一个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去请求相应的地图信息等等。想必,聪明如你,必定有合适自己的解决方式吧!