<轉(zhuǎn)>
現(xiàn)在越來(lái)越多的桌面應(yīng)用轉(zhuǎn)向Web平臺(tái),而人們也一直希望日益豐富的Web應(yīng)用能夠做到簡(jiǎn)單易用、高效并具有良好的交互性能。隨著Google推出Google Maps、GMail等一系列服務(wù)讓人們看到了曙光,感受到一種全新的Web使用體驗(yàn)。這種體驗(yàn)的顯著特點(diǎn)就是無(wú)需下載、安裝,操作響應(yīng)速度快,具有良好的互動(dòng)性,尤其是再也沒(méi)有出現(xiàn)以往那種在等待返回結(jié)果期間由于瀏覽器刷新而造成的白屏現(xiàn)象。
這種令人欣喜的體驗(yàn)源自服務(wù)中所采用的Ajax方法。Ajax(Asynchronous JavaScript + XML)并不是一種新的技術(shù)。正如它的名字所表現(xiàn)的那樣,Ajax是由幾種蓬勃發(fā)展的技術(shù)以新的方式組合而成:使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)傳輸;利用XML和XSLT技術(shù)進(jìn)行數(shù)據(jù)的交換與處理;以XHTML和CSS作為顯示標(biāo)準(zhǔn),通過(guò)DOM實(shí)現(xiàn)動(dòng)態(tài)顯示和交互;而這一切都通過(guò)JavaScript串聯(lián)銜接起來(lái)。正是這些傳統(tǒng)技術(shù)看似簡(jiǎn)單的重組卻給Web應(yīng)用開(kāi)發(fā)帶來(lái)新的活力。
對(duì)于WebGIS而言,這種良好的用戶體驗(yàn)是其應(yīng)用一直缺乏的,研究與開(kāi)發(fā)人員總是難以在性能和使用體驗(yàn)之間找到合適的平衡點(diǎn)。針對(duì)這個(gè)問(wèn)題,本文探討了Ajax方法在WebGIS客戶端實(shí)現(xiàn)中的應(yīng)用,以期改善用戶體驗(yàn)。
AJAX客戶端分析
傳統(tǒng)客戶端分析
經(jīng)過(guò)多年的發(fā)展,WebGIS的系統(tǒng)架構(gòu)已趨于成熟穩(wěn)定,通常采用三層B/S(Browser/Server)結(jié)構(gòu),即由瀏覽器、GIS應(yīng)用服務(wù)器、空間數(shù)據(jù)庫(kù)等三部分構(gòu)成。其中,瀏覽器對(duì)應(yīng)于傳統(tǒng)C/S(Client/Server)結(jié)構(gòu)中的客戶端。
客戶端是聯(lián)系用戶與GIS服務(wù)的橋梁,作用重大,但先天受制于瀏覽器,后天則深受系統(tǒng)所采用開(kāi)發(fā)技術(shù)的影響。初期的WebGIS采用CGI方式,交互操作完全依賴(lài)瀏覽器處理,用戶體驗(yàn)很差,經(jīng)常遇到白屏狀況。研究人員隨即引入Plug-In技術(shù)擴(kuò)展瀏覽器的GIS 功 能,但收效并不顯著。而隨著Java、DCOM 等技術(shù)的大規(guī)模應(yīng)用,主流GIS廠商紛紛采用Applet、ActiveX等技術(shù)開(kāi)發(fā)客戶端。它們嵌入網(wǎng)頁(yè)運(yùn)行,功能較強(qiáng),但與服務(wù)端耦合度高,初次使用前還要下載并安裝相應(yīng)程序。不同之處在于:Applet可以跨平臺(tái)運(yùn)行,前提是有Java運(yùn)行環(huán)境的支持;而ActiveX只適用于Windows平臺(tái),安裝時(shí)還需安全認(rèn)證與注冊(cè)。這些額外的要求對(duì)普通用戶是種負(fù)擔(dān)。因而,除Applet與ActiveX外,ArcIMS等商業(yè)WebGIS軟件同時(shí)提供了基于JavaScript和DHTML等技術(shù)的客戶端實(shí)現(xiàn)。雖然簡(jiǎn)便,但效果不甚理想,用戶常陷入等待之中。
此外,WebGIS所采用的空間數(shù)據(jù)傳輸模式對(duì)客戶端的開(kāi)發(fā)也有較大影響,一直存在著矢柵數(shù)據(jù)之爭(zhēng)。地圖可在服務(wù)器端完成處理與繪制,以JPG等圖像形式通過(guò)HTTP協(xié)議傳輸給客戶端。這種柵格地圖是靜態(tài)的,缺乏交互性,傳輸占用網(wǎng)絡(luò)帶寬大,但可直接通過(guò)瀏覽器查看,客戶端功能因而比較簡(jiǎn)單而對(duì)服務(wù)器的要求高。相關(guān)工作也可部分移至客戶端完成,Applet和ActiveX方式中常采用。矢量數(shù)據(jù)通?;赥CP/IP協(xié)議傳輸,由于數(shù)據(jù)量相對(duì)較小,所以速度快。這種客戶端在本地繪制地圖,可以實(shí)現(xiàn)即時(shí)互動(dòng),甚至完成一些較復(fù)雜的分析工作。權(quán)衡利弊,開(kāi)發(fā)人員不得不在客戶端和服務(wù)端之間進(jìn)行平衡,或采用胖客戶端模式,或是瘦客戶端模式,抑或是混合模式。
隨著OGC(Open GIS Consortium)共享標(biāo)準(zhǔn)的出臺(tái)與不斷完善,WebGIS逐步向著信息共享的方向發(fā)展:矢量數(shù)據(jù)統(tǒng)一采用GML作為交換格式,可以和柵格數(shù)據(jù)一樣通過(guò)HTTP協(xié)議進(jìn)行傳輸;所提供的服務(wù)也逐步細(xì)化、標(biāo)準(zhǔn)化。只要遵循OGC各類(lèi)服務(wù)規(guī)范即可在異構(gòu)環(huán)境下完成相關(guān)空間數(shù)據(jù)處理任務(wù),降低了服務(wù)端與客戶端的耦合度。這些變化對(duì)基于瀏覽器的客戶端提出了新的要求,同時(shí)也帶了機(jī)遇。
Ajax模型
傳統(tǒng)Web應(yīng)用模型的運(yùn)行流程為:用戶的操作觸發(fā)提交給Web服務(wù)器的HTTP請(qǐng)求,服務(wù)器接到請(qǐng)求后執(zhí)行相應(yīng)操作,然后返回一個(gè)HTML頁(yè)面給客戶端。這個(gè)過(guò)程不斷重復(fù)直到用戶退出。整個(gè)過(guò)程是同步的,前一步結(jié)束才能進(jìn)入下一環(huán)節(jié),因而導(dǎo)致用戶在發(fā)出請(qǐng)求后,得到返回結(jié)果前的這段時(shí)間里一直處于等待狀態(tài)。瀏覽器同樣因?yàn)榈却鵁o(wú)法響應(yīng)用戶的進(jìn)一步操作,并由于頁(yè)面刷新引發(fā)白屏現(xiàn)象。
Ajax模型與傳統(tǒng)模型的不同之處在于服務(wù)應(yīng)答的異步性(圖1)。這是通過(guò)在客戶端與服務(wù)端之間引入一個(gè)中間層——Ajax引擎(Ajax Engine)實(shí)現(xiàn)的。Ajax引擎將客戶端的頁(yè)面剝離為數(shù)據(jù)層、控制層和表現(xiàn)層:瀏覽器中的各類(lèi)數(shù)據(jù)被組織成一棵DOM樹(shù);針對(duì)操作觸發(fā)的各種事件,利用JavaScript處理DOM數(shù)據(jù)并依據(jù)XHTML和CSS規(guī)范進(jìn)行界面的繪制。結(jié)構(gòu)的明晰為異步應(yīng)答奠定基礎(chǔ),所有與服務(wù)端的通訊都被集中提交給XmlHttpRequest對(duì)象處理。該對(duì)象封裝了XML-RPC協(xié)議,支持異步請(qǐng)求,相當(dāng)于提供了獨(dú)立用戶交互線程之外,與服務(wù)端通訊的專(zhuān)用線程。簡(jiǎn)而言之,通過(guò)XmlHttpRequest可以使用JavaScript向服務(wù)器提出請(qǐng)求并處理響應(yīng),而不阻塞用戶。這種異步通訊機(jī)制是Ajax模型的核心。這種特性決定了它適用于需要與服務(wù)端頻繁交互,操作即時(shí)響應(yīng)要求高的環(huán)境。
這里以IE環(huán)境為例說(shuō)明XmlHttpRequest的基本運(yùn)用。創(chuàng)建XmlHttpRequest對(duì)象request,以GET方法向服務(wù)器提交參數(shù)url,收到回應(yīng)后調(diào)用callback函數(shù)。代碼如下:
request = new ActvieXObject(“Microsoft.XMLHTTP”);
if (request!= null)
{
url = “http://localhost/q?x=1 ”;
request.onreadystatechange = callback;
request.open (“GET”, url, true);
request.send ( );
}
基于Ajax和OGC規(guī)范的WebGIS框架
通過(guò)客戶端的發(fā)展回顧和Ajax機(jī)制分析,我們不難發(fā)現(xiàn)WebGIS具備采用Ajax開(kāi)發(fā)的基本特征:需要即時(shí)的交互響應(yīng),大量、頻繁地與服務(wù)器通訊并以GML或圖片形式傳輸數(shù)據(jù)。實(shí)際上,ArcIMS早已徘徊在Ajax大門(mén)外了。它的HTML Viewer模式可傳輸ArcXML數(shù)據(jù)與圖片,利用JavaScript腳本控制操作同時(shí)采用DHTML技術(shù)顯示地圖,只缺異步傳輸這關(guān)鍵一環(huán)。所以,Ajax完全可以擔(dān)當(dāng)起WebGIS客戶端實(shí)現(xiàn)的重任,提升用戶體驗(yàn)。
在符合OGC規(guī)范的WebGIS中采用Ajax實(shí)現(xiàn)客戶端是極其合適的,顯而易見(jiàn)的好處就是以極自然的方式實(shí)現(xiàn)了空間信息共享所需要的通用客戶端。人們無(wú)需安裝額外的程序,僅依靠瀏覽器本身就可以從網(wǎng)上獲取空間信息,系統(tǒng)開(kāi)發(fā)的焦點(diǎn)僅需集中在提高服務(wù)端性能。Google Maps已為我們展現(xiàn)了這種場(chǎng)景。
Google Maps可以看作是OGC規(guī)范中WCS 服務(wù)(Web Coverage Service)與WFS服務(wù)(Web Feature Service)的應(yīng)用,分別提供圖像與興趣點(diǎn)查詢(xún)服務(wù)。地圖是渲染好的,和衛(wèi)星影像一樣以圖像形式存放在服務(wù)器端,并被切片按金字塔方式組織。含有地理坐標(biāo)的興趣點(diǎn)數(shù)據(jù)則單獨(dú)存放在數(shù)據(jù)庫(kù)中。在客戶端,整個(gè)交互過(guò)程為:
1、Ajax引擎響應(yīng)用戶操作得到當(dāng)前比例尺、視場(chǎng)范圍以及鼠標(biāo)所在屏幕位置;
2、將屏幕坐標(biāo)換算為地理做標(biāo),以異步方式讀取相關(guān)數(shù)據(jù);
3、將返回的興趣點(diǎn)坐標(biāo)換算為屏幕坐標(biāo),在客戶端完成繪制并疊加在地圖與影像上。 Google Maps作為一種面向大眾的地圖發(fā)布系統(tǒng)不失為一個(gè)好的解決方案,但對(duì)于WebGIS應(yīng)用來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,地圖在這里只是一個(gè)簡(jiǎn)單的參照系統(tǒng),用戶無(wú)法完成更多的空間數(shù)據(jù)處理與分析工作。
一個(gè)基本的WebGIS應(yīng)該提供WMS服務(wù)(Web Map Service)和WFS服務(wù)。WMS允許用戶以指定方式繪制地圖并輸出為圖像,主要支持GetCapabilities,GetMap和GetFeatureInfo三種接口調(diào)用,由GetMap接口實(shí)現(xiàn)制圖功能。WFS提供關(guān)于實(shí)體的各項(xiàng)檢索服務(wù),如相鄰查詢(xún)等。擴(kuò)展的WFS-T服務(wù)額外支持?jǐn)?shù)據(jù)編輯、更新操作。調(diào)用OGC服務(wù)可采用兩種方式:一種是把參數(shù)寫(xiě)成URL形式,通過(guò)GET方式提交給服務(wù)端;或是將請(qǐng)求命令封裝成XML以POST方法提交。柵格地圖常采用GET方法獲取,如
http://wms.jpl.nasa.gov/wms.cgi?&VERSION=1.1.1&REQUEST=GetMap&STYLES=&LAYERS=global_mosaic&FORMAT=image/png&SRS=EPSG:4326&BBOX=73,18,135,53&width=800&height=456,
表示向JPL(Jet Propulsion Laboratory)請(qǐng)求制圖服務(wù),采用WGS84坐標(biāo)系統(tǒng),范圍為北緯18-53度與東經(jīng)73-135度之間,包含global_mosaic圖層的地圖輸出格式為png,大小為800*456。而復(fù)雜的WFS調(diào)用則將服務(wù)請(qǐng)求封裝成XML格式,采用POST方式提交,返回的GML結(jié)果用XPATH與XSLT技術(shù)分離出實(shí)體的地理坐標(biāo)和屬性信息,最終在地圖上繪制實(shí)體,以列表的形式表示屬性。