張 艷,李 忠,趙冬梅
(1.重慶郵電大學(xué)移動(dòng)通信重點(diǎn)實(shí)驗(yàn)室,重慶400065;2.北京首科軟件及系統(tǒng)集成有限責(zé)任公司,北京100000)
隨著信息技術(shù)的發(fā)展,電子地理信息領(lǐng)域已經(jīng)成為了人們的一個(gè)研究熱點(diǎn),在一定程度上加快了地理信息技術(shù)的發(fā)展.而且,實(shí)際應(yīng)用中對(duì)地理信息服務(wù)的各種新要求也不斷驅(qū)動(dòng)著基于WEB地圖服務(wù)模式的地理信息技術(shù)的發(fā)展與完善,其信息傳遞模式的載體已經(jīng)融合了計(jì)算機(jī)通信技術(shù)、網(wǎng)絡(luò)技術(shù)、空間定位技術(shù)、計(jì)算機(jī)視覺(jué)技術(shù)等多個(gè)學(xué)科[1].眾所周知,地理數(shù)據(jù)庫(kù)是地理信息系統(tǒng)的核心,Google Maps正是通過(guò)其龐大的地理數(shù)據(jù)庫(kù)為WEB GIS提供強(qiáng)有力的地理信息可視化及查詢功能支持.然而,如何有效結(jié)合Google Maps與GSM/GPRS網(wǎng)絡(luò)實(shí)現(xiàn)人員的準(zhǔn)確定位和快速調(diào)度,以及如何提高Google地圖的加載速度還存在著很多問(wèn)題.
文章以 Google Maps的地圖資源為基礎(chǔ),將Google地圖嵌入到網(wǎng)頁(yè)中,利用其免費(fèi)的API,并應(yīng)用AJAX技術(shù)進(jìn)行腳本的異步調(diào)用.在此基礎(chǔ)上,實(shí)現(xiàn)了基于Google Maps和GSM/GPRS網(wǎng)絡(luò)的人員定位調(diào)度系統(tǒng),該系統(tǒng)具有較強(qiáng)的工程應(yīng)用價(jià)值.
Google Maps是由著名的Google公司提供的電子地圖服務(wù),能提供矢量地圖、衛(wèi)星照片、地形圖三種不同的視圖模式.基于Web的地圖服務(wù)技術(shù)隨著Google Maps技術(shù)的出現(xiàn)在國(guó)內(nèi)外得到了廣泛的發(fā)展與應(yīng)用,許多公司相繼推出了相應(yīng)的電子地圖服務(wù).Google公司發(fā)起的這場(chǎng)技術(shù)革命,將Google Maps API技術(shù)融入了互聯(lián)網(wǎng),使Google地圖技術(shù)和其他系統(tǒng)的整合應(yīng)用和二次開(kāi)發(fā)更加簡(jiǎn)單.目前,Google Maps API被越來(lái)越多的網(wǎng)站和系統(tǒng)所應(yīng)用,不僅提升了系統(tǒng)的易用性,而且還改善了用戶體驗(yàn).
Google Maps API是一種將Google地圖嵌人到網(wǎng)頁(yè)中的一組AP1,不僅提供能被 Ajax應(yīng)用程序調(diào)用的JavaScript接口,還提供了能被Flash應(yīng)用程序調(diào)用的Flex語(yǔ)言接口,而且具有強(qiáng)大地圖處理能力.
Google Maps API的特點(diǎn)體現(xiàn)在[2]:①Google Maps對(duì)所有授權(quán)用戶都是免費(fèi)的,用戶只要注冊(cè)自己的ID后,就可以在自己開(kāi)發(fā)的網(wǎng)頁(yè)中嵌入這些Google Maps API函數(shù).②提供精度較高的衛(wèi)星影像數(shù)據(jù).③使用很方便,并且提供多種服務(wù),如天氣信息等.④Google Maps能提供矢量地圖、衛(wèi)星照片、地形圖三種不同的視圖模式,而且可以方便地切換.⑤授權(quán)用戶可以方便地在Google Maps API的基礎(chǔ)上進(jìn)行二次開(kāi)發(fā).⑥Google Maps API是一種基于服務(wù)器的應(yīng)用開(kāi)發(fā)模式,GIS數(shù)據(jù)處理主要集中在Google的服務(wù)器端.
Google Maps API提供的功能可以分成兩類(lèi),一為地圖顯示功能,即用戶可以調(diào)用API進(jìn)行地圖信息的顯示及顯示模式的切換;二為API的擴(kuò)展功能,用戶可以方面地利用Google Maps所提供的API進(jìn)行二次開(kāi)發(fā),或者與自己的系統(tǒng)進(jìn)行整合.下面介紹一些Google Maps API的常用對(duì)象.
(1)GMaps對(duì)象
GMap類(lèi)的實(shí)例表示用戶頁(yè)面上的一個(gè)地圖,用戶可以在自己的程序中創(chuàng)建該類(lèi)的多個(gè)實(shí)例,GMap類(lèi)提供了許多地圖操作的類(lèi)方法;
(2)GControl控件
該控件是一種Google Maps API自帶的控件類(lèi),開(kāi)發(fā)人員可以利用GControl接口來(lái)調(diào)用合適的方法對(duì)控件的屬性和行為進(jìn)行設(shè)置;
(3)ControlPosition對(duì)象
該對(duì)象用于確定不同控件在地圖上顯示的位置,在地圖上一種控件的位置相對(duì)于同一布局位置中的其他控件而定;
(4)MarkerShape對(duì)象
此對(duì)象用于確定標(biāo)記可點(diǎn)擊區(qū)域的的標(biāo)記形狀,包括兩個(gè)屬性(type屬性和coord屬性),這兩個(gè)屬性分別定義該類(lèi)型的標(biāo)記對(duì)應(yīng)的默認(rèn)類(lèi)型的標(biāo)記和坐標(biāo);
(5)Map Type對(duì)象
此對(duì)象提供了定義地圖類(lèi)型的接口,通過(guò)該接口用戶可以調(diào)用不同類(lèi)型的地圖模式.
目前,谷歌一經(jīng)推出了Google Maps API v3,不僅提高了地圖的加載速度,尤其是手機(jī)瀏覽器的訪問(wèn)速度.而且在開(kāi)發(fā)上,用戶不再需要獲取API的key,可以直接在網(wǎng)頁(yè)代碼中調(diào)用Google Maps API提供地圖服務(wù),或者進(jìn)行二次開(kāi)發(fā).
<script type=“text/javascript” src=“http://maps.google.com/maps/api/js?sensor=false&language=zh-CN”>
以上的javascript代碼嵌入網(wǎng)頁(yè)后,用于定位google地圖服務(wù)器,其中sensor參數(shù)是必須的,如果開(kāi)發(fā)的應(yīng)用程序是通過(guò)傳感器來(lái)確定用戶位置的話,設(shè)置 sensor為true,否則為false.
<body onload=“initialize()” bgcolor=“#ffffff” ><div id=“map_canvas” style=“w idth:520px;height:380px;border:solid”></div></body>
以上代碼是網(wǎng)頁(yè)代碼中的主程序,調(diào)用了initialize()方法,用一個(gè)寬度為520像素,高度為380像素的層對(duì)象在網(wǎng)頁(yè)中顯示地圖信息.
Google Maps API v3為當(dāng)前最新版本,該版本中API應(yīng)用程序的最基本元素都可以看作是"Map"本身,下面主要介紹一些API中與地圖顯示、比例尺、提示信息相關(guān)的應(yīng)用方法.
(1)地圖顯示
在Google Maps API v3中,Map類(lèi)主要用于地圖的顯示,可以在一個(gè)指定的html容器中新建地圖.
map.getProjection();
以上代碼用于傳回當(dāng)前的Projection,在地圖還未啟動(dòng)時(shí)返回Null.
map.panTo(latLng:New LatLng);
以上代碼可以將當(dāng)前的地圖中心更改為New-LatLng,在更改幅度不大于地圖的寬度和高度時(shí),地圖滑動(dòng)的效果會(huì)比較流暢.
map.New LatLng(latLngBounds:New-LatLngBounds);
以上代碼可以將當(dāng)前窗口中的地圖滑動(dòng)最小的距離,以達(dá)到包含指定New LatLngBounds的顯示效果.
(2)地圖標(biāo)記
在Google Maps API v3中,Marker類(lèi)用于在地圖上顯示具有指定選項(xiàng)的標(biāo)記.
this.setMap(map:Map|StreetView Panorama);
以上代碼可以再指定的地圖上渲染標(biāo)記,當(dāng)?shù)貓D設(shè)置為Null時(shí),則會(huì)自動(dòng)去掉該標(biāo)記.
(3)提示信息
infowindow.open(map,MyMarker);
以上代碼用于在地圖上顯示標(biāo)記MyMarker.
系統(tǒng)主要由調(diào)度中心、人員定位終端設(shè)備及GSM/GPRS通信網(wǎng)絡(luò)三部分組成[7],如圖1所示.
圖1 系統(tǒng)結(jié)構(gòu)圖
如上圖所示,調(diào)度中心需要為服務(wù)器配置固定的IP地址,以實(shí)現(xiàn)無(wú)線分組網(wǎng)和因特網(wǎng)的互聯(lián).人員定位終端通過(guò)GPS接收機(jī)模塊接收到GPS定位信息后,解析出自身的經(jīng)度、維度、方向等信息;再通過(guò)人員定位終端設(shè)備中的GPRS無(wú)線通信模塊把上述數(shù)據(jù)實(shí)時(shí)地上傳到調(diào)度中心服務(wù)器,并將數(shù)據(jù)存入人員管理數(shù)據(jù)庫(kù)中.調(diào)度中心服務(wù)器需要對(duì)所接收到的數(shù)據(jù)進(jìn)行分析,并把人員定位信息與電子地圖進(jìn)行匹配,這樣就可以在調(diào)度中心顯示出所有人員的實(shí)時(shí)位置信息.同時(shí),調(diào)度中心可以根據(jù)人員的具體情況,利用GPRS傳輸系統(tǒng)發(fā)送相應(yīng)的調(diào)度、控制命令,從而實(shí)現(xiàn)對(duì)人員的實(shí)時(shí)定位與調(diào)度管理.
人員定位終端通過(guò)接收GPS定位信號(hào),實(shí)時(shí)計(jì)算出此時(shí)的經(jīng)度、維度、時(shí)間等信息,并自動(dòng)將這些定位信息傳送到調(diào)度中心服務(wù)器,同時(shí)接受調(diào)度中心的調(diào)度命令,以實(shí)現(xiàn)對(duì)人員的調(diào)度.人員定位終端具有 GPRS/GPS功能,一般由微處理器模塊、GPRS無(wú)線通信模塊、GPS接收機(jī)模塊、LCD液晶顯示模塊等組成[10].
GPS接收機(jī)模塊主要負(fù)責(zé)接收導(dǎo)航電文,并實(shí)時(shí)計(jì)算出人員定位終端的經(jīng)度、維度和時(shí)間等信息,并通過(guò)串口傳送給終端的主控模塊.
GPRS無(wú)線通信模塊主要用于人員定位終端和調(diào)度中心之間的無(wú)線數(shù)據(jù)通信,該模塊是整個(gè)系統(tǒng)數(shù)據(jù)通信的基礎(chǔ),不僅支持GPRS操作模式,還要提供RS232串行接口.
在調(diào)度中心和人員定位終端之間主要傳送兩種格式的數(shù)據(jù):一種是由GPS人員定位終端向調(diào)度中心發(fā)送的信息,即上行指令;另一種是調(diào)度中心向人員定位終端發(fā)送的數(shù)據(jù),即下行指令[9].
在進(jìn)行協(xié)議的設(shè)計(jì)時(shí),最主要的問(wèn)題是協(xié)議的通用性和可擴(kuò)展性,通信協(xié)議不僅能實(shí)現(xiàn)對(duì)現(xiàn)有GPS人員定位終端功能的支持,還要預(yù)留足夠的協(xié)議接口以保證系統(tǒng)的可擴(kuò)展性.由于通信數(shù)據(jù)類(lèi)型較多,通信協(xié)議可以采用統(tǒng)一的協(xié)議頭作為協(xié)議數(shù)據(jù)的起止標(biāo)志,在協(xié)議體中按照數(shù)據(jù)類(lèi)型的不同可以發(fā)送不同的內(nèi)容[10],協(xié)議設(shè)計(jì)基本格式如下表.
表1 協(xié)議總體設(shè)計(jì)格式
調(diào)度中心主要由通信服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器及調(diào)度工作站等組成.調(diào)度中心正常運(yùn)行時(shí),由通信服務(wù)器接收來(lái)自人員定位終端上傳的經(jīng)度、維度、時(shí)間等信息,并進(jìn)行相應(yīng)的數(shù)據(jù)處理,調(diào)度中心的軟件系統(tǒng)調(diào)用Google maps API以實(shí)現(xiàn)在電子地圖上顯示人員的實(shí)時(shí)位置,并可根據(jù)需要進(jìn)行查詢.通信服務(wù)器還可以向所有人員定位終端傳送各種調(diào)度數(shù)據(jù)信息,從而實(shí)現(xiàn)對(duì)人員的實(shí)時(shí)管理和高效調(diào)度.
而且,調(diào)度中心的通信服務(wù)器在系統(tǒng)中還具有數(shù)據(jù)轉(zhuǎn)發(fā)的功能,可實(shí)時(shí)地將人員定位終端上傳的大量數(shù)據(jù)信息,按照其屬性和類(lèi)型的不同,分別轉(zhuǎn)發(fā)到不同的調(diào)度工作站.數(shù)據(jù)庫(kù)服務(wù)器中存儲(chǔ)人員的各類(lèi)屬性數(shù)據(jù),以便查詢、調(diào)用.
圖2 和圖3是作者開(kāi)發(fā)利用Google map API所開(kāi)發(fā)的人員定位調(diào)度系統(tǒng)運(yùn)行效果,其中圖2是系統(tǒng)登陸頁(yè)面,圖3是系統(tǒng)綜合管理頁(yè)面.
如圖3所示,無(wú)標(biāo)簽的浮動(dòng)氣球表示某突發(fā)事件的發(fā)生地點(diǎn),調(diào)度中心需要調(diào)度人員到該地去處理;紅色浮動(dòng)氣球表示不同的人員,氣球上的編號(hào)為對(duì)應(yīng)的人員編號(hào);地圖的左上角為縮放控件,左下角為搜索框,右上角為可供選擇的地圖類(lèi)型,右下角為地圖的縮略圖.
當(dāng)調(diào)度中心需要緊急調(diào)度相關(guān)人員去突發(fā)事件的發(fā)生地點(diǎn)時(shí),可以根據(jù)人員的實(shí)時(shí)定位情況通過(guò)給定位中端發(fā)送調(diào)度指令,來(lái)調(diào)度距離該地最近的人員去處理緊急情況.如果多名人員到發(fā)生地點(diǎn)的距離相近時(shí),調(diào)度中心可以通過(guò)多點(diǎn)測(cè)距來(lái)確定距離突發(fā)事件地點(diǎn)最近的人員及到達(dá)所需的時(shí)間,系統(tǒng)測(cè)距界面如圖4所示.
圖4 系統(tǒng)線路測(cè)距頁(yè)面
系統(tǒng)的右上角表示兩地之間的路線距離,另外調(diào)度中心在進(jìn)行人員調(diào)度時(shí)需要考慮天氣、交通等多方面的因素.
地圖的加載速度是影響系統(tǒng)工作效率的一個(gè)重要因素,為了提高地圖的加載速度,系統(tǒng)開(kāi)發(fā)時(shí)采用Google map API V3版本.相對(duì)于V2版本,V3版本在地圖的加載上做了很多的優(yōu)化[6].
向Google地圖添加大量標(biāo)記時(shí)可能會(huì)降低顯示地圖的速度,還會(huì)使視覺(jué)效果過(guò)于混亂,對(duì)于某些縮放級(jí)別尤其如此.對(duì)此本系統(tǒng)使用標(biāo)記管理器作為這一問(wèn)題的解決方案,標(biāo)記管理器允許在同一個(gè)地圖上高效顯示數(shù)百個(gè)標(biāo)記,并能夠指定應(yīng)顯示標(biāo)記的縮放級(jí)別.管理器監(jiān)控地圖的當(dāng)前視圖和縮放級(jí)別,動(dòng)態(tài)地從地圖中添加或刪除有效標(biāo)記.此外,通過(guò)允許標(biāo)記指定顯示自身的縮放級(jí)別來(lái)實(shí)現(xiàn)標(biāo)記集群,這種管理方法可以大大加快地圖的顯示并減少視覺(jué)混亂,提供給用戶更為友好的界面和極大改善了用戶的體驗(yàn).
同時(shí),Google的地圖分塊技術(shù)充分利用了數(shù)據(jù)在網(wǎng)絡(luò)上異步傳輸技術(shù)的優(yōu)勢(shì),由Ajax引擎實(shí)現(xiàn)大量地圖區(qū)域的無(wú)縫拼接、地圖滑動(dòng)和快速填充等工作.當(dāng)用戶通過(guò)瀏覽器進(jìn)行一些地圖操作時(shí),Ajax引擎自動(dòng)計(jì)算出需要重新加載的地圖區(qū)域,并以異步的方式迅速向Google Maps服務(wù)器發(fā)出加載請(qǐng)求.當(dāng)重新加載的多個(gè)地圖區(qū)域傳送到客戶端時(shí),由Ajax引擎完成全部地圖在用戶瀏覽器界面中的無(wú)縫拼接,整個(gè)過(guò)程不需要用戶的瀏覽器進(jìn)行刷新.另一方面,如果瀏覽器的緩存中已經(jīng)存在某一小塊地圖,下次瀏覽時(shí)則不用向服務(wù)器再次請(qǐng)求,可以直接調(diào)用緩存中的圖片即可.這樣當(dāng)用戶重新回到已被訪問(wèn)過(guò)的地圖區(qū)域時(shí),加載速度會(huì)有很大的改善.
本文通過(guò)介紹Google Maps API的功能、特點(diǎn)和使用方法,探討了基于Google Maps API的Web地圖服務(wù)應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā),并將其應(yīng)用于人員定位調(diào)度系統(tǒng)中.結(jié)果表明,利用Google Maps API(V3)實(shí)現(xiàn)的實(shí)時(shí)地圖服務(wù)系統(tǒng),不僅降低了系統(tǒng)的開(kāi)發(fā)難度,還在很大程度上改善了用戶體驗(yàn),而且無(wú)需支付額外費(fèi)用,具有良好的應(yīng)用前景和推廣價(jià)值.另外,Google Maps API現(xiàn)在還處于一個(gè)不斷完善的階段,其最大的不足之處系統(tǒng)核心的實(shí)時(shí)地圖數(shù)據(jù)完全由Google提供,在實(shí)際應(yīng)用開(kāi)發(fā)時(shí)應(yīng)考慮潛在的技術(shù)風(fēng)險(xiǎn).
[1]耿慶齋,繆 綸,段媛媛,李江華.基于Google Maps API的Web地圖服務(wù)系統(tǒng)研究及應(yīng)用[J].中國(guó)水利水電科學(xué)研究院學(xué)報(bào),2009,7(1).
[2]孫曉茹,趙 軍.Google Maps API在WEBGIS中的應(yīng)用[J].微計(jì)算機(jī)信息,2006,22(19):224-226.
[3]江 寬,龔小鵬.Google API開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2008.
[4]Google Maps API開(kāi)發(fā)指南[EB/OL].http://www.google.com/apis/maps/2008-05-07.
[5]張 宏,溫永寧,劉愛(ài)軍,等.地理信息系統(tǒng)算法基礎(chǔ)[M].科學(xué)出版社.2006.
[6]Sign Up for the Google Maps API[EB/OL].http://code.google.com/apis/maps/signup.html,2007.12.
[7]戴喜明,袁 濤,吳定雪.基于 GSM/GPS/GIS車(chē)輛狀態(tài)監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006,22(9):246-248.
[8]張 凌,田增山,張光星.基于ARM/GPRS/GPS的監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].重慶郵電學(xué)院學(xué)報(bào)(自然科學(xué)版),2005,17(6):246-248.
[9]王明艷,劉 旭,張其善,吳今培.GPS車(chē)輛導(dǎo)航系統(tǒng)終端軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].無(wú)線電工程,2006,36(10):31-39.
[10]李富年.基于GPS/GPRS的車(chē)輛移動(dòng)監(jiān)控終端的設(shè)計(jì)與實(shí)現(xiàn)[J].安防科技,2007,7(9):33-36.