??? 摘? 要: 介紹了基于ArcIMS、結(jié)合服務(wù)器端動(dòng)態(tài)緩存技術(shù)" title="服務(wù)器端動(dòng)態(tài)緩存技術(shù)">服務(wù)器端動(dòng)態(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)用實(shí)例。?
??? 關(guān)鍵詞: WebGIS; Ajax; 地圖切片; 服務(wù)器動(dòng)態(tài)緩存; ArcIMS?
?
??? 目前基于瀏覽器應(yīng)用程序的開發(fā)技術(shù)中,Ajax(Asynchronous JavaScript and XML)無(wú)疑是最新的技術(shù),Ajax是基于Web Applications的瀏覽器的一種重要的開發(fā)模型。它使用了幾種技術(shù),這幾種技術(shù)整合在一起并且相互合同工作,以創(chuàng)建功能強(qiáng)大的新應(yīng)用。組成Ajax模型的有XML、JavaScript、HTTP和XHTML,這些技術(shù)都已為人們所熟悉并廣泛應(yīng)用,Google Map正是使用了這項(xiàng)技術(shù)。在Google Maps[1]推出之前,網(wǎng)絡(luò)地圖應(yīng)用傳統(tǒng)的WebGIS技術(shù),通過(guò)動(dòng)態(tài)生成地圖圖片或者使用Java Applet、SVG來(lái)發(fā)布地圖[2],而Google Maps采用Ajax技術(shù)和地圖切片(Tile)的網(wǎng)絡(luò)地圖模式得到了廣泛認(rèn)同,目前絕大多數(shù)網(wǎng)絡(luò)地圖服務(wù)都采用了類似此技術(shù)的方案[3]。通過(guò)Ajax技術(shù)和地圖切片可以有效地減輕網(wǎng)絡(luò)地圖服務(wù)器負(fù)荷,提高客戶端" title="客戶端">客戶端用戶體驗(yàn)。因此,在WebGIS開發(fā)中應(yīng)用和集成Ajax技術(shù)具有重要的實(shí)用價(jià)值和現(xiàn)實(shí)意義。本文介紹的是基于傳統(tǒng)WebGIS系統(tǒng)ArcIMS,結(jié)合服務(wù)器端動(dòng)態(tài)緩存技術(shù),開發(fā)類似Google Map風(fēng)格的WebGIS應(yīng)用系統(tǒng)的基本原理、關(guān)鍵技術(shù)和應(yīng)用實(shí)例。?
1 系統(tǒng)原理與結(jié)構(gòu)?
1.1 Ajax與WebGIS技術(shù)?
??? 基于Ajax的網(wǎng)絡(luò)地圖系統(tǒng)由二部分組成:(1)服務(wù)器端。通過(guò)地圖預(yù)渲染技術(shù)即通過(guò)對(duì)地圖分級(jí)、分塊渲染,建立柵格金字塔地圖數(shù)據(jù),通常稱為地圖切片技術(shù);(2)客戶端。當(dāng)?shù)貓D窗口發(fā)生移動(dòng)、縮放時(shí),通過(guò)JavaScript應(yīng)用Ajax技術(shù)控制瀏覽器在后臺(tái)進(jìn)程下載當(dāng)前地圖分辨率和范圍需要的切片,并在下載完成后通過(guò)后臺(tái)進(jìn)程填充于相應(yīng)位置,而不打斷用戶操作。由于該技術(shù)一方面充分利用了瀏覽器(如IE)的多線程下載功能;另一方面下載過(guò)的圖片在系統(tǒng)設(shè)置的時(shí)間范圍內(nèi)無(wú)需再次訪問(wèn)服務(wù)器下載,有效利用了客戶端緩存,因此大大加快了客戶端數(shù)據(jù)下載和運(yùn)行效率,降低了服務(wù)器負(fù)擔(dān)。對(duì)于一些動(dòng)態(tài)內(nèi)容,例如點(diǎn)對(duì)象(POI)、線對(duì)象(道路),通常使用客戶端腳本技術(shù)(VML或者SVG)在瀏覽器端以矢量的方式繪制[4]。?
??? 與其他WebGIS系統(tǒng)不同,要實(shí)現(xiàn)以上的功能,瀏覽器客戶端相對(duì)復(fù)雜,需要應(yīng)用JavaScript代碼在瀏覽器以腳本方式來(lái)實(shí)現(xiàn)地圖瀏覽器,也可以使用基于Flash或者Java Applet的實(shí)現(xiàn)方案,其基本原理類似。隨著網(wǎng)絡(luò)地圖市場(chǎng)的升溫,目前出現(xiàn)了幾種基于地圖切片和Ajax技術(shù)的網(wǎng)絡(luò)地圖JavaScript類庫(kù),比較著名的有MapEasy[5]、OpenLayer、kaMap等,應(yīng)用這些類庫(kù),可以降低技術(shù)門檻,加快該類系統(tǒng)的開發(fā)。在服務(wù)器端,由于地圖數(shù)據(jù)是預(yù)先分級(jí)、分塊渲染的柵格金字塔數(shù)據(jù),因此,可以通過(guò)任何Web服務(wù)器來(lái)提供服務(wù)。?
1.2 系統(tǒng)結(jié)構(gòu)?
??? 本系統(tǒng)以ArcIMS和MapEasy類庫(kù)為基礎(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用于維護(hù)Spatial Server的狀態(tài)及其與Web服務(wù)器的交互;Spatial Server是核心的地圖渲染器,根據(jù)Application Server的請(qǐng)求渲染地圖。MapEasy是由國(guó)內(nèi)開發(fā)者開發(fā)的、基于Ajax技術(shù)的網(wǎng)絡(luò)地圖JavaScript開源" title="開源">開源類庫(kù),可以用來(lái)在瀏覽器端構(gòu)建類似Google Map風(fēng)格的網(wǎng)絡(luò)地圖;可以應(yīng)用服務(wù)器端的地圖切片數(shù)據(jù),在客戶端瀏覽器創(chuàng)建網(wǎng)絡(luò)地圖,并使用JavaScript增加標(biāo)注信息(點(diǎn)信息);使用Apache開源協(xié)議[5]允許作為開源或者商業(yè)軟件的代碼修改、再發(fā)布,也就是說(shuō),使用者在需要的時(shí)候可以修改代碼以滿足要求并作為開源或商業(yè)產(chǎn)品的發(fā)布或銷售。?
?

?
??? 如圖 1所示,系統(tǒng)在客戶端使用MapEasy為核心構(gòu)建,在服務(wù)器端通過(guò)動(dòng)態(tài)緩存服務(wù)來(lái)返回緩存中的地圖切片數(shù)據(jù),或者調(diào)用ArcIMS渲染空間數(shù)據(jù)為地圖切片。而在服務(wù)器端,MapEasy和一般的網(wǎng)絡(luò)地圖或WebGIS不同,通過(guò)類似lazy load機(jī)制,使用ArcIMS渲染地圖切片數(shù)據(jù),當(dāng)相應(yīng)縮放比例和位置的地圖切片首次請(qǐng)求時(shí)才調(diào)用ArcIMS進(jìn)行渲染,渲染結(jié)果以文件緩存形式存儲(chǔ)于服務(wù)器,客戶端如果再次請(qǐng)求同一塊地圖切片時(shí),則可直接返回緩存中的地圖切片數(shù)據(jù)。由于地圖切片是動(dòng)態(tài)緩存的,而不是類似大多數(shù)網(wǎng)絡(luò)地圖的預(yù)渲染機(jī)制,因此可以通過(guò)控制緩存來(lái)控制地圖數(shù)據(jù)動(dòng)態(tài)更新和發(fā)布。例如系統(tǒng)地圖數(shù)據(jù)更新后,可以根據(jù)更新范圍,刪除緩存中的相應(yīng)數(shù)據(jù),客戶端再次請(qǐng)求該地圖時(shí),得到的就是更新過(guò)的地圖數(shù)據(jù)。?
1.3 數(shù)據(jù)組織與服務(wù)器和客戶端交互?
??? 在瀏覽器客戶端,應(yīng)用MapEasy類庫(kù)添加地圖的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行的語(yǔ)句,該語(yǔ)句調(diào)用服務(wù)器端緩存服務(wù),返回地圖切片數(shù)據(jù),其中有4個(gè)參數(shù):表示緩存服務(wù)的數(shù)據(jù)集d,表示當(dāng)前的縮放級(jí)數(shù)z,表示切片的行列x、y。MapEasy兼容的數(shù)據(jù)切片方案采用四叉樹切分和哈希格網(wǎng)索引算法[6],即第一級(jí)為1幅圖片,第二級(jí)分為4幅圖片,第三級(jí)則劃分為16幅圖片,如圖 2所示。對(duì)于每個(gè)切片,根據(jù)其在切片中的行列和級(jí)數(shù),就可以反算相應(yīng)的經(jīng)緯度范圍;反之,通過(guò)經(jīng)緯度也可以計(jì)算某個(gè)分辨率下切片的行列數(shù),例如,根據(jù)切片行列索引計(jì)算地理坐標(biāo)的計(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代表縮放級(jí)數(shù),最小(第1級(jí))為1。?
?

?
1.4 系統(tǒng)流程?
??? 服務(wù)器動(dòng)態(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。所以,每個(gè)縮放比例的圖片在ArcIMS中只渲染一遍。?
?

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

?
??? 本文介紹了基于傳統(tǒng)WebGIS系統(tǒng)ArcIMS、結(jié)合服務(wù)器端動(dòng)態(tài)緩存技術(shù),開發(fā)Google Map風(fēng)格的WebGIS系統(tǒng)的基本原理、技術(shù)路線和關(guān)鍵技術(shù)。該技術(shù)應(yīng)用于中國(guó)東部地質(zhì)與地球化學(xué)數(shù)據(jù)庫(kù)系統(tǒng)開發(fā),取得了良好的效果。基于服務(wù)器動(dòng)態(tài)緩存技術(shù),在WebGIS開發(fā)中應(yīng)用和集成Ajax技術(shù)和地圖切片技術(shù)具有重要的實(shí)用價(jià)值和現(xiàn)實(shí)意義。
參考文獻(xiàn)
[1] Google Map, http://maps.google.com.2006-03-10.
[2] 宋關(guān)福,鐘耳順. WebGIS——基于Internet的地理信息系統(tǒng). 中國(guó)圖像圖形學(xué)報(bào),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)用. 測(cè)繪科學(xué),2006,31(4).
[5] MapEasy, http://mapeasy.sourceforge.net/.2007-01-12.
[6] 郭薇,郭菁,胡志勇.空間數(shù)據(jù)庫(kù)索引技術(shù). 上海:上海交通大學(xué)出版社,2006.
