《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技术 > 业界动态 > 基于Ajax的WebGIS开发和应用研究

基于Ajax的WebGIS开发和应用研究

2008-12-08
作者:马维峰1,2, 王晓蕊1, 薛重

??? 摘? 要: 介紹了基于ArcIMS、結(jié)合服務(wù)器端動態(tài)緩存技術(shù)" title="服務(wù)器端動態(tài)緩存技術(shù)">服務(wù)器端動態(tài)緩存技術(shù),開發(fā)Ajax風(fēng)格的WebGIS系統(tǒng)的基本原理、系統(tǒng)結(jié)構(gòu)" title="系統(tǒng)結(jié)構(gòu)">系統(tǒng)結(jié)構(gòu)、關(guān)鍵技術(shù)和應(yīng)用實例。?

??? 關(guān)鍵詞: WebGIS; Ajax; 地圖切片; 服務(wù)器動態(tài)緩存; ArcIMS?

?

??? 目前基于瀏覽器應(yīng)用程序的開發(fā)技術(shù)中,Ajax(Asynchronous JavaScript and XML)無疑是最新的技術(shù),Ajax是基于Web Applications的瀏覽器的一種重要的開發(fā)模型。它使用了幾種技術(shù),這幾種技術(shù)整合在一起并且相互合同工作,以創(chuàng)建功能強大的新應(yīng)用。組成Ajax模型的有XML、JavaScript、HTTP和XHTML,這些技術(shù)都已為人們所熟悉并廣泛應(yīng)用,Google Map正是使用了這項技術(shù)。在Google Maps[1]推出之前,網(wǎng)絡(luò)地圖應(yīng)用傳統(tǒng)的WebGIS技術(shù),通過動態(tài)生成地圖圖片或者使用Java Applet、SVG來發(fā)布地圖[2],而Google Maps采用Ajax技術(shù)和地圖切片(Tile)的網(wǎng)絡(luò)地圖模式得到了廣泛認同,目前絕大多數(shù)網(wǎng)絡(luò)地圖服務(wù)都采用了類似此技術(shù)的方案[3]。通過Ajax技術(shù)和地圖切片可以有效地減輕網(wǎng)絡(luò)地圖服務(wù)器負荷,提高客戶端" title="客戶端">客戶端用戶體驗。因此,在WebGIS開發(fā)中應(yīng)用和集成Ajax技術(shù)具有重要的實用價值和現(xiàn)實意義。本文介紹的是基于傳統(tǒng)WebGIS系統(tǒng)ArcIMS,結(jié)合服務(wù)器端動態(tài)緩存技術(shù),開發(fā)類似Google Map風(fēng)格的WebGIS應(yīng)用系統(tǒng)的基本原理、關(guān)鍵技術(shù)和應(yīng)用實例。?

1 系統(tǒng)原理與結(jié)構(gòu)?

1.1 Ajax與WebGIS技術(shù)?

??? 基于Ajax的網(wǎng)絡(luò)地圖系統(tǒng)由二部分組成:(1)服務(wù)器端。通過地圖預(yù)渲染技術(shù)即通過對地圖分級、分塊渲染,建立柵格金字塔地圖數(shù)據(jù),通常稱為地圖切片技術(shù);(2)客戶端。當?shù)貓D窗口發(fā)生移動、縮放時,通過JavaScript應(yīng)用Ajax技術(shù)控制瀏覽器在后臺進程下載當前地圖分辨率和范圍需要的切片,并在下載完成后通過后臺進程填充于相應(yīng)位置,而不打斷用戶操作。由于該技術(shù)一方面充分利用了瀏覽器(如IE)的多線程下載功能;另一方面下載過的圖片在系統(tǒng)設(shè)置的時間范圍內(nèi)無需再次訪問服務(wù)器下載,有效利用了客戶端緩存,因此大大加快了客戶端數(shù)據(jù)下載和運行效率,降低了服務(wù)器負擔(dān)。對于一些動態(tài)內(nèi)容,例如點對象(POI)、線對象(道路),通常使用客戶端腳本技術(shù)(VML或者SVG)在瀏覽器端以矢量的方式繪制[4]。?

