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去請求相應的地圖信息等等。想必,聰明如你,必定有合適自己的解決方式吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM