潘麗陽 (中海油田服務(wù)股份有限公司,天津 300450)
目前,監(jiān)控中心部分對GPS數(shù)據(jù)的接收以及對GPS終端的控制主要是通過計(jì)算機(jī)串口與GSM終端模塊 (手機(jī)接收模塊)相連,然后通過AT指令控制GSM模塊的動(dòng)作來完成的,實(shí)現(xiàn)起來相對繁瑣,耗時(shí)[1-2]。如何將GPS目標(biāo)快速而且正確地顯示在地圖上很值得研究。
本文的研究基于靈圖的二次開發(fā)平臺(tái),靈圖的設(shè)計(jì)采用了美國微軟公司提出的編程標(biāo)準(zhǔn)——COM技術(shù) (ComponentObject Model)。通過 COM技術(shù)實(shí)現(xiàn)了整個(gè) GIS(Geographic Information System)的底層,并在該底層的基礎(chǔ)上完成了GPS監(jiān)控系統(tǒng)開發(fā)控件。提供用于GIS管理與GPS監(jiān)控功能的API,開發(fā)可以在各種流行的開發(fā)平臺(tái)下進(jìn)行,將空間信息管理和GPS監(jiān)控融入到應(yīng)用系統(tǒng)中。
靈圖二次開發(fā)平臺(tái)的體系結(jié)構(gòu)如圖1所示。一般情況下,靈圖二次開發(fā)平臺(tái)中不提供自建地圖的功能,而物流配送客戶的空間屬性可能并不包含在靈圖公司提供的地圖當(dāng)中,需要自身創(chuàng)建客戶空間數(shù)據(jù)庫來完成系統(tǒng)與地圖間的結(jié)合。
地圖數(shù)據(jù)是配送系統(tǒng)運(yùn)行的關(guān)鍵一環(huán),正確有效地對地圖數(shù)據(jù)分析建模是提高系統(tǒng)性能的關(guān)鍵。地圖數(shù)據(jù)主要分為兩大類:一類是空間數(shù)據(jù),反映事物地理空間位置的信息;另一類是屬性數(shù)據(jù),反映事物的其他信息。圖2描述了配送系統(tǒng)地圖數(shù)據(jù)的結(jié)構(gòu)組成。
圖1 靈圖GIS二次開發(fā)平臺(tái)體系結(jié)構(gòu)
靈圖的二次開發(fā)平臺(tái)不提供自建地圖的功能,需要自己建立相關(guān)的地圖,也就不能完全照搬其采用的數(shù)據(jù)結(jié)構(gòu)。但在靈圖的二次開發(fā)平臺(tái)中提供了相關(guān)的地圖操作功能,我們可以根據(jù)自己的數(shù)據(jù)來模擬現(xiàn)實(shí)中的配送網(wǎng)絡(luò)。而路網(wǎng)數(shù)據(jù)庫的建立,能提供對于以后路線規(guī)劃和路線現(xiàn)實(shí)的支持。
在本文中,路網(wǎng)數(shù)據(jù)庫采用表1、表2、表3來表示。
圖2 配送系統(tǒng)地圖數(shù)據(jù)結(jié)構(gòu)
表1 節(jié)點(diǎn)信息表
表2 路段-節(jié)點(diǎn)信息表
表3 路段信息表
靈圖GIS二次開發(fā)平臺(tái)沒有開放地圖數(shù)據(jù)庫,但提供了對地圖進(jìn)行操作的接口,根據(jù)自定義的路網(wǎng)數(shù)據(jù)庫與地圖相結(jié)合來實(shí)現(xiàn)路線的顯示。
根據(jù)靈圖GIS二次開發(fā)平臺(tái)的體系結(jié)構(gòu),我們對地圖操作的一般方法為取得當(dāng)前地圖對象,然后得到所需操作的圖層對象,然后在圖層對象上進(jìn)行需要的操作。
比如需要在地圖上添加我們需要的地物對象的一般方法為:
根據(jù)這種方法,自己定義的車輛路線地圖顯示情況如圖3所示:
在靈圖GIS組件中,負(fù)責(zé)與GSM連接程序通訊的是LtComLink.DLL組件,它是基于COM連接點(diǎn)、事件驅(qū)動(dòng)的機(jī)制實(shí)現(xiàn)的。在COM中,客戶與組件之間的通信一般是單向的,也就是客戶創(chuàng)建組件對象,并通過組件對象暴露的入接口 (Incoming Interface)調(diào)用組件的服務(wù)。但COM還支持反向通信,組件對象通過出接口 (Outcoming Interface)調(diào)用客戶接收器實(shí)現(xiàn)服務(wù),從而實(shí)現(xiàn)雙向通信[3-4]。如果一個(gè)COM對象支持一個(gè)或多個(gè)出接口,則該對象是可連接的,稱為可接連對象 (Connectable Object) 或源對象 (Source Object)??蛇B接對象的出接口也是COM接口,它包含一組成員函數(shù),這組函數(shù)是由客戶中的接收器而不是組件對象實(shí)現(xiàn)的,叫出接口。每個(gè)成員函數(shù)代表了一個(gè)事件、一個(gè)通知或一個(gè)請求,對象激發(fā)的事件或發(fā)出的通知、請求調(diào)用這些成員函數(shù)。圖4所示為連接點(diǎn)基本原。在圖中涉及三個(gè)部分客戶、對象和接收器:首先是可連接對象的客戶 (Client),它通過對象(Connectable Object)的入接口按通常的方式與對象通信;其次是對象 (Connectable Object)為了使對象能反向與客戶(Client)通信,對象 (Connectable Object)必須得到一個(gè)在客戶中某處實(shí)現(xiàn)的出接口的指針,通過該指針,對象能發(fā)事件、通知或請求給客戶。這就是接收器 (CSink)要實(shí)現(xiàn)的功能。接收器本身是一個(gè)簡單的對象,它的創(chuàng)建完全是客戶程序內(nèi)部的事情,是相對獨(dú)立的對象,有自己的引用計(jì)數(shù)和接口查詢方法即QuerryInterface成員函數(shù)。
可連接對象的實(shí)現(xiàn)機(jī)制如圖5所示。在一個(gè) COM 組件,允許有多個(gè)連接點(diǎn)對象 (IConnectionPoint)。他們可以提供多個(gè)發(fā)生 “事件”的源頭。而管理這些連接點(diǎn)的接口叫做 “連接點(diǎn)容器” (IConnectionPointContainer)。連接點(diǎn)容器接口有 2個(gè)函數(shù),一個(gè)是FindConnectionPoint(),表示要查找的連接點(diǎn);另一個(gè)是 EnumConnectionPoints(),表示列出所有的連接點(diǎn),然后選擇使用哪個(gè)接口。在連接點(diǎn)對象中不能通過組件對象的QuerryInterface得到,而只能通過以上連接點(diǎn)容器提供的函數(shù)得到。同時(shí),每一個(gè)連接點(diǎn),也可以被多個(gè)客戶端的接收器 (Sink)連接,實(shí)現(xiàn) “事件”相應(yīng)。
根據(jù)以上的思路,只需要根據(jù)GSM連接程序設(shè)定定義的格式來發(fā)送或接收數(shù)據(jù)就能控制終端或者得到需要的GPS數(shù)據(jù)。
圖3 車輛路線模擬
圖5 連接點(diǎn)實(shí)現(xiàn)機(jī)制
利用以上的方法實(shí)現(xiàn)GPS/GIS的配送路線信息集成能取得預(yù)想的效果,具有較強(qiáng)的可操作性。
圖4 連接點(diǎn)原理
[1] 夏定輝,高成發(fā).車載GPS監(jiān)控調(diào)度系統(tǒng)的開發(fā)與應(yīng)用[J].公路交通科技,2004(6):11-13.
[2] 徐雅斌,李昕,張曉宇.基于GPS的車輛監(jiān)控系統(tǒng)的設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2003(9):30-33.
[3] 潘愛民.COM原理與應(yīng)用[M].北京:清華大學(xué)出版社,2001.
[4] 紀(jì)淑琴,王樹明,等.COM中的可連接對象與連接點(diǎn)機(jī)制及其實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2004(7):44-47.