??? 與其他WebGIS系統(tǒng)不同,要實現(xiàn)以上的功能,瀏覽器客戶端相對復(fù)雜,需要應(yīng)用JavaScript代碼在瀏覽器以腳本方式來實現(xiàn)地圖瀏覽器,也可以使用基于Flash或者Java Applet的實現(xiàn)方案,其基本原理類似。隨著網(wǎng)絡(luò)地圖市場的升溫,目前出現(xiàn)了幾種基于地圖切片和Ajax技術(shù)的網(wǎng)絡(luò)地圖JavaScript類庫,比較著名的有MapEasy[5]、OpenLayer、kaMap等,應(yīng)用這些類庫,可以降低技術(shù)門檻,加快該類系統(tǒng)的開發(fā)。在服務(wù)器端,由于地圖數(shù)據(jù)是預(yù)先分級、分塊渲染的柵格金字塔數(shù)據(jù),因此,可以通過任何Web服務(wù)器來提供服務(wù)。?

1.2 系統(tǒng)結(jié)構(gòu)?

??? 本系統(tǒng)以ArcIMS和MapEasy類庫為基礎(chǔ)構(gòu)建,系統(tǒng)架構(gòu)示意圖如圖1所示。ArcIMS是ESRI公司的WebGIS發(fā)布系統(tǒng),可用于在Internet和Intranet上發(fā)布GIS數(shù)據(jù)。ArcIMS由Application Server Connectors、Application Serve和Spatial Server三部分組成。其中,Application Server Connectors主要用于連接Web Server和Application Server;Application Server用于維護Spatial Server的狀態(tài)及其與Web服務(wù)器的交互;Spatial Server是核心的地圖渲染器,根據(jù)Application Server的請求渲染地圖。MapEasy是由國內(nèi)開發(fā)者開發(fā)的、基于Ajax技術(shù)的網(wǎng)絡(luò)地圖JavaScript開源" title="開源">開源類庫,可以用來在瀏覽器端構(gòu)建類似Google Map風(fēng)格的網(wǎng)絡(luò)地圖;可以應(yīng)用服務(wù)器端的地圖切片數(shù)據(jù),在客戶端瀏覽器創(chuàng)建網(wǎng)絡(luò)地圖,并使用JavaScript增加標注信息(點信息);使用Apache開源協(xié)議[5]允許作為開源或者商業(yè)軟件的代碼修改、再發(fā)布,也就是說,使用者在需要的時候可以修改代碼以滿足要求并作為開源或商業(yè)產(chǎn)品的發(fā)布或銷售。?

?

?

??? 如圖 1所示,系統(tǒng)在客戶端使用MapEasy為核心構(gòu)建,在服務(wù)器端通過動態(tài)緩存服務(wù)來返回緩存中的地圖切片數(shù)據(jù),或者調(diào)用ArcIMS渲染空間數(shù)據(jù)為地圖切片。而在服務(wù)器端,MapEasy和一般的網(wǎng)絡(luò)地圖或WebGIS不同,通過類似lazy load機制,使用ArcIMS渲染地圖切片數(shù)據(jù),當相應(yīng)縮放比例和位置的地圖切片首次請求時才調(diào)用ArcIMS進行渲染,渲染結(jié)果以文件緩存形式存儲于服務(wù)器,客戶端如果再次請求同一塊地圖切片時,則可直接返回緩存中的地圖切片數(shù)據(jù)。由于地圖切片是動態(tài)緩存的,而不是類似大多數(shù)網(wǎng)絡(luò)地圖的預(yù)渲染機制,因此可以通過控制緩存來控制地圖數(shù)據(jù)動態(tài)更新和發(fā)布。例如系統(tǒng)地圖數(shù)據(jù)更新后,可以根據(jù)更新范圍,刪除緩存中的相應(yīng)數(shù)據(jù),客戶端再次請求該地圖時,得到的就是更新過的地圖數(shù)據(jù)。?

1.3 數(shù)據(jù)組織與服務(wù)器和客戶端交互?

??? 在瀏覽器客戶端,應(yīng)用MapEasy類庫添加地圖的JavaScript代碼如下:?

??? function IMSMapType( ) {?

??? ??? MapType.apply(this);?

??? ??? this.getSrc = function(level, row, column) {?

??? ? ????? return 'http://localhost/ims/?d=test&z='+level+'&x='+column+'&y='+row?

??????? }?

??? }?

??? MapModel.mapTypes = new Array(new IMSMapType());?

??? MapModel.maxZoomLevel=10?

