陳祥蔥 焦德杰 李 浩
(1.哈爾濱市勘察測繪研究院, 黑龍江哈爾濱 150010; 2.黑龍江省城市規劃勘測設計研究院, 黑龍江哈爾濱 150040)
GPS提供了覆蓋全球范圍、全天候、高精度的定位導航服務。目前,隨著通信技術的發展和硬件成本的減低,基于GPS的跟蹤定位服務逐漸由特殊領域走向普通大眾,被廣泛的應用于車輛管理、車輛調度、車輛防盜、人員定位等領域,成為空間位置服務的重要內容之一,并支撐著數字城管、數字城市規劃監察、智能交通等數字城市管理與應用。
在現階段進行的行業應用系統、政府信息化管理等項目中,都提出了對GPS跟蹤定位的需求,要求定位服務能夠與GIS、業務系統無縫結合,充分發揮其監控調度功能。但在項目實施中,由于受硬件廠家、通信協議、數據源、計算機硬件資源等因素的影響,開發的GPS定位跟蹤系統均存在著移植困難、兼容性擴展性差等問題。本文通過多個項目的實際需求,采用ESRI公司提供的Arc Engine嵌入式開發組件,以模塊化思想設計開發能夠靈活移植,具備良好的擴展性和穩定性的GPS定位追蹤系統。
系統由跟蹤定位器和服務接收軟件組成(見圖1)。跟蹤定位器實現定位信息的采集和數據傳輸,服務接收軟件實現定位信息接收、解析、轉換、展現等數據處理和服務功能。
跟蹤定位器內嵌GPS定位模塊和通信模塊:前者通過接收GPS衛星信號實時采集目標的位置、速度、移動方向等信息,按照協議標準生成定位數據;后者實現通信功能,通過GPRS傳輸定位信息。目前,市場上已有很多成熟的GPS跟蹤定位器,如維臣、衛通達等硬件廠商。由于硬件廠商不同,跟蹤定位器使用的通信協議也存在較大差異,為滿足多個項目的需求,兼容不同廠家的通信協議是軟件設計的重要約束條件。
服務接收軟件為服務器程序,主要功能包括接收跟蹤定位器的連接請求,接收數據并獲取跟蹤目標位置、速度、移動方向等信息,與地理信息系統、行業應用相聯系,提供跟蹤定位、監控調度等服務。服務接收軟件的設計開發是本文研究的主要內容。
系統采用Oracle 10g管理存儲數據,其存儲的數據包括系統管理參數、用戶信息、系統日志信息和GPS定位數據,其核心和主體為GPS定位數據。GPS定位數據隨著時間逐漸累積,可達百萬條記錄,會極大地影響檢索效率和穩定性,是數據庫設計時需解決的主要問題。

圖1 系統結構
對定位數據使用頻率進行了分析,將其分為兩類:活躍數據和靜態數據。活躍數據指使用比較頻繁的數據,一般為接收時間較短的數據;反之為靜態數據,為接收時間較長的歷史數據。在數據庫設計時,對活躍數據和靜態數據分開存儲,設計了活動表和靜態表。活動表存儲當前或近期內接收的定位數據,在達到一定條件(記錄數達到20萬)后將將定位數據轉存至靜態表;靜態表存儲歷史定位數據,其搜索優先級按時間確定,即時效性高的數據優先搜索(圖2),靜態表的創建和定位數據轉存通過數據庫觸發器實現[3]。

圖2 定位數據存儲
軟件設計的目標是定義軟件結構層次,劃分軟件功能模塊,定義模塊接口。軟件的穩定性、運行效率、可擴展性和可移植性是軟件設計時考慮的主要因素。
軟件采用層次的結構設計,從下到上分別為數據層、服務層和表現層,各層由多個模塊組成,模塊間通過接口交換數據或提供服務。
(1)總體設計
總體設計的目標是明確系統的數據流和總體框架(如圖3、圖4所示)。

圖3 數據流

圖4 系統框架
(2)功能模塊設計
依據功能和服務類型,為系統定義了兩類模塊,即基本模塊和擴展模塊(見圖5)。

圖5 功能模塊結構
基本模塊由通信模塊、數據處理模塊、數據庫服務模塊、日志服務模塊組成,是軟件核心功能模塊。其中通信模塊實現對網絡連接建立、管理、斷開、網絡數據流接收及資源釋放清理,內嵌定位追蹤器的通信協議,能夠支持多種類型、多個廠家的定位追蹤器。數據庫服務模塊提供數據庫相關服務?;谇皟蓚€模塊提供的服務,擴展了數據處理模塊和日志服務模塊:數據處理模塊內嵌坐標轉換算法,完成信息提取和數據轉換;日志服務主要監測系統的運行狀況,及時記錄各種運行參數,保障系統穩定運行。
擴展模塊包括權限管理和表現層。權限管理包括用戶管理、跟蹤定位終端管理、用戶權限管理等;表現層主要是定位信息在地圖上的展示,包括位置實時跟蹤、軌跡回放、道路里程統計等前臺功能。如果選用了擴展模塊,該軟件可作為一個獨立的系統使用。
(3)關鍵接口設計
軟件設計中直接影響系統兼容性的兩個重要約束條件:
①協議類型。軟件支持的通信協議直接關系到硬件的兼容性,要求具備兼容新通信協議的能力。
②數據格式。跟蹤定位器采集的數據是基于WGS84坐標系的,為增強對空間數據兼容性,要求能夠提供基于其他坐標系的定位數據。
為了滿足上述兩個約束條件,在接口設計中運用橋接(Bridge)模式[4](圖6),定義了協議解析接口IDataAnylyse和坐標轉化抽象類CoordinateTransBase。若要求系統支持新的硬件協議和數據轉換方法,只需繼承上述接口,加入新的協議或數據轉換算法,系統可以自動選擇合適的協議或算法進行數據處理。
從開發效率、穩定性、性價比等多方面考慮,選擇Visual C#為開發語言,開發環境為微軟公司的Visual Studio 2005, GIS平臺基于Arc Engine 9.2組件開發。數據庫采用甲骨文公司的Oracle 10g,該數據庫具備良好的擴展性、安全性和穩定性,支持數據庫二次開發。
跟蹤定位器將獲得位置信息通過GPRS無線網絡回傳至服務器(由IP和端口號標識),網絡通信模塊實現定位信息的接收、處理及資源管理等,該模塊的健壯性直接關系到整個系統的穩定性。
網絡通信使用Socket協議,通信方式有同步阻塞和異步非阻塞兩種類型。其中,同步通信在連接建立后,服務器會一直等待客戶端(跟蹤定位器)發送信息,為在線等待;異步通信在連接建立后馬上返回,一旦有信息發送,以回調(Callback)的方式接收并解析信息,為非在線等待[7]。為了高效使用有限的資源,采用異步非阻塞通信和多線程并發處理網絡事務。處理流程如圖7所示。

