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