??? 以上代碼最關(guān)鍵之處是第4行的語句,該語句調(diào)用服務(wù)器端緩存服務(wù),返回地圖切片數(shù)據(jù),其中有4個參數(shù):表示緩存服務(wù)的數(shù)據(jù)集d,表示當前的縮放級數(shù)z,表示切片的行列x、y。MapEasy兼容的數(shù)據(jù)切片方案采用四叉樹切分和哈希格網(wǎng)索引算法[6],即第一級為1幅圖片,第二級分為4幅圖片,第三級則劃分為16幅圖片,如圖 2所示。對于每個切片,根據(jù)其在切片中的行列和級數(shù),就可以反算相應(yīng)的經(jīng)緯度范圍;反之,通過經(jīng)緯度也可以計算某個分辨率下切片的行列數(shù),例如,根據(jù)切片行列索引計算地理坐標的計算公式為:?

??? 切片XMin=Mapwidth/(2^(z-1))*x+MapXMin?

??? 切片YMin=Mapwidth/(2^(z-1))*(2^(z-1)-y-1)+MapYMin ?

??? 切片XMax=切片XMin+MapWidth/(2^(z-1))?? ?

??? 切片YMax=切片YMin+MapWidth/(2^(z-1)) ? ?

式中,x、y代表切片的行列索引;z代表縮放級數(shù),最小(第1級)為1。?

?

?

1.4 系統(tǒng)流程?

??? 服務(wù)器動態(tài)緩存服務(wù)地圖切片渲染的基本流程如圖 3所示。首先根據(jù)圖片的位置參數(shù)和數(shù)據(jù)集,構(gòu)建圖片文件名和路徑名,判斷該文件是否在緩存中存在,如果存在,則返回,其程序的執(zhí)行流程為:1、2、3、7;如果圖片在緩存中不存在,則調(diào)用ArcIMS渲染并保存圖片,其程序的執(zhí)行流程為:1、2、4、5、6、7。所以,每個縮放比例的圖片在ArcIMS中只渲染一遍。?

?

?

2 系統(tǒng)開發(fā)" title="系統(tǒng)開發(fā)">系統(tǒng)開發(fā)與應(yīng)用實例?

??? 在中國東部地質(zhì)與地球化學(xué)數(shù)據(jù)庫系統(tǒng)中,使用了基于服務(wù)器動態(tài)緩存和Ajax技術(shù)的WebGIS技術(shù),該系統(tǒng)基于Microsoft .net 2.0平臺,開發(fā)語言為C#,服務(wù)器運行環(huán)境為:Microsoft Windows Server 2003、IIS、ArcIMS、SQL Server,客戶端可以為任意的Web瀏覽器。通過使用服務(wù)器動態(tài)緩存和Ajax技術(shù),在普通PC機服務(wù)器上,即可支持較大并發(fā)用戶訪問,與單純使用ArcIMS技術(shù)進行WebGIS開發(fā)相比,大大提高了服務(wù)器運行效率,降低了服務(wù)器負荷。圖 4為系統(tǒng)的運行界面,其中左圖為查詢界面,右圖為查詢結(jié)果,結(jié)果數(shù)據(jù)的空間位置可以通過標注的形式顯示在地圖上。?

?

?

??? 本文介紹了基于傳統(tǒng)WebGIS系統(tǒng)ArcIMS、結(jié)合服務(wù)器端動態(tài)緩存技術(shù),開發(fā)Google Map風(fēng)格的WebGIS系統(tǒng)的基本原理、技術(shù)路線和關(guān)鍵技術(shù)。該技術(shù)應(yīng)用于中國東部地質(zhì)與地球化學(xué)數(shù)據(jù)庫系統(tǒng)開發(fā),取得了良好的效果?;诜?wù)器動態(tài)緩存技術(shù),在WebGIS開發(fā)中應(yīng)用和集成Ajax技術(shù)和地圖切片技術(shù)具有重要的實用價值和現(xiàn)實意義。

參考文獻
[1] Google Map, http://maps.google.com.2006-03-10.
[2] 宋關(guān)福,鐘耳順. WebGIS——基于Internet的地理信息系統(tǒng). 中國圖像圖形學(xué)報,1998,(3):251-254.
[3] Google與網(wǎng)絡(luò)地圖雜談. http://www.3snews.net/index.php/2899/action_viewspace_itemid_1720.html.2007-03-27.
[4] 黃穎,謝忠,鐘士彬.NET和VML及腳本技術(shù)在WebGIS系統(tǒng)地圖文檔顯示中的應(yīng)用. 測繪科學(xué),2006,31(4).
[5] MapEasy, http://mapeasy.sourceforge.net/.2007-01-12.
[6] 郭薇,郭菁,胡志勇.空間數(shù)據(jù)庫索引技術(shù). 上海:上海交通大學(xué)出版社,2006.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。