趙書田 劉海姣
摘要:WebGIS是利用成熟的Web技術(shù)、計(jì)算機(jī)技術(shù)、GIS技術(shù)基于互聯(lián)網(wǎng)實(shí)現(xiàn)的一種新型地圖服務(wù)方式。該文探討了基于GoogleMapsAPI的WebGIS地圖服務(wù)的應(yīng)用研究,闡述了使用開放地圖API構(gòu)建WebGIS的優(yōu)勢(shì),開發(fā)者可以輕松利用開發(fā)地圖服務(wù)商所提供的各項(xiàng)地圖資源及服務(wù),非常方便高效地實(shí)現(xiàn)多種多樣的在線電子地圖應(yīng)用。
關(guān)鍵詞:WebGIS;地圖API;百度地圖;googleMapsAPI;AJAX
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)36-8686-03
近幾年隨著互聯(lián)網(wǎng)絡(luò)的信息化發(fā)展,GIS(地理信息系統(tǒng))已經(jīng)從單純的技術(shù)研究逐步向地理信息服務(wù)層面轉(zhuǎn)移,如導(dǎo)航需要催生了導(dǎo)航GIS的誕生,著名的搜索引擎Google也增加了Google Earth功能,GIS成為人們?nèi)粘I钪械囊徊糠帧ebGIS是Internet技術(shù)與GIS技術(shù)相結(jié)合的產(chǎn)物,是在網(wǎng)絡(luò)環(huán)境中的GIS應(yīng)用。WEBGIS 的發(fā)展,擴(kuò)展了GIS的應(yīng)用,使得GIS 真正成為一種大眾化的地理信息分析工具。從 Internet上的任何一個(gè)節(jié)點(diǎn),用戶可以瀏覽WEBGIS中的地圖數(shù)據(jù),并能用 WEBGIS提供的功能對(duì)這些數(shù)據(jù)進(jìn)行空間查詢分析、制作專題地圖等,例如大家熟悉的google Maps 、百度地圖、高德地圖、MapABC等。
本文闡述的是利用在線地圖服務(wù)商免費(fèi)提供的開放地圖API研究的GIS,創(chuàng)建小型地理信息服務(wù)系統(tǒng),以WebGIS的形式發(fā)布更便利、更準(zhǔn)確、更智能化的地理信息。
1 開放地圖API的現(xiàn)狀及前景:了解Web地圖API相關(guān)技術(shù)及優(yōu)勢(shì)
Web地圖服務(wù)是利用成熟的Web技術(shù)、計(jì)算機(jī)技術(shù)、GIS技術(shù),基于互聯(lián)網(wǎng)實(shí)現(xiàn)的一種新型地圖服務(wù)方式。隨著網(wǎng)絡(luò)技術(shù)的開放,在互聯(lián)網(wǎng)上已經(jīng)有相當(dāng)多的在線地圖服務(wù)商提供了免費(fèi)或收費(fèi)的地圖API程序接口,諸如Google Maps、百度地圖、MapABC、Mapbar、Microsoft Virtual Earth Maps、Yahoo Maps、51地圖等等。地圖程序開發(fā)者使用這些開放的API進(jìn)行二次開發(fā)制作第三方地圖應(yīng)用,通過這些地圖API可以快速方便調(diào)用開發(fā)地圖服務(wù)商提供的各種免費(fèi)的地圖資源,從而根據(jù)用戶需要來實(shí)現(xiàn)各種各樣的第三方地圖應(yīng)用。開放式地圖API的誕生標(biāo)志著互聯(lián)網(wǎng)在線電子地圖自由定制服務(wù)的興起,對(duì)當(dāng)前熱門的基于位置的服務(wù)有了激進(jìn)的作用,使得國(guó)內(nèi)外很多大型服務(wù)型網(wǎng)站推出相應(yīng)的地圖服務(wù)應(yīng)用,隨著開發(fā)地圖技術(shù)的發(fā)展基于這些在線地圖服務(wù)的第三方應(yīng)用也會(huì)越來越多。
基于開放地圖API的WebGIS信息系統(tǒng)特點(diǎn):
1) 穩(wěn)定可靠的多層架構(gòu)體系:基于開放地圖API的WebGIS信息系統(tǒng)采用的是典型的B/S 構(gòu)架,包括負(fù)責(zé)數(shù)據(jù)處理的數(shù)據(jù)層、負(fù)責(zé)邏輯流轉(zhuǎn)控制的業(yè)務(wù)邏輯層以及負(fù)責(zé)前臺(tái)界面顯示的客戶層架構(gòu),其中業(yè)務(wù)邏輯層根據(jù)邏輯分工又詳細(xì)分解為Web頁(yè)面程序控制層和地圖資源服務(wù)層。通過這種多層架構(gòu)體系使得系統(tǒng)開發(fā)結(jié)構(gòu)邏輯層次非常分明、業(yè)務(wù)功能分工更加明確,進(jìn)一步保證了這種多層次架構(gòu)系統(tǒng)的運(yùn)行效率。同時(shí),在服務(wù)器端也更容易維護(hù),客戶端更簡(jiǎn)單操作,提高了系統(tǒng)的穩(wěn)定性和可持續(xù)性。
2) 簡(jiǎn)單易用的空間數(shù)據(jù)庫(kù):WEBGIS地圖顯示采用地圖資源服務(wù)商免費(fèi)提供的地圖服務(wù),所請(qǐng)求的地圖數(shù)據(jù)資源基本都來源自地圖資源服務(wù)商,與傳統(tǒng)的基于ARCIMS 的 WEBGIS 相比,基于開放地圖API的WebGIS信息系統(tǒng)不需要設(shè)計(jì)組織多層的、復(fù)雜的空間數(shù)據(jù)庫(kù),WebGIS就是能充分利用現(xiàn)有互聯(lián)網(wǎng)資源,將全局的、復(fù)雜的、工作量超大的地圖數(shù)據(jù)處理交由服務(wù)商的服務(wù)器去執(zhí)行,而相對(duì)數(shù)據(jù)量比較小的、基礎(chǔ)的局部數(shù)據(jù)及簡(jiǎn)單操作則由客戶端直接完成,這就大大降低了中小企業(yè)或開發(fā)者開發(fā)的成本。
3) 更多豐富的組件和接口:開放地圖API一般都提供了很多豐富靈活的組建和接口,同時(shí)為了保持系統(tǒng)的可擴(kuò)展性,為今后系統(tǒng)的擴(kuò)展和更新作充分的準(zhǔn)備,系統(tǒng)中設(shè)計(jì)和預(yù)留了程序應(yīng)用接口。開發(fā)者為了進(jìn)一步提高系統(tǒng)的運(yùn)行的高效性,在開發(fā)過程中編寫和靈活調(diào)用一些API內(nèi)置的組件和接口,讓它們直接獨(dú)立地處理相關(guān)的邏輯業(yè)務(wù)。
4) 可定制的用戶地圖:與傳統(tǒng)的基于ARCIMS 的 WEBGIS 客戶端標(biāo)準(zhǔn)界面相比,目前互聯(lián)網(wǎng)上最流行的Google地圖和百度地圖,在地圖表現(xiàn)及用戶體驗(yàn)上更容易受到用戶的青睞。另外,電子地圖的基本控制操作方面和業(yè)務(wù)服務(wù)功能方面,API都提供了豐富的應(yīng)用接口,開發(fā)者可以按照方便快捷及人性化設(shè)計(jì)原理來定制用戶界面,根據(jù)用戶的業(yè)務(wù)和習(xí)慣的角度出發(fā),開發(fā)用戶真正需要的地圖。
2 針對(duì)幾款主流的開放地圖API的初步調(diào)研:選擇適合自己的地圖API服務(wù)
針對(duì)互聯(lián)網(wǎng)上幾個(gè)主流的地圖應(yīng)用服務(wù)商:高德地圖、百度地圖Bmap、谷歌地圖GoogleMaps、圖吧地圖MapBar、MapABC地圖、51地圖等地圖應(yīng)用服務(wù)商進(jìn)行初步技術(shù)調(diào)研,這幾款地圖應(yīng)用相對(duì)較多,比較成熟穩(wěn)定,提供的接口應(yīng)用不盡相同,開發(fā)文檔也參差不齊,下面根據(jù)調(diào)研結(jié)果來做個(gè)大致的總結(jié),是用戶更加清楚的了解開放地圖API。
百度地圖API:基于百度地圖服務(wù)的應(yīng)用接口,提供基本地圖展現(xiàn)、搜索、定位、逆/地理編碼、路線規(guī)劃、LBS云存儲(chǔ)與檢索等功能,包括Android SDK、車聯(lián)網(wǎng)API、定位SDK、Web服務(wù)API、JavaScript API、iOS SDK、LBS云等多種開發(fā)工具與服務(wù),適用于PC端、移動(dòng)端、服務(wù)器等多種設(shè)備、多種操作系統(tǒng)下的地圖應(yīng)用開發(fā)。
Google Maps API: Google Maps API 是基于谷歌地圖開發(fā),開發(fā)者能夠使用 JavaScript 結(jié)合HTML直接將谷歌地圖直接嵌入HTML網(wǎng)頁(yè)中。谷歌地圖API提供了豐富的組件和接口應(yīng)用用來處理地圖資源,并通過各種接口應(yīng)用向地圖添加用戶自定義內(nèi)容,從而使用戶能夠在自己的網(wǎng)站上根據(jù)業(yè)務(wù)需要來創(chuàng)建業(yè)務(wù)豐富、功能強(qiáng)大的在線電子地圖程序。谷歌地圖API提供了多種地圖模式,比如衛(wèi)星地圖、3D地圖、交通地圖等。另外,谷歌地圖還支持常規(guī)的KML格式的地標(biāo)文件。endprint
MapABC API:MapABC API提供了多種地圖API和搜索API,用戶可以根據(jù)自己的技術(shù)架構(gòu)進(jìn)行選擇,創(chuàng)建各種地圖應(yīng)用。常用的MapABC Ajax JavaScript API能夠在HTML中方便的構(gòu)建JavaScript地圖應(yīng)用;搜索API是基于JavaScript的地圖數(shù)據(jù)查詢計(jì)算接口,所有搜索結(jié)果都可以展現(xiàn)在JavaScript地圖上。
MapBar API:MapBar API提供了基本的地圖顯示接口外,還主要提供有償API接口服務(wù),一般專門為大中型網(wǎng)站、行業(yè)門戶網(wǎng)站、大型商業(yè)網(wǎng)站以及各種企業(yè)級(jí)用戶。
本次研究的基于開放地圖API的WEBGIS應(yīng)用是使用谷歌地圖Google Maps 的地圖資源,利用谷歌地圖提供的GoogleMapsAPI接口程序?qū)⒋蠹沂熳R(shí)的谷歌地圖非常方便的嵌入到網(wǎng)頁(yè)中,并結(jié)合AJAX異步請(qǐng)求功能,使得用戶在不刷新客戶端瀏覽器頁(yè)面的情況下,向地圖服務(wù)器請(qǐng)求關(guān)鍵數(shù)據(jù)并在后臺(tái)更新到頁(yè)面,這樣大大減少了用戶在瀏覽頁(yè)面時(shí)的等待時(shí)間,提高了用戶體驗(yàn)度。
Google Maps API是谷歌地圖面向開發(fā)者推出的免費(fèi)編程開放接口,是谷歌地圖開發(fā)商推出的編程API,網(wǎng)站開發(fā)者使用谷歌地圖API時(shí)只需使用JavaScript 腳本語言就可以輕松將谷歌地圖服務(wù)嵌入到自己的HTML網(wǎng)頁(yè)中,根據(jù)業(yè)務(wù)需要還可以自主地在定制的地圖上制作出特殊標(biāo)記或者打開指定的信息窗口。
下面針對(duì)常用的GoogleMapsAPI類模塊做一下簡(jiǎn)單介紹:
GoogleMapsAPI在功能上分為六大類:核心類(Core Class)、基礎(chǔ)類(Base Classes)、事件類(Event Classes)、控制類(Control Classes)、布局類(Overlay Classes)、服務(wù)類(Service Classes)。
1) GMaps對(duì)象。GMaps對(duì)象是GoogleMapsAPI中最重要的一個(gè)對(duì)象,用于實(shí)現(xiàn)創(chuàng)建和控制地圖等最基本的功能,該對(duì)象包含的類方法相當(dāng)豐富, 如設(shè)置地圖中心及縮放級(jí)別、添加工具控件、添加標(biāo)注點(diǎn)信息窗等。
2) GControl控件。GControl控件對(duì)地圖進(jìn)行操控的一組對(duì)象的總稱,包括以下常用的8種基本控件:
縮放平移按鈕控件GSmallMapControl()、
縮放平移按鈕及滑塊控件GLargeMapControl()、
縮放按鈕控件GSmallZoomControl()、
地圖比例尺控件Gscale Control()、
地圖類型控件GMapTypeControl()、
下拉菜單式地圖類型控件GmenuMap TypeControl()、
嵌套的地圖類型控件GHierarchicalMapTypeControl()、
鷹眼控件GOverviewMapControl()
3) GMarker標(biāo)注。使用GMarker標(biāo)注可以在地圖上指定的位置添加標(biāo)注點(diǎn)對(duì)象,用于指示地理位置、顯示信息窗口等。
4) GInfoWindow對(duì)象。針對(duì)地圖的指定坐標(biāo)點(diǎn)提供信息窗口的顯示對(duì)象,使用GInfoWindow對(duì)象信息顯示的內(nèi)容除了可以使用簡(jiǎn)單的文本外,還支持使用HTML多媒體頁(yè)面。
5) GPolyline和GPolygon對(duì)象。谷歌地圖還提供了GPolyline折線對(duì)象和GPolygon多邊形對(duì)象,他們分別是用于地圖標(biāo)記指定的路徑和區(qū)域顯示,這兩個(gè)對(duì)象的類屬性和類方法極為相似,主要應(yīng)用與公交線路、駕車路線、區(qū)域搜索、行政區(qū)域等方向。
3 開放地圖API的Web應(yīng)用:結(jié)合實(shí)用Web技術(shù)構(gòu)建AJAX地圖網(wǎng)站
傳統(tǒng)的WebGIS開發(fā),需要完成一套完整的專用的地圖類服務(wù)管理系統(tǒng)。傳統(tǒng)的WebGIS開發(fā)開發(fā)難度很大、周期過長(zhǎng),一般情況下是需要一個(gè)技術(shù)相對(duì)比較強(qiáng)大的開發(fā)團(tuán)隊(duì)才能完成的,另外,也需要比較充足的硬件設(shè)備的支持。GoogleMaps API是谷歌公司提供的JavaScript類 API程序接口。網(wǎng)絡(luò)前端開發(fā)員可以通過GoogleMaps API來調(diào)用這些程序接口將谷歌地圖非常方便地嵌入到自己的網(wǎng)頁(yè),另外,開發(fā)者也可以根據(jù)用戶需要進(jìn)行快速的二次開發(fā)來定制專題地圖,以此來創(chuàng)建操作簡(jiǎn)單、功能強(qiáng)大的谷歌地圖應(yīng)用程序。
AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù)。通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。AJAX是一種技術(shù)組合或者是設(shè)計(jì)模式,它將幾項(xiàng)目前已經(jīng)成熟的Web應(yīng)用程序開發(fā)技術(shù)巧妙組合,在客戶端瀏覽器與Web服務(wù)器之間形成一個(gè)中間層,即AJAX引擎,使瀏覽器具備與Web服務(wù)器異步通信的能力。
在AJAX各項(xiàng)組合技術(shù)中,最為核心的是JavaScript和XMLHttpRequest。普通用戶可以通過HTML前臺(tái)頁(yè)面中的表單控件、按鈕、鏈接等操作與Web服務(wù)器應(yīng)用程序進(jìn)行交互,調(diào)用響應(yīng)事件的JavaScript函數(shù)從而發(fā)起請(qǐng)求。 這里的請(qǐng)求并不是由客戶端瀏覽器直接發(fā)送給Web服務(wù)器端,客戶端僅僅是發(fā)起請(qǐng)求,發(fā)起請(qǐng)求之后客戶端將請(qǐng)求控制權(quán)交給AJAX引擎處理。作為AJAX引擎的核心組成部分,JavaScript提供了用戶交互的異步請(qǐng)求接口,一方面來響應(yīng)客戶端瀏覽器的事件,創(chuàng)建xMLHttpRequest對(duì)象,另一方面規(guī)定Web服務(wù)器應(yīng)答數(shù)據(jù)處理函數(shù),最后以GET方式或者POST方式向Web服務(wù)器發(fā)送請(qǐng)求,并傳遞相關(guān)參數(shù)。在AJAX向Web服務(wù)器發(fā)起請(qǐng)求的同時(shí),客戶端用戶仍然可以通過Web應(yīng)用程序前臺(tái)瀏覽器界面進(jìn)行查看、交互、操作,用戶感覺不到Web 客戶端端與Web服務(wù)器端的交互請(qǐng)求及請(qǐng)求響應(yīng)的過程,不必等待Web頁(yè)面的更新,從而提高實(shí)時(shí)性和交互性。endprint
目前已經(jīng)有很多web應(yīng)用開發(fā)者使用GoogleMapsAPI來擴(kuò)展地圖服務(wù),極大地方便了人們的生活。然而,如果每次都調(diào)用GoogleMaps進(jìn)行地圖解析,勢(shì)必會(huì)對(duì)客戶端和服務(wù)器都造成極大的數(shù)據(jù)傳輸壓力,效率并不高,而且Web應(yīng)用可能會(huì)要求保存解析的結(jié)果。 Google MapsAPI開放版采用的是Ajax技術(shù),與傳統(tǒng)Web操作方式相比,Google Maps不再需要點(diǎn)擊特定的鏈接來下載新的地圖數(shù)據(jù),用戶的操作(如在地圖上拖拽)隨時(shí)觸發(fā)瀏覽器與服務(wù)器之間的通信。另外瀏覽器和服務(wù)器之間的交互是異步進(jìn)行的,當(dāng)客戶端在請(qǐng)求服務(wù)器數(shù)據(jù)的同時(shí),用戶的工作流程不再被頻繁的刷新過程打斷。Google MapsAPI提供的這些快速檢索方式,就是通過AJAX引擎來完成向服務(wù)端請(qǐng)求數(shù)據(jù),每次請(qǐng)求得到的反饋數(shù)據(jù)僅僅限于查詢到的數(shù)據(jù),不包含前臺(tái)頁(yè)面呈現(xiàn)的HTML等頁(yè)面信息,這樣情況下反饋數(shù)據(jù)中就不存在任何冗余和浪費(fèi),從而減少了用戶交互時(shí)數(shù)據(jù)下載總量,提高了系統(tǒng)的響應(yīng)效率。
以下示例是基于GoogleMapsAPI來構(gòu)造地圖的核心代碼:
var map = new GMap2($("#map"));
var point= new GLatLng(34.8668002,113.6086397);
map.setCenter(point, 12);
其中, GMap2()是GoogleMapsAPI的一個(gè)構(gòu)造函數(shù),主要用來創(chuàng)建一個(gè)地圖實(shí)例,并將該地圖實(shí)例放置到地圖容器$("#map")中,然后利用setCenter()類方法來初始化地圖的中心點(diǎn)以及縮放級(jí)別,以此來實(shí)現(xiàn)地圖顯示區(qū)域的定位。
初始化完成后,一個(gè)基礎(chǔ)的地圖實(shí)例就完成了,如果要對(duì)地圖進(jìn)行一些基本控制,諸如縮放平移控制、切換衛(wèi)星地圖/平面地圖/3D地圖類型、鷹眼縮略圖模式、查看地圖比例尺等,API提供了addControl()方法可以根據(jù)需要在地圖上添加相應(yīng)的工具控件,譬如常用的平移縮放控件、比例尺控件、鷹眼控件、地圖類型控件等,如下所示:
map.addControl(new GMapTypeControl());//衛(wèi)星地圖切換
map.addControl(new GLargeMapControl());//移動(dòng)、縮放地圖工具控件
map.addControl(new GScaleControl());//比例尺
map.enableDoubleClickZoom();//雙擊縮放地圖
map.enableScrollWheelZoom();//鼠標(biāo)滾軸縮放地圖
另外,用戶還可以根據(jù)業(yè)務(wù)需要結(jié)合AJAX進(jìn)一步配置更具動(dòng)態(tài)交互性更強(qiáng)的地圖,如向地圖添加覆蓋物、信息點(diǎn)、路徑規(guī)劃、測(cè)量距離、計(jì)算面積等對(duì)象。Overlay是GoogleMaps一些覆蓋物對(duì)象,使用addOverlay()方法可以將它們顯示在地圖上的指定地理位置,同時(shí)程序接口還提供用戶與其進(jìn)行交互的功能。使用Overlay的一個(gè)典型應(yīng)用就是把一個(gè)標(biāo)注點(diǎn)、路徑、多邊形覆蓋物等標(biāo)記放在指定的位置以指示一些特殊位置或地理區(qū)域。下面的代碼是向地圖上添加一個(gè)信息點(diǎn)標(biāo)注:
//創(chuàng)建一個(gè)坐標(biāo)點(diǎn)
var point = new GLatLng(34.8668002,113.6086397);
//根據(jù)坐標(biāo)點(diǎn)創(chuàng)建一個(gè)標(biāo)注
marker=new GMarker(point);
//在地圖實(shí)例中添加這個(gè)標(biāo)注
map.addOverlay(marker);
4 總結(jié)
本次研究室通過系統(tǒng)介紹GoogleMapsAPI的基本功能、技術(shù)優(yōu)勢(shì)和類使用方法,并認(rèn)真探討了這種基于谷歌地圖API的WebGIS在線地圖服務(wù)的應(yīng)用研究。經(jīng)調(diào)查研究并通過實(shí)踐表明,基于開發(fā)地圖API二次開發(fā)的Web在線地圖服務(wù)應(yīng)用系統(tǒng),從用戶體驗(yàn)角度來說確實(shí)增強(qiáng)了客戶端用戶交互性,同時(shí)豐富了客戶端互動(dòng)功能,進(jìn)一步提升了用戶使用web地圖服務(wù)的體驗(yàn)度。GoogleMapsAPI應(yīng)用于Web地圖服務(wù)中,可明顯地提高客戶端的瀏覽效果,使電子地圖應(yīng)用的開放更為廣泛地被非專業(yè)技術(shù)用戶所接受,對(duì)電子地圖服務(wù)的發(fā)展和應(yīng)用推廣具有重要的應(yīng)用價(jià)值
參考文獻(xiàn):
[1] 花杰.基于GoogleMapsAPI的WEBGIS應(yīng)用研究[J].中國(guó)高新技術(shù)企業(yè),2010(25).
[2] 趙俊三,趙耀龍.GIS發(fā)展的最新趨勢(shì)及其應(yīng)用前景[J].測(cè)繪工程,2000(2).
[3] 王志紅,胡川.基于GoogleMapsAPI的網(wǎng)絡(luò)地圖服務(wù)系統(tǒng)的研究與應(yīng)用[J].測(cè)繪標(biāo)準(zhǔn)化,2010(26).
[4] 陳圓,簡(jiǎn)季,楊武年.GoogleMaps組件二次開發(fā)與應(yīng)用[J].地球信息科學(xué),2008(10).
[5] 王衛(wèi)玲,劉瑜.基于GoogleMapsAPI的電子地圖的開發(fā)研究[J].信息技術(shù)與信息化,2011(3).endprint