圖6 接口結構

圖7 網絡通信流程
三個線程并行完成網絡連接建立、通信資源管理和定位數據接收,進程間通過公共內存進行數據交換。該模塊以幀為單位處理數據,并解決接收過程中數據幀恢復、粘包等問題。
在系統數據處理流程中,不同環節耗時、運算速度不一致,當并發終端達到一定數量后,將會發生數據阻塞,消耗大量資源,軟件無法正常的運行下去。在軟件實現中,通過建立多個緩存來解決數據阻塞,協調模塊間的數據處理速度不一致的情況。
經過測試,存在數據阻塞的部分包括協議解析與數據轉換的數據交換、數據轉換與界面展現的數據交換(參見圖3)。其中,前者在并發量較大的情況下會出現數據阻塞;后者由于承擔繁重的繪圖工作,處理速度較慢,數據阻塞的情況比較嚴重。
構建緩存的思路是在兩個處理過程間開辟一塊公共內存來協調兩個過程的數據交換。工作時,數據傳遞方將數據寫入公共內存,而非直接傳遞給數據接收方;數據接收方則依據自身的運行速率,在上一個操作完成后從公共內存中讀取數據,暫時無法處理的數據依然存在于公共內存中,等待下一次讀取。通過公共內存的構建,可以有效的避免數據傳遞方與數據接收方由于運行速率不同導致的數據阻塞和丟失。
地圖繪制是單線程執行,是整個系統消耗資源最多、運行最慢的部分。在Arc Engine中,顯示子系統管理著地圖的顯示和刷新,異步顯示刷新和密集的地圖渲染操作能導致CPU的大量運算操作。CPU的負載能夠延遲,甚至阻止地圖顯示刷新和用戶對地圖顯示的交互,從而降低了系統的實時性。而Arc Engine提供的動態顯示技術則提供了一種同步刷新機制,將密集的圖形渲染工作負擔從CPU運算轉移到圖形設備硬件上來,能夠讓許多的移動對象實現快速刷新[8]。在本系統中就采用了動態顯示技術實現監控目標的實時顯示刷新,可同時動態顯示500個以內的目標。
高時態地圖繪制是通過動態圖層實現的,通過重寫Arc Engine里的ILayer, IDynamicLayer, ILayerExtensions等接口,重寫動態圖層繪制事件,通過自定義地圖刷新頻率實時在地圖上顯示更新數據。
地圖動態繪制的主要代碼如下所示:
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定位跟蹤系統綜合運用GIS技術、網絡通信技術,實現了對車輛、人員等目標的監控定位,具備兼容多種硬件協議和提供多種坐標定位數據的能力。在運行階段,系統支持的并發量為100臺左右,容量可達300~500臺,而且采用GPRS通信方式,成本低廉,能夠較好的滿足中小項目對GPS定位跟蹤服務的需求。目前,該軟件已成功的應用于哈爾濱市數字城市規劃監察系統(如圖8所示)。

圖8 系統界面
在系統的實際應用中,該軟件還存在以下幾個方面的不足:
(1)高時態地圖繪制加快了地圖刷新速度,但對用戶交互的響應時間較長,用戶操作不十分流暢,一定程度影響了用戶體驗。該問題可能與Arc Engine版本有關,在9.3版本中,動態顯示技術得到了較大改善,屆時可以解決該問題。
(2)欠缺發送跟蹤定位器指令功能。由于硬件廠家不同,跟蹤定位器的控制指令格式、發送方式等存在較大差異,只能定制實現。
[1] 許建峰.基于GPS/GPRS的車輛管理系統的設計與研究[D].南京:南京理工大學,2008
[2] 杜江平.基于GPS/GIS車輛定位導航系統的研究[D].成都:電子科技大學,2009
[3] 王海亮,林立新,于三祿,等.精通Oracle 10g PL/SQL編程[M].北京:中國水利水電出版社,2004
[4] Erich Gamma, Richard Helm, Ralph Johnson, et c.設計模式[M].北京:機械工業出版社,2008
[5] 畢碩本,王 橋,徐秀華.地理信息系統軟件工程的原理和方法[M].北京:科學出版社,2003
[6] 李征航,黃勁松,GPS測量與數據處理[M].武漢:武漢大學出版社,2005
[7] Christian Nagel, Bill Evjen, Jay Glynn,C#高級編程[M].北京:清華大學出版社,2002
[8] 韓 鵬,王 泉,王 鵬,等.地理信息系統開發-ArcEngine方法[M].武漢:武漢大學出版社,2008