陳祥蔥 焦德杰 李 浩
(1.哈爾濱市勘察測(cè)繪研究院, 黑龍江哈爾濱 150010; 2.黑龍江省城市規(guī)劃勘測(cè)設(shè)計(jì)研究院, 黑龍江哈爾濱 150040)
GPS提供了覆蓋全球范圍、全天候、高精度的定位導(dǎo)航服務(wù)。目前,隨著通信技術(shù)的發(fā)展和硬件成本的減低,基于GPS的跟蹤定位服務(wù)逐漸由特殊領(lǐng)域走向普通大眾,被廣泛的應(yīng)用于車輛管理、車輛調(diào)度、車輛防盜、人員定位等領(lǐng)域,成為空間位置服務(wù)的重要內(nèi)容之一,并支撐著數(shù)字城管、數(shù)字城市規(guī)劃監(jiān)察、智能交通等數(shù)字城市管理與應(yīng)用。
在現(xiàn)階段進(jìn)行的行業(yè)應(yīng)用系統(tǒng)、政府信息化管理等項(xiàng)目中,都提出了對(duì)GPS跟蹤定位的需求,要求定位服務(wù)能夠與GIS、業(yè)務(wù)系統(tǒng)無(wú)縫結(jié)合,充分發(fā)揮其監(jiān)控調(diào)度功能。但在項(xiàng)目實(shí)施中,由于受硬件廠家、通信協(xié)議、數(shù)據(jù)源、計(jì)算機(jī)硬件資源等因素的影響,開發(fā)的GPS定位跟蹤系統(tǒng)均存在著移植困難、兼容性擴(kuò)展性差等問題。本文通過多個(gè)項(xiàng)目的實(shí)際需求,采用ESRI公司提供的Arc Engine嵌入式開發(fā)組件,以模塊化思想設(shè)計(jì)開發(fā)能夠靈活移植,具備良好的擴(kuò)展性和穩(wěn)定性的GPS定位追蹤系統(tǒng)。
系統(tǒng)由跟蹤定位器和服務(wù)接收軟件組成(見圖1)。跟蹤定位器實(shí)現(xiàn)定位信息的采集和數(shù)據(jù)傳輸,服務(wù)接收軟件實(shí)現(xiàn)定位信息接收、解析、轉(zhuǎn)換、展現(xiàn)等數(shù)據(jù)處理和服務(wù)功能。
跟蹤定位器內(nèi)嵌GPS定位模塊和通信模塊:前者通過接收GPS衛(wèi)星信號(hào)實(shí)時(shí)采集目標(biāo)的位置、速度、移動(dòng)方向等信息,按照協(xié)議標(biāo)準(zhǔn)生成定位數(shù)據(jù);后者實(shí)現(xiàn)通信功能,通過GPRS傳輸定位信息。目前,市場(chǎng)上已有很多成熟的GPS跟蹤定位器,如維臣、衛(wèi)通達(dá)等硬件廠商。由于硬件廠商不同,跟蹤定位器使用的通信協(xié)議也存在較大差異,為滿足多個(gè)項(xiàng)目的需求,兼容不同廠家的通信協(xié)議是軟件設(shè)計(jì)的重要約束條件。
服務(wù)接收軟件為服務(wù)器程序,主要功能包括接收跟蹤定位器的連接請(qǐng)求,接收數(shù)據(jù)并獲取跟蹤目標(biāo)位置、速度、移動(dòng)方向等信息,與地理信息系統(tǒng)、行業(yè)應(yīng)用相聯(lián)系,提供跟蹤定位、監(jiān)控調(diào)度等服務(wù)。服務(wù)接收軟件的設(shè)計(jì)開發(fā)是本文研究的主要內(nèi)容。
系統(tǒng)采用Oracle 10g管理存儲(chǔ)數(shù)據(jù),其存儲(chǔ)的數(shù)據(jù)包括系統(tǒng)管理參數(shù)、用戶信息、系統(tǒng)日志信息和GPS定位數(shù)據(jù),其核心和主體為GPS定位數(shù)據(jù)。GPS定位數(shù)據(jù)隨著時(shí)間逐漸累積,可達(dá)百萬(wàn)條記錄,會(huì)極大地影響檢索效率和穩(wěn)定性,是數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)需解決的主要問題。
圖1 系統(tǒng)結(jié)構(gòu)
對(duì)定位數(shù)據(jù)使用頻率進(jìn)行了分析,將其分為兩類:活躍數(shù)據(jù)和靜態(tài)數(shù)據(jù)?;钴S數(shù)據(jù)指使用比較頻繁的數(shù)據(jù),一般為接收時(shí)間較短的數(shù)據(jù);反之為靜態(tài)數(shù)據(jù),為接收時(shí)間較長(zhǎng)的歷史數(shù)據(jù)。在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),對(duì)活躍數(shù)據(jù)和靜態(tài)數(shù)據(jù)分開存儲(chǔ),設(shè)計(jì)了活動(dòng)表和靜態(tài)表。活動(dòng)表存儲(chǔ)當(dāng)前或近期內(nèi)接收的定位數(shù)據(jù),在達(dá)到一定條件(記錄數(shù)達(dá)到20萬(wàn))后將將定位數(shù)據(jù)轉(zhuǎn)存至靜態(tài)表;靜態(tài)表存儲(chǔ)歷史定位數(shù)據(jù),其搜索優(yōu)先級(jí)按時(shí)間確定,即時(shí)效性高的數(shù)據(jù)優(yōu)先搜索(圖2),靜態(tài)表的創(chuàng)建和定位數(shù)據(jù)轉(zhuǎn)存通過數(shù)據(jù)庫(kù)觸發(fā)器實(shí)現(xiàn)[3]。
圖2 定位數(shù)據(jù)存儲(chǔ)
軟件設(shè)計(jì)的目標(biāo)是定義軟件結(jié)構(gòu)層次,劃分軟件功能模塊,定義模塊接口。軟件的穩(wěn)定性、運(yùn)行效率、可擴(kuò)展性和可移植性是軟件設(shè)計(jì)時(shí)考慮的主要因素。
軟件采用層次的結(jié)構(gòu)設(shè)計(jì),從下到上分別為數(shù)據(jù)層、服務(wù)層和表現(xiàn)層,各層由多個(gè)模塊組成,模塊間通過接口交換數(shù)據(jù)或提供服務(wù)。
(1)總體設(shè)計(jì)
總體設(shè)計(jì)的目標(biāo)是明確系統(tǒng)的數(shù)據(jù)流和總體框架(如圖3、圖4所示)。
圖3 數(shù)據(jù)流
圖4 系統(tǒng)框架
(2)功能模塊設(shè)計(jì)
依據(jù)功能和服務(wù)類型,為系統(tǒng)定義了兩類模塊,即基本模塊和擴(kuò)展模塊(見圖5)。
圖5 功能模塊結(jié)構(gòu)
基本模塊由通信模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)庫(kù)服務(wù)模塊、日志服務(wù)模塊組成,是軟件核心功能模塊。其中通信模塊實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)連接建立、管理、斷開、網(wǎng)絡(luò)數(shù)據(jù)流接收及資源釋放清理,內(nèi)嵌定位追蹤器的通信協(xié)議,能夠支持多種類型、多個(gè)廠家的定位追蹤器。數(shù)據(jù)庫(kù)服務(wù)模塊提供數(shù)據(jù)庫(kù)相關(guān)服務(wù)?;谇皟蓚€(gè)模塊提供的服務(wù),擴(kuò)展了數(shù)據(jù)處理模塊和日志服務(wù)模塊:數(shù)據(jù)處理模塊內(nèi)嵌坐標(biāo)轉(zhuǎn)換算法,完成信息提取和數(shù)據(jù)轉(zhuǎn)換;日志服務(wù)主要監(jiān)測(cè)系統(tǒng)的運(yùn)行狀況,及時(shí)記錄各種運(yùn)行參數(shù),保障系統(tǒng)穩(wěn)定運(yùn)行。
擴(kuò)展模塊包括權(quán)限管理和表現(xiàn)層。權(quán)限管理包括用戶管理、跟蹤定位終端管理、用戶權(quán)限管理等;表現(xiàn)層主要是定位信息在地圖上的展示,包括位置實(shí)時(shí)跟蹤、軌跡回放、道路里程統(tǒng)計(jì)等前臺(tái)功能。如果選用了擴(kuò)展模塊,該軟件可作為一個(gè)獨(dú)立的系統(tǒng)使用。
(3)關(guān)鍵接口設(shè)計(jì)
軟件設(shè)計(jì)中直接影響系統(tǒng)兼容性的兩個(gè)重要約束條件:
①協(xié)議類型。軟件支持的通信協(xié)議直接關(guān)系到硬件的兼容性,要求具備兼容新通信協(xié)議的能力。
②數(shù)據(jù)格式。跟蹤定位器采集的數(shù)據(jù)是基于WGS84坐標(biāo)系的,為增強(qiáng)對(duì)空間數(shù)據(jù)兼容性,要求能夠提供基于其他坐標(biāo)系的定位數(shù)據(jù)。
為了滿足上述兩個(gè)約束條件,在接口設(shè)計(jì)中運(yùn)用橋接(Bridge)模式[4](圖6),定義了協(xié)議解析接口IDataAnylyse和坐標(biāo)轉(zhuǎn)化抽象類CoordinateTransBase。若要求系統(tǒng)支持新的硬件協(xié)議和數(shù)據(jù)轉(zhuǎn)換方法,只需繼承上述接口,加入新的協(xié)議或數(shù)據(jù)轉(zhuǎn)換算法,系統(tǒng)可以自動(dòng)選擇合適的協(xié)議或算法進(jìn)行數(shù)據(jù)處理。
從開發(fā)效率、穩(wěn)定性、性價(jià)比等多方面考慮,選擇Visual C#為開發(fā)語(yǔ)言,開發(fā)環(huán)境為微軟公司的Visual Studio 2005, GIS平臺(tái)基于Arc Engine 9.2組件開發(fā)。數(shù)據(jù)庫(kù)采用甲骨文公司的Oracle 10g,該數(shù)據(jù)庫(kù)具備良好的擴(kuò)展性、安全性和穩(wěn)定性,支持?jǐn)?shù)據(jù)庫(kù)二次開發(fā)。
跟蹤定位器將獲得位置信息通過GPRS無(wú)線網(wǎng)絡(luò)回傳至服務(wù)器(由IP和端口號(hào)標(biāo)識(shí)),網(wǎng)絡(luò)通信模塊實(shí)現(xiàn)定位信息的接收、處理及資源管理等,該模塊的健壯性直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性。
網(wǎng)絡(luò)通信使用Socket協(xié)議,通信方式有同步阻塞和異步非阻塞兩種類型。其中,同步通信在連接建立后,服務(wù)器會(huì)一直等待客戶端(跟蹤定位器)發(fā)送信息,為在線等待;異步通信在連接建立后馬上返回,一旦有信息發(fā)送,以回調(diào)(Callback)的方式接收并解析信息,為非在線等待[7]。為了高效使用有限的資源,采用異步非阻塞通信和多線程并發(fā)處理網(wǎng)絡(luò)事務(wù)。處理流程如圖7所示。
圖6 接口結(jié)構(gòu)
圖7 網(wǎng)絡(luò)通信流程
三個(gè)線程并行完成網(wǎng)絡(luò)連接建立、通信資源管理和定位數(shù)據(jù)接收,進(jìn)程間通過公共內(nèi)存進(jìn)行數(shù)據(jù)交換。該模塊以幀為單位處理數(shù)據(jù),并解決接收過程中數(shù)據(jù)幀恢復(fù)、粘包等問題。
在系統(tǒng)數(shù)據(jù)處理流程中,不同環(huán)節(jié)耗時(shí)、運(yùn)算速度不一致,當(dāng)并發(fā)終端達(dá)到一定數(shù)量后,將會(huì)發(fā)生數(shù)據(jù)阻塞,消耗大量資源,軟件無(wú)法正常的運(yùn)行下去。在軟件實(shí)現(xiàn)中,通過建立多個(gè)緩存來(lái)解決數(shù)據(jù)阻塞,協(xié)調(diào)模塊間的數(shù)據(jù)處理速度不一致的情況。
經(jīng)過測(cè)試,存在數(shù)據(jù)阻塞的部分包括協(xié)議解析與數(shù)據(jù)轉(zhuǎn)換的數(shù)據(jù)交換、數(shù)據(jù)轉(zhuǎn)換與界面展現(xiàn)的數(shù)據(jù)交換(參見圖3)。其中,前者在并發(fā)量較大的情況下會(huì)出現(xiàn)數(shù)據(jù)阻塞;后者由于承擔(dān)繁重的繪圖工作,處理速度較慢,數(shù)據(jù)阻塞的情況比較嚴(yán)重。
構(gòu)建緩存的思路是在兩個(gè)處理過程間開辟一塊公共內(nèi)存來(lái)協(xié)調(diào)兩個(gè)過程的數(shù)據(jù)交換。工作時(shí),數(shù)據(jù)傳遞方將數(shù)據(jù)寫入公共內(nèi)存,而非直接傳遞給數(shù)據(jù)接收方;數(shù)據(jù)接收方則依據(jù)自身的運(yùn)行速率,在上一個(gè)操作完成后從公共內(nèi)存中讀取數(shù)據(jù),暫時(shí)無(wú)法處理的數(shù)據(jù)依然存在于公共內(nèi)存中,等待下一次讀取。通過公共內(nèi)存的構(gòu)建,可以有效的避免數(shù)據(jù)傳遞方與數(shù)據(jù)接收方由于運(yùn)行速率不同導(dǎo)致的數(shù)據(jù)阻塞和丟失。
地圖繪制是單線程執(zhí)行,是整個(gè)系統(tǒng)消耗資源最多、運(yùn)行最慢的部分。在Arc Engine中,顯示子系統(tǒng)管理著地圖的顯示和刷新,異步顯示刷新和密集的地圖渲染操作能導(dǎo)致CPU的大量運(yùn)算操作。CPU的負(fù)載能夠延遲,甚至阻止地圖顯示刷新和用戶對(duì)地圖顯示的交互,從而降低了系統(tǒng)的實(shí)時(shí)性。而Arc Engine提供的動(dòng)態(tài)顯示技術(shù)則提供了一種同步刷新機(jī)制,將密集的圖形渲染工作負(fù)擔(dān)從CPU運(yùn)算轉(zhuǎn)移到圖形設(shè)備硬件上來(lái),能夠讓許多的移動(dòng)對(duì)象實(shí)現(xiàn)快速刷新[8]。在本系統(tǒng)中就采用了動(dòng)態(tài)顯示技術(shù)實(shí)現(xiàn)監(jiān)控目標(biāo)的實(shí)時(shí)顯示刷新,可同時(shí)動(dòng)態(tài)顯示500個(gè)以內(nèi)的目標(biāo)。
高時(shí)態(tài)地圖繪制是通過動(dòng)態(tài)圖層實(shí)現(xiàn)的,通過重寫Arc Engine里的ILayer, IDynamicLayer, ILayerExtensions等接口,重寫動(dòng)態(tài)圖層繪制事件,通過自定義地圖刷新頻率實(shí)時(shí)在地圖上顯示更新數(shù)據(jù)。
地圖動(dòng)態(tài)繪制的主要代碼如下所示:
public override void DrawDynamicLayer(esriDynamicDrawPhase DynamicDrawPhase, IDisplay Display,IDynamicDisplay DynamicDisplay)
{
m_dynamicProperties.SetScale(esriDynamicSymbolType.esriDSymbolText, 1.0f, 1.0f);
m_dynamicProperties.SetColor(esriDynamicSymbolType.esriDSymbolText, 1.0f, 1.0f, 1.0f, 1.0f);
m_dynamicProperties.set_RotationAlignment(esriDynamicSymbolType.esriDSymbolMarker, esriDynamicSymbolRotationAlignment.esriDSRANorth);
m_dynamicProperties.set_Smooth(esriDynamicSymbolType.esriDSymbolLine, true);
DynamicDisplay.DrawPolyline(pc);
}
GPS定位跟蹤系統(tǒng)綜合運(yùn)用GIS技術(shù)、網(wǎng)絡(luò)通信技術(shù),實(shí)現(xiàn)了對(duì)車輛、人員等目標(biāo)的監(jiān)控定位,具備兼容多種硬件協(xié)議和提供多種坐標(biāo)定位數(shù)據(jù)的能力。在運(yùn)行階段,系統(tǒng)支持的并發(fā)量為100臺(tái)左右,容量可達(dá)300~500臺(tái),而且采用GPRS通信方式,成本低廉,能夠較好的滿足中小項(xiàng)目對(duì)GPS定位跟蹤服務(wù)的需求。目前,該軟件已成功的應(yīng)用于哈爾濱市數(shù)字城市規(guī)劃監(jiān)察系統(tǒng)(如圖8所示)。
圖8 系統(tǒng)界面
在系統(tǒng)的實(shí)際應(yīng)用中,該軟件還存在以下幾個(gè)方面的不足:
(1)高時(shí)態(tài)地圖繪制加快了地圖刷新速度,但對(duì)用戶交互的響應(yīng)時(shí)間較長(zhǎng),用戶操作不十分流暢,一定程度影響了用戶體驗(yàn)。該問題可能與Arc Engine版本有關(guān),在9.3版本中,動(dòng)態(tài)顯示技術(shù)得到了較大改善,屆時(shí)可以解決該問題。
(2)欠缺發(fā)送跟蹤定位器指令功能。由于硬件廠家不同,跟蹤定位器的控制指令格式、發(fā)送方式等存在較大差異,只能定制實(shí)現(xiàn)。
[1] 許建峰.基于GPS/GPRS的車輛管理系統(tǒng)的設(shè)計(jì)與研究[D].南京:南京理工大學(xué),2008
[2] 杜江平.基于GPS/GIS車輛定位導(dǎo)航系統(tǒng)的研究[D].成都:電子科技大學(xué),2009
[3] 王海亮,林立新,于三祿,等.精通Oracle 10g PL/SQL編程[M].北京:中國(guó)水利水電出版社,2004
[4] Erich Gamma, Richard Helm, Ralph Johnson, et c.設(shè)計(jì)模式[M].北京:機(jī)械工業(yè)出版社,2008
[5] 畢碩本,王 橋,徐秀華.地理信息系統(tǒng)軟件工程的原理和方法[M].北京:科學(xué)出版社,2003
[6] 李征航,黃勁松,GPS測(cè)量與數(shù)據(jù)處理[M].武漢:武漢大學(xué)出版社,2005
[7] Christian Nagel, Bill Evjen, Jay Glynn,C#高級(jí)編程[M].北京:清華大學(xué)出版社,2002
[8] 韓 鵬,王 泉,王 鵬,等.地理信息系統(tǒng)開發(fā)-ArcEngine方法[M].武漢:武漢大學(xué)出版社,2008