周莉莎 葛 亮
城市地理信息應用服務
周莉莎 葛 亮
本文主要介紹了基于RIA技術的客戶端地圖的可視化實現。詳細介紹了客戶端的請求流程以及目錄的結構、作用和生成,以及客戶端地圖組件的結構、實現以及一些重要的技術。
地理信息技術的快速發展,以及Internet技術的不斷更新,使得Web成為了分布式應用的載體。近年來,開放地理信息系統聯盟(OGC)作為地理空間信息技術領域中的一個大的標準化組織,一直在在致力于尋求更加高效的方式,將地理信息技術、OOP、數據庫管理技術以及分布式技術進行有效的結合。
隨著大數據、云計算技術的發展,傳統的程序架構已經難以滿足海量數據和信息的處理與分析。如何高效的實現GIS在分布式異構平臺上的互操作已經成為了當下一個重要的研究課題。Web Service技術的發展,逐漸克服了傳統分布式技術的缺陷,為基于Internet/Intranet的地理空間信息互操作帶來了新的契機。OGC web服務啟動項目制定了基于WebService空間信息服務的框架。論文將研究基于開源軟件利用Web Service技術實現OGC地圖服務。
本文的客戶端是基于FLEX的客戶端,給用戶提供了絢麗了界面體驗和快捷的交互體驗效果。客戶端請求瓦片的流程,如圖1。
由上圖可以看出Flex客戶端并不可以直接去請求存儲地圖瓦片的數據服務器,而是先請求目錄服務器。目錄服務器端存放了有關瓦片數據源的信息,包括:數據服務器的地址,瓦片的請求路徑,瓦片的BBox,瓦片的元素類型等。Flex客戶端得到目錄服務的XML文檔以后,需要解析XMl文檔,然后根據解析的結果去請求數據服務器,數據服務器再返回瓦片給客戶端顯示。
本文是使用目錄服務器和數據服務器,并且使用2個不同的服務器,更有利于地圖瓦片數據的安全性,同時也可以減輕服務器的壓力,減少客戶端的響應時間。
在上述圖中的客戶服務器的響應和請求,本文都是基于WebService進行交互的。WebService是兩個電子設備通過網絡之間通信的方法。它設置在一個網絡地址上,通過網絡與服務作為軟件進行計算。 W3C將Web服務定義為:一個設計為提供計算機與計算機之間通過網絡進行交互式計算的軟件系統。W3C的Web服務架構工作組定義的Web服務架構,需要的特定實現“Web服務”。
目錄服務的結構
目錄服務在切片服務中的作用有點類似于,Capbility文檔在WMS服務中的作用。它存儲了所有在數據服務器端可以對外服務的瓦片數據集的信息,用戶獲得了目錄服務以后,就可以知道數據服務端的服務內容,可以更加準備的請求數據,不容易出現請求不存在的情況。
另外目錄服務的作用還可以是面對程序的,這在上面客戶端請求流程中已經提及到。基于服務端數據的WebGIS應用,必須首先要訪問目錄服務,才知道數據服務器的地址,以及一些詳細信息,這對于客戶端的地圖可視化是非常重要的,也是必須的。

圖1 客戶端請求示意圖

圖2 目錄服務文檔的組織結構圖

圖3 數據集節點的組織結構圖
目錄服務的組織結構,如圖2。最外層是基礎地理數據,包括:影像地理數據、地形地理數據,矢量地理數據等。這里只涉及到矢量地理數據,其他的幾類都已經注釋了。矢量地理數據又是以圖層組(VectorGroup)的形式進行組織的,這樣使得同組的數據可以存放在一起,用戶獲得文檔以后也更加容易讀懂。其中文檔的屬性ExternalName表示數據集的對外服務名稱,Visible表示數據集的是否可見。
圖層組(VectorGroup)的下一級是數據集(VectorDataSet),這是存儲瓦片數據集信息的節點,存儲的詳細信息如圖3。
ExternalName:客戶端請求數據服務使用的名稱。
InternalName:在數據服務器端的真正訪問的名稱。
ServerUrl:q請求瓦片數據的基本路徑,包含數據服務器的地址和服務的名稱。
StartNumber:地圖數據對應瓦片數據的起始層號。
EndNumber:地圖數據對應瓦片數據的終止層號。
ZeroLevelTileSpan:瓦片數據第零層的經緯度跨度。
Bound:瓦片數據源的地理坐標范圍,包含:North、South、East、West。
TransparentColor:瓦片數據的透明度,包含:Red、Green、Blue。
TerrainMapped:對應的地形數據,這里暫未使用。
WmsInfo:此數據源對應的WMS請求的信息,包括請求字符串(Url)、請求的圖層名(LayerName)、地理元素的類型(ShapeType)等。
目錄服務的生成
目錄服務是在服務端生成瓦片以后,服務器端動態把新增加的瓦片的數據集注冊到目錄服務器,它是一個動態創建的過程。
第一步:由于目錄服務可能同時被多個線程訪問,所以必須加入互斥鎖。
Monitor.Enter(同步對象(通常為Object類型));
第二步:載入目錄服務器端的XML文檔,為注冊數據集準備。
doc.Load(目錄服務XMl文檔的URL);
第三步:創建XMl節點,并賦予其正確的值。
XmlElement 新節點對象= doc.CreateElement(“新節點的名字”);
新節點對象.InnerText = 新節點的內容;
第四步:將所有創建的新節點,按照前面的目錄服務的結構組織起來,最后添加到XML文檔中。
第五步:按原路徑保存XMl文檔,并且釋放排它鎖,以方便其他的線程使用目錄服務的XML文檔。
在以后對瓦片數據源的修改、刪除、添加過程中,都會對目錄服務進行更新,這樣的注冊動態更新機制有效保證了目錄服務的可靠性和完整性,用戶始終得到的是準備的、最新的目錄服務數據,這樣才可以發揮目錄服務存在的價值和意義。
隨著網絡技術的不斷發展,面對用戶更高的、全方面、更豐富的體驗要求,作為GIS行業非常重要的一個方向——WebGIS也在不斷的發展。但是遺憾的是傳統的Web技術的表現能力和交互能力始終制約著WebGIS的進一步發展,無法滿足用戶的需求。以流行的RIA技術Flex作為客戶端展現方式,創建一個以自己開發的地圖服務器和切片地圖服務為數據提供源,開發獨立的Flex為展現端的WebGIS應用模型將成為WebGIS的一個發展方向。
10.3969/j.issn.1001-8972.2015.17.034