彭 可,范 平,余 凱
(湖北科技學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 咸寧 437100)
隨著時(shí)代的發(fā)展,汽車數(shù)量的劇增,交通管理以及車輛安全越來(lái)越受到重視。雖然現(xiàn)在已經(jīng)有很多成熟的監(jiān)控系統(tǒng)或監(jiān)控技術(shù),比如利用高清攝像頭定點(diǎn)監(jiān)控或利用高清攝像頭實(shí)時(shí)監(jiān)控,然而基于Web形式的監(jiān)控系統(tǒng)卻很少見。隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展以及移動(dòng)互聯(lián)網(wǎng)設(shè)備的普及,采用Web形式的監(jiān)控系統(tǒng)將會(huì)廣泛被人們接受和應(yīng)用。
基于Web的GPS監(jiān)控系統(tǒng),能夠?qū)崿F(xiàn)車輛運(yùn)行狀態(tài),能夠?qū)囕v的實(shí)時(shí)監(jiān)控,能夠?qū)崟r(shí)查看車輛的地理位置,并能結(jié)合百度地圖實(shí)時(shí)顯示車輛位置。不僅可以保證車輛的安全,更可以用在對(duì)道路的交通管理,本系統(tǒng)也可應(yīng)用與智能交通系統(tǒng)中。
系統(tǒng)采用了Jquery模塊化調(diào)用方式,方便了對(duì)文檔對(duì)象的操作;同時(shí)使用了支持動(dòng)態(tài)從數(shù)據(jù)庫(kù)引入數(shù)據(jù)的dtree、使用Ajax技術(shù),使程序更小、更快;使用Json文本格式,采用Net平臺(tái),使程序更加合理,開發(fā)更加迅捷。
系統(tǒng)采用B/S架構(gòu),由上至下依次可分為三個(gè)層次,表現(xiàn)層,業(yè)務(wù)邏輯層和數(shù)據(jù)層。如圖1所示:
圖1 系統(tǒng)組織架構(gòu)圖
表現(xiàn)層:通過瀏覽器向用戶展示相應(yīng)數(shù)據(jù)處理結(jié)果;在本系統(tǒng)中表現(xiàn)形式為直接通過圖形化界面將所有結(jié)果顯示出來(lái);
業(yè)務(wù)邏輯層:處理業(yè)務(wù)邏輯,包括GPS服務(wù)器,WEB服務(wù)器,GIS服務(wù)器;
數(shù)據(jù)層:實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),用來(lái)實(shí)時(shí)存儲(chǔ)GPS信息數(shù)據(jù),同時(shí)通過固定接口與業(yè)務(wù)邏輯層進(jìn)行數(shù)據(jù)的交互,同時(shí)完成業(yè)務(wù)邏輯層的數(shù)據(jù)處理指令。
1.最后位置
查詢車輛保存在數(shù)據(jù)庫(kù)中的最后時(shí)刻的經(jīng)緯度坐標(biāo),車輛的行駛軌跡將會(huì)被記錄在數(shù)據(jù)庫(kù)中,選擇車輛后,業(yè)務(wù)邏輯層便會(huì)查詢?cè)撥囕v的最后記錄位置,在百度地圖上顯示出來(lái)。
2.實(shí)時(shí)監(jiān)控
實(shí)時(shí)監(jiān)控是定時(shí)返回車輛位置的功能,終端每10秒上傳一個(gè)新的位置點(diǎn),系統(tǒng)設(shè)置為每10秒查詢服務(wù)端是否有新信息點(diǎn),如果有新信息,則更新地圖上車輛的位置。核心代碼如下:
for(var i=0;i { map.removeOverlay(markListWatch[i].gmark); } markListWatch.length = 0; timer_url = createUrlLjj(ACT_POS_LAST + "&p1=" + id); g_trackFlag=1; isShishi = "1"; DingShiQi=0; mapTimer(); 3.歷史軌跡回放 選擇需要查詢的車輛之后,選擇起始時(shí)間和結(jié)束時(shí)間,即可查詢相應(yīng)時(shí)間段內(nèi)該車輛的行駛軌跡。查詢時(shí)業(yè)務(wù)邏輯層將該車輛在查詢時(shí)間內(nèi)之中的行駛軌跡數(shù)據(jù)取出來(lái),在顯示層即在地圖上按坐標(biāo)顯示出來(lái)。核心是先從數(shù)據(jù)庫(kù)服務(wù)器中將歷史軌跡點(diǎn)取出來(lái),以Json對(duì)象的形式,通過Ajax形式傳到前臺(tái)頁(yè)面,然后利用百度地圖提供的Api函數(shù),將點(diǎn)按照時(shí)間順序連成線并播放,從而實(shí)現(xiàn)車輛歷史軌跡回放。 歷史軌跡的具體實(shí)現(xiàn)核心算法代碼: if ((PointList != null) && (PointList.length % 2 == 0) && (pos[15] != null)) { for (var i = 0;i < (PointList.length / 2);i++) { Points.push(new BMap.Point(PointList[i * 2],PointList[i * 2 + 1])); } } 4.地圖標(biāo)注 標(biāo)注是用來(lái)表示一個(gè)點(diǎn)位置的可見元素,每個(gè)標(biāo)注自身都包含地理信息。一個(gè)標(biāo)注不論地圖移動(dòng)、縮放,標(biāo)注都會(huì)跟隨一起移動(dòng),保證了標(biāo)注始終指向正確的地理位置。從DOM元素構(gòu)成角度看,一個(gè)完整的標(biāo)注包含標(biāo)注點(diǎn)擊區(qū)域、標(biāo)注圖標(biāo)、標(biāo)注陰影,示意圖如圖2所示: 圖2 地圖標(biāo)注示意圖 timer_url = createUrlLjj(ACT_AJAX_BIAOZHU + "&type=0&p1=" + biaozhula + "&p2=" + biaozhulo + "&p3=" + escape(text.toString()) + "&p4=" + id + "&p5=" + escape(xinxi.toString())); mapbiaozhudian(); 5.地圖搜索 在搜索條件區(qū)內(nèi)要搜索的地址,地圖會(huì)顯示你要搜索的地方,但是存在有些過于詳細(xì)的地址可能搜索不到,核心代碼如下: function showAddress_BaiDuMap() { var address = document.getElementById("textaddress").value; var local = new BMap.LocalSearch(map,{ renderOptions:{ map:map } }); local.search(address); } 6.設(shè)置圍欄 設(shè)置電子圍欄的目的是,確保目標(biāo)車輛有規(guī)定的行駛范圍,系統(tǒng)實(shí)現(xiàn)了矩形和多邊形圍欄。利用百度地圖的API接口可以在地圖上畫出一個(gè)封閉的矩形或者多邊形區(qū)域,將指令下發(fā)給設(shè)備端。設(shè)備端根據(jù)當(dāng)前的GPS經(jīng)緯度來(lái)判斷車輛是否在規(guī)定區(qū)域內(nèi)。 判斷車輛是否在圍欄內(nèi),實(shí)際上就是判斷點(diǎn)是否在多邊形內(nèi),通常采用射線法。 射線法判斷原理:從判斷點(diǎn)向X軸正方向作一條射線,然后計(jì)算該射線與多邊形每條邊的交點(diǎn)個(gè)數(shù),如果沒有交點(diǎn)或者交點(diǎn)個(gè)數(shù)為偶數(shù),那么點(diǎn)位于多邊形外部,如果交點(diǎn)個(gè)數(shù)為奇數(shù),那么點(diǎn)位于多邊形內(nèi)部。 如圖3所示:點(diǎn)P1沿X軸正方向的射線與圖形S的交點(diǎn)個(gè)數(shù)為2,點(diǎn)P1位于圖形S外部;點(diǎn)P2與圖形S的交點(diǎn)個(gè)數(shù)為1,點(diǎn)P2位于圖形S的內(nèi)部。 圖3 射線法原理圖 具體實(shí)現(xiàn)方法:點(diǎn)的Y值大于等于多邊形上某個(gè)線段的最小值且小于該線段上的最大值,在該線段上取一個(gè)y值為點(diǎn)P.y的點(diǎn)P1。如果P.x 判斷車輛是否在區(qū)域內(nèi)的流程圖如下: 程序返回true時(shí),表示點(diǎn)在多邊形區(qū)域內(nèi),即車輛在規(guī)定區(qū)域內(nèi),否則返回false,即車輛不在規(guī)定區(qū)域內(nèi),這是可以告警,表示當(dāng)前車輛已開出規(guī)定的區(qū)域范圍。 搭建基于Web的GPS監(jiān)控系統(tǒng)環(huán)境成本較低,可實(shí)時(shí)監(jiān)控多輛車輛,實(shí)時(shí)性高,可同時(shí)在多處Web瀏覽器上同時(shí)監(jiān)控某一輛車輛,執(zhí)行速度較快,安全性較高,因此有非常廣闊的市場(chǎng)前景,且使用時(shí)利用Web形式界面顯示操作簡(jiǎn)單方便,易于被大眾所接受。記錄車輛的歷史行駛軌跡有助于保證車輛及車主的安全,若發(fā)生車輛被偷盜的現(xiàn)象,首先可根據(jù)實(shí)時(shí)監(jiān)控發(fā)現(xiàn)車輛,若不能夠?qū)崟r(shí)發(fā)現(xiàn)車輛,即可根據(jù)歷史行駛軌跡查看車輛的行駛軌跡和最后出現(xiàn)位置。在系統(tǒng)中可將車輛的常用行駛區(qū)域設(shè)置為圍欄,當(dāng)車輛超出圍欄后即發(fā)布預(yù)警,設(shè)置車輛行駛區(qū)域后即可保證車輛的安全。 本系統(tǒng)主要從實(shí)際出發(fā)利用程序輸入設(shè)置車輛值從原理上設(shè)計(jì)并實(shí)現(xiàn)了系統(tǒng)應(yīng)具有的功能,若要實(shí)際應(yīng)用還需要進(jìn)行車載設(shè)備端的設(shè)計(jì)。三、結(jié)束語(yǔ)