周莉莎 葛 亮
城市地理信息應(yīng)用服務(wù)
周莉莎 葛 亮
本文主要介紹了基于RIA技術(shù)的客戶端地圖的可視化實現(xiàn)。詳細介紹了客戶端的請求流程以及目錄的結(jié)構(gòu)、作用和生成,以及客戶端地圖組件的結(jié)構(gòu)、實現(xiàn)以及一些重要的技術(shù)。
地理信息技術(shù)的快速發(fā)展,以及Internet技術(shù)的不斷更新,使得Web成為了分布式應(yīng)用的載體。近年來,開放地理信息系統(tǒng)聯(lián)盟(OGC)作為地理空間信息技術(shù)領(lǐng)域中的一個大的標準化組織,一直在在致力于尋求更加高效的方式,將地理信息技術(shù)、OOP、數(shù)據(jù)庫管理技術(shù)以及分布式技術(shù)進行有效的結(jié)合。
隨著大數(shù)據(jù)、云計算技術(shù)的發(fā)展,傳統(tǒng)的程序架構(gòu)已經(jīng)難以滿足海量數(shù)據(jù)和信息的處理與分析。如何高效的實現(xiàn)GIS在分布式異構(gòu)平臺上的互操作已經(jīng)成為了當(dāng)下一個重要的研究課題。Web Service技術(shù)的發(fā)展,逐漸克服了傳統(tǒng)分布式技術(shù)的缺陷,為基于Internet/Intranet的地理空間信息互操作帶來了新的契機。OGC web服務(wù)啟動項目制定了基于WebService空間信息服務(wù)的框架。論文將研究基于開源軟件利用Web Service技術(shù)實現(xiàn)OGC地圖服務(wù)。
本文的客戶端是基于FLEX的客戶端,給用戶提供了絢麗了界面體驗和快捷的交互體驗效果??蛻舳苏埱笸咂牧鞒?,如圖1。
由上圖可以看出Flex客戶端并不可以直接去請求存儲地圖瓦片的數(shù)據(jù)服務(wù)器,而是先請求目錄服務(wù)器。目錄服務(wù)器端存放了有關(guān)瓦片數(shù)據(jù)源的信息,包括:數(shù)據(jù)服務(wù)器的地址,瓦片的請求路徑,瓦片的BBox,瓦片的元素類型等。Flex客戶端得到目錄服務(wù)的XML文檔以后,需要解析XMl文檔,然后根據(jù)解析的結(jié)果去請求數(shù)據(jù)服務(wù)器,數(shù)據(jù)服務(wù)器再返回瓦片給客戶端顯示。
本文是使用目錄服務(wù)器和數(shù)據(jù)服務(wù)器,并且使用2個不同的服務(wù)器,更有利于地圖瓦片數(shù)據(jù)的安全性,同時也可以減輕服務(wù)器的壓力,減少客戶端的響應(yīng)時間。
在上述圖中的客戶服務(wù)器的響應(yīng)和請求,本文都是基于WebService進行交互的。WebService是兩個電子設(shè)備通過網(wǎng)絡(luò)之間通信的方法。它設(shè)置在一個網(wǎng)絡(luò)地址上,通過網(wǎng)絡(luò)與服務(wù)作為軟件進行計算。 W3C將Web服務(wù)定義為:一個設(shè)計為提供計算機與計算機之間通過網(wǎng)絡(luò)進行交互式計算的軟件系統(tǒng)。W3C的Web服務(wù)架構(gòu)工作組定義的Web服務(wù)架構(gòu),需要的特定實現(xiàn)“Web服務(wù)”。
目錄服務(wù)的結(jié)構(gòu)
目錄服務(wù)在切片服務(wù)中的作用有點類似于,Capbility文檔在WMS服務(wù)中的作用。它存儲了所有在數(shù)據(jù)服務(wù)器端可以對外服務(wù)的瓦片數(shù)據(jù)集的信息,用戶獲得了目錄服務(wù)以后,就可以知道數(shù)據(jù)服務(wù)端的服務(wù)內(nèi)容,可以更加準備的請求數(shù)據(jù),不容易出現(xiàn)請求不存在的情況。
另外目錄服務(wù)的作用還可以是面對程序的,這在上面客戶端請求流程中已經(jīng)提及到?;诜?wù)端數(shù)據(jù)的WebGIS應(yīng)用,必須首先要訪問目錄服務(wù),才知道數(shù)據(jù)服務(wù)器的地址,以及一些詳細信息,這對于客戶端的地圖可視化是非常重要的,也是必須的。
圖1 客戶端請求示意圖
圖2 目錄服務(wù)文檔的組織結(jié)構(gòu)圖
圖3 數(shù)據(jù)集節(jié)點的組織結(jié)構(gòu)圖
目錄服務(wù)的組織結(jié)構(gòu),如圖2。最外層是基礎(chǔ)地理數(shù)據(jù),包括:影像地理數(shù)據(jù)、地形地理數(shù)據(jù),矢量地理數(shù)據(jù)等。這里只涉及到矢量地理數(shù)據(jù),其他的幾類都已經(jīng)注釋了。矢量地理數(shù)據(jù)又是以圖層組(VectorGroup)的形式進行組織的,這樣使得同組的數(shù)據(jù)可以存放在一起,用戶獲得文檔以后也更加容易讀懂。其中文檔的屬性ExternalName表示數(shù)據(jù)集的對外服務(wù)名稱,Visible表示數(shù)據(jù)集的是否可見。
圖層組(VectorGroup)的下一級是數(shù)據(jù)集(VectorDataSet),這是存儲瓦片數(shù)據(jù)集信息的節(jié)點,存儲的詳細信息如圖3。
ExternalName:客戶端請求數(shù)據(jù)服務(wù)使用的名稱。
InternalName:在數(shù)據(jù)服務(wù)器端的真正訪問的名稱。
ServerUrl:q請求瓦片數(shù)據(jù)的基本路徑,包含數(shù)據(jù)服務(wù)器的地址和服務(wù)的名稱。
StartNumber:地圖數(shù)據(jù)對應(yīng)瓦片數(shù)據(jù)的起始層號。
EndNumber:地圖數(shù)據(jù)對應(yīng)瓦片數(shù)據(jù)的終止層號。
ZeroLevelTileSpan:瓦片數(shù)據(jù)第零層的經(jīng)緯度跨度。
Bound:瓦片數(shù)據(jù)源的地理坐標范圍,包含:North、South、East、West。
TransparentColor:瓦片數(shù)據(jù)的透明度,包含:Red、Green、Blue。
TerrainMapped:對應(yīng)的地形數(shù)據(jù),這里暫未使用。
WmsInfo:此數(shù)據(jù)源對應(yīng)的WMS請求的信息,包括請求字符串(Url)、請求的圖層名(LayerName)、地理元素的類型(ShapeType)等。
目錄服務(wù)的生成
目錄服務(wù)是在服務(wù)端生成瓦片以后,服務(wù)器端動態(tài)把新增加的瓦片的數(shù)據(jù)集注冊到目錄服務(wù)器,它是一個動態(tài)創(chuàng)建的過程。
第一步:由于目錄服務(wù)可能同時被多個線程訪問,所以必須加入互斥鎖。
Monitor.Enter(同步對象(通常為Object類型));
第二步:載入目錄服務(wù)器端的XML文檔,為注冊數(shù)據(jù)集準備。
doc.Load(目錄服務(wù)XMl文檔的URL);
第三步:創(chuàng)建XMl節(jié)點,并賦予其正確的值。
XmlElement 新節(jié)點對象= doc.CreateElement(“新節(jié)點的名字”);
新節(jié)點對象.InnerText = 新節(jié)點的內(nèi)容;
第四步:將所有創(chuàng)建的新節(jié)點,按照前面的目錄服務(wù)的結(jié)構(gòu)組織起來,最后添加到XML文檔中。
第五步:按原路徑保存XMl文檔,并且釋放排它鎖,以方便其他的線程使用目錄服務(wù)的XML文檔。
在以后對瓦片數(shù)據(jù)源的修改、刪除、添加過程中,都會對目錄服務(wù)進行更新,這樣的注冊動態(tài)更新機制有效保證了目錄服務(wù)的可靠性和完整性,用戶始終得到的是準備的、最新的目錄服務(wù)數(shù)據(jù),這樣才可以發(fā)揮目錄服務(wù)存在的價值和意義。
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,面對用戶更高的、全方面、更豐富的體驗要求,作為GIS行業(yè)非常重要的一個方向——WebGIS也在不斷的發(fā)展。但是遺憾的是傳統(tǒng)的Web技術(shù)的表現(xiàn)能力和交互能力始終制約著WebGIS的進一步發(fā)展,無法滿足用戶的需求。以流行的RIA技術(shù)Flex作為客戶端展現(xiàn)方式,創(chuàng)建一個以自己開發(fā)的地圖服務(wù)器和切片地圖服務(wù)為數(shù)據(jù)提供源,開發(fā)獨立的Flex為展現(xiàn)端的WebGIS應(yīng)用模型將成為WebGIS的一個發(fā)展方向。
10.3969/j.issn.1001-8972.2015.17.034