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