王曉醉
(武漢大學(xué)測(cè)繪學(xué)院,湖北武漢 430072)
基于Ajax和ArcEngine的WebGIS系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
王曉醉?
(武漢大學(xué)測(cè)繪學(xué)院,湖北武漢 430072)
介紹了基于傳統(tǒng)WebGIS系統(tǒng),結(jié)合緩存切片技術(shù),開發(fā)類似GoogleMap風(fēng)格的WebGIS應(yīng)用系統(tǒng)的基本原理、關(guān)鍵技術(shù)和應(yīng)用實(shí)例。該WebGIS系統(tǒng)采用切片技術(shù)對(duì)地圖進(jìn)行切片,存放在服務(wù)器上,在前臺(tái)通過(guò)Ajax技術(shù)實(shí)現(xiàn)地圖顯示和操作,提高了響應(yīng)速度。并能進(jìn)行興趣點(diǎn)的標(biāo)注。
WebGIS;Ajax;ArcEngine;切片技術(shù)
WebGIS是Internet技術(shù)應(yīng)用于GIS開發(fā)的產(chǎn)物,是實(shí)現(xiàn)GIS互操作的一條最佳途徑。從Internet的任意節(jié)點(diǎn),用戶都可以瀏覽WebGIS站點(diǎn)中的地圖文檔,制作專題圖,進(jìn)行各種空間信息的檢索和分析[1]。
圖1 WebGIS服務(wù)請(qǐng)求工作原理
以往傳統(tǒng)的WebGIS系統(tǒng),往往使用同步傳輸?shù)臋C(jī)制來(lái)實(shí)現(xiàn)交互,面對(duì)大流量數(shù)據(jù)時(shí),往往使得系統(tǒng)的響應(yīng)速度變得很慢。而Ajax技術(shù)的最大特點(diǎn)就是異步傳輸,通過(guò)Ajax引擎能夠很好地實(shí)現(xiàn)客戶端和服務(wù)器之間的請(qǐng)求、應(yīng)答機(jī)制,減輕服務(wù)器的負(fù)荷,平衡服務(wù)器和客戶端的負(fù)載。而利用ArcEngine進(jìn)行開發(fā),具有靈活,方便的特點(diǎn),也能有效提高切片速度。
地圖文檔的顯示貫穿于整個(gè)WebGlS站點(diǎn)操作的始終,其操作方式和使用技術(shù)決定了整個(gè)WebGlS站點(diǎn)的效率,是WebGIS系統(tǒng)的核心。使用Ajax技術(shù),是WebGIS發(fā)展的必然趨勢(shì)。本文利用Ajax和ArcEngine技術(shù),實(shí)現(xiàn)開發(fā)了一個(gè)類似GoogleMap的WebGIS系統(tǒng),提高了數(shù)據(jù)的響應(yīng)速度,減少用戶等待時(shí)間。
Ajax是Asynchronous JavaScript and XML(異步的JavaScript和XML)的簡(jiǎn)稱[2]。嚴(yán)格地講,Ajax不是一個(gè)技術(shù),它實(shí)際上是幾種技術(shù)的集合,每種技術(shù)都有其獨(dú)特之處,合在一起就成了功能強(qiáng)大的 Ajax技術(shù)。Ajax技術(shù)包括:
(1)使用基于XHTML和CSS標(biāo)準(zhǔn)的表示方法;
(2)使用Document Object Model(DOM)進(jìn)行動(dòng)態(tài)顯示和交互;
(3)使用XML和XSLT進(jìn)行數(shù)據(jù)交換和操作;
(4)使用XMLHttpRequest與服務(wù)器進(jìn)行異步通信;
(5)使用JavaScript綁定以上技術(shù)。
使用Ajax技術(shù)開發(fā)WebGIS程序減輕了服務(wù)器的負(fù)擔(dān);無(wú)刷新更新頁(yè)面;減少用戶實(shí)際和心理等待時(shí)間;可以把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端;使Web中的數(shù)據(jù)與呈現(xiàn)分離。圖2為Ajax工作機(jī)制。
圖2 Ajax工作機(jī)制
2004年,美國(guó) ESRI發(fā)布 ArcGIS Engine,ArcGIS Engine開發(fā)包提供了一系列可以在ArcGIS Desktop框架之外使用的 GIS組件,ArcEngine包括核心 ArcObjects的功能,是對(duì)AO中的大部分接口、類等進(jìn)行封裝所構(gòu)成的嵌入式組件。AE中的組件接口、方法、屬性與AO是相同的。但 ArcObjects必須依賴 ArcGIS Desktop桌面平臺(tái),即購(gòu)買安裝了ArcGIS Desktop的同時(shí),安裝ArcObjects,才能利用AO進(jìn)行開發(fā);ArcEngine是獨(dú)立的嵌入式組件,不依賴ArcGIS Desktop桌面平臺(tái),直接安裝ArcEngine Runtime和Developer Kit后,即可利用其在不同開發(fā)語(yǔ)言環(huán)境下開發(fā)。ArcEngine具有簡(jiǎn)潔、靈活、易用、可移植性強(qiáng)等的特點(diǎn)。故本系統(tǒng)中使用ArcEngine進(jìn)行開發(fā)。
3.1 Ajax框架的選擇和系統(tǒng)架構(gòu)
目前有眾多的免費(fèi)的Ajax框架可供選擇,例如Protptype、Scriptacu-lous、Dojo、DWR、Ajax.net、Altas等等[4]。本系統(tǒng)主要選擇使用了 Protptype框架的MapEasy作為客戶端的核心。MapEasy是由國(guó)內(nèi)開發(fā)者開發(fā)的,基于 Ajax技術(shù)的網(wǎng)絡(luò)地圖 JavaScript開源類庫(kù),可以用于在瀏覽器端構(gòu)建類似GoogleMap風(fēng)格的網(wǎng)絡(luò)地圖應(yīng)用。MapEasy可以應(yīng)用服務(wù)器端的地圖切片數(shù)據(jù),在客戶端瀏覽器創(chuàng)建網(wǎng)絡(luò)地圖,并使用JavaScript增加標(biāo)注信息(點(diǎn)信息)。MapEasy使用 A-pache開源協(xié)議,允許作為開源或者商業(yè)軟件的代碼修改,再發(fā)布,也就是說(shuō),使用者可以在需要的時(shí)候修改代碼來(lái)滿足需要并作為開源或商業(yè)產(chǎn)品發(fā)布或銷售。
本文設(shè)計(jì)的WebGIS系統(tǒng)為3層結(jié)構(gòu):客戶層、中間層和數(shù)據(jù)層,如圖3所示。
圖3 WebGIS系統(tǒng)3層結(jié)構(gòu)
客戶層:直接為使用者提供可視界面??蛻魧舆€包括了Ajax引擎。Ajax是完完全全的客戶端技術(shù),很多控件封裝了客戶端和服務(wù)器端的通信過(guò)程,服務(wù)器端都是返回的一個(gè)純文本流,再由客戶端來(lái)處理這個(gè)文本,這段文本可以是xml格式,也可以是一個(gè)html格式。
中間層:提供 Web服務(wù)。提供對(duì) Microsoft SQL Server等數(shù)據(jù)源以及通過(guò)OLE DB和XML公開的數(shù)據(jù)源的一致訪問(wèn)。
數(shù)據(jù)源層:Sql server數(shù)據(jù)庫(kù),存儲(chǔ)空間數(shù)據(jù)及屬性數(shù)據(jù)。還包括GIS工具處理的地圖資源,該資源以文件的形式存在于服務(wù)器上。
3.2 地圖切片數(shù)據(jù)組織與客戶端
在WebGIS體系的實(shí)現(xiàn)中,切片技術(shù)是核心技術(shù)之一。一般的WebGIS體系會(huì)選用帶有切片程序的地圖服務(wù)器(如 GeoServer)或者地圖發(fā)布軟件(如 ArcIMS)。筆者在本系統(tǒng)中采用的是自己基于ArcEngine編寫切片程序,使之符合MapEasy的命名規(guī)則,然后再使用Web Server(如IIS)調(diào)用切片,實(shí)現(xiàn)圖片顯示。其總體調(diào)用過(guò)程如圖4所示。
如圖4所示,系統(tǒng)在客戶端使用MapEasy為核心構(gòu)建,在服務(wù)器端通過(guò)Internet信息服務(wù),調(diào)用切片程序,返回地圖切片數(shù)據(jù)。
圖4 切片程序調(diào)用過(guò)程
地圖切片的原理一般是瓦片金字塔模型,其核心思想是分層和分塊:原始數(shù)據(jù)按不同分辨率重采樣產(chǎn)生層;同一層數(shù)據(jù)按指定的格網(wǎng)大小均勻剖分即得瓦片,如圖5所示。
圖5 瓦片金字塔模型
筆者在實(shí)現(xiàn)地圖切片的過(guò)程中,編寫基于 ArcEngine的切片程序。其中心思想如下:在地圖調(diào)入的過(guò)程中讀取其左下角和右上角的經(jīng)緯度值,然后根據(jù)經(jīng)緯度進(jìn)行切割。在切割的過(guò)程中采取分層的思想。對(duì)第0層的切片,定義一個(gè)變量ZERO_GRID來(lái)定義切片的大小。在本程序中,0層每個(gè)正方形切片的大小均為2.25°。隨著切片層數(shù)的增加,切片大小遞減,其大小為ZERO_GRID/2k。
切片程序的核心代碼如下:
切好的圖片將被發(fā)布在IIS上。
為了在瀏覽器客戶端實(shí)現(xiàn)顯示,筆者在瀏覽器客戶端,應(yīng)用MapEasy類庫(kù)添加地圖的JavaScript代碼為:
以上代碼最關(guān)鍵的是最后一句。其中有3個(gè)參數(shù),level代表縮放級(jí)別,row代表行,column代表列。在MapEasy中row表示瓦片(tile)所在的行數(shù)、column表示瓦片所在的列數(shù)而level表示地圖縮放的級(jí)別。MapEasy兼容的數(shù)據(jù)切片方案采用四叉樹切分和哈希格網(wǎng)索引算法,即第一級(jí)為 1幅圖片,第二級(jí)分為4幅,第三級(jí)則劃分為16幅,這和我們編寫的地圖切片算法切出的圖片是一致的,從而保證了MapEasy能順利讀取各級(jí)圖片。
筆者采用Mircosoft.Net 2.0開發(fā)平臺(tái)進(jìn)行開發(fā),開發(fā)語(yǔ)言為C#;服務(wù)器運(yùn)行環(huán)境為:Microsoft Windows XP sp2,IIS,SQL Server 2005;客戶端可以為任意的Web瀏覽器。通過(guò)使用緩存切片和Ajax技術(shù),在普通PC服務(wù)器上,實(shí)現(xiàn)了對(duì)地圖快速的訪問(wèn)。在瀏覽器的地圖窗口建立兩個(gè)功能模塊:地圖顯示模塊和地圖查詢模塊。地圖顯示模塊主要是負(fù)責(zé)顯示用戶指定區(qū)域,并且具有一定比例的柵格地圖,實(shí)現(xiàn)了放大、縮小、漫游、平移、拉框、清除等基本的地圖功能。圖6為系統(tǒng)的運(yùn)行界面,其中左圖為查詢界面之一,右圖為添加興趣點(diǎn)的結(jié)果,結(jié)果數(shù)據(jù)的空間位置可以通過(guò)標(biāo)注的形式顯示在地圖之上。
圖6 系統(tǒng)運(yùn)行界面
本文中筆者用ArcEngine和Ajax技術(shù)仿照Google Map實(shí)現(xiàn)了一個(gè)簡(jiǎn)單WebGIS系統(tǒng)的設(shè)計(jì)和發(fā)布,實(shí)現(xiàn)了地圖的瀏覽,放大,縮小等功能,實(shí)現(xiàn)了地圖切片程序的編寫,并能使用Ajax技術(shù)在前臺(tái)讀取地圖切片,能實(shí)現(xiàn)興趣點(diǎn)的標(biāo)注等。Ajax技術(shù)的使用,實(shí)現(xiàn)了地圖數(shù)據(jù)交互的加快,減少了用戶等待時(shí)間;應(yīng)用ArcEngine進(jìn)行地圖切片,比直接在AO上開發(fā)靈活方便,切片速度也有提高。但在地圖分析的方面,還有很多需要加強(qiáng),比如沒有緩沖區(qū)分析等功能等。今后筆者將繼續(xù)從事這方面的研究,努力使該系統(tǒng)的功能更加完善。
[1]MapEasy[EB/OL].http://mapeasy.sourceforge.net
[2]黃穎,謝忠,鐘士彬..NET和VML及腳本技術(shù)在WebGIS系統(tǒng)地圖文檔顯示中的應(yīng)用[J].測(cè)繪科學(xué),2006,31(4)
[3]徐卓揆,劉德欽,林宗堅(jiān).基于WebGIS的動(dòng)態(tài)專題地圖發(fā)布技術(shù)研究[J].測(cè)繪科學(xué),2006,31(3)
[4]徐卓揆,劉德欽,林宗堅(jiān).Ajax技術(shù)在WebGIS中的應(yīng)用[J].測(cè)繪信息與工程,2007,32(1):3~5
The Development and Design of WebGIS Based on Ajax and ArcEngine
Wang XiaoZui
(School of Geodesy and Geomatic,Wuhan University,Wuhan 430072,China)
This paper introduces the development of similar style GoogleMap of WebGIS application system's basic principles,key technologies and applications,based on traditional WebGIS-based systems,combined with the tile cache technology.The system uses WebGIS tile cache technology to slice the map,stored the pictures in the server,and use the Ajax technology to display and operate maps.It can also mark the POI(Point of Interest)on the maps.
WebGIS;Ajax;ArcEngine;tile cache
1672-8262(2010)03-32-03
P208
B
2010—01—03
王曉醉(1986—),女,碩士研究生,專業(yè)方向地理信息系統(tǒng)。