周喜平 姜斌
摘要:在車輛監(jiān)控的地圖上,繪制一種基于矩形、圓形、多邊形的電子圍欄,當(dāng)車輛在區(qū)域內(nèi)滿足相應(yīng)條件的時(shí)候,能夠報(bào)警或者做一些其他聯(lián)動(dòng)處理。利用車輛GPS坐標(biāo)結(jié)合電子圍欄的地圖信息,建立數(shù)學(xué)模型,設(shè)計(jì)算法,并通過編程實(shí)現(xiàn)車輛出區(qū)入?yún)^(qū)的判斷。該設(shè)計(jì)通過實(shí)際應(yīng)用,效果較好。
關(guān)鍵詞:車輛監(jiān)控;電子圍欄;出區(qū)入?yún)^(qū);GPS坐標(biāo)
中圖分類號:TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號:1009-3044(2016)13-0107-03
Abstract: On the vehicle monitoring map, draw a rectangle, circle, polygon of the electronic fence, when the vehicle in the area to meet the appropriate conditions, can alarm or do some other linkage processing. By using the GPS coordinate of the vehicle and the map information of the electronic fence, the mathematical model is built, and the algorithm is designed. This software is implemented by programming. This software through the practical application, the effect is good.
key words: vehicle monitoring ;electronic fence;GPS coordinate
1 背景
基于地圖的車輛監(jiān)控系統(tǒng)中,電子圍欄是一個(gè)非常實(shí)用的功能。所謂電子圍欄,就是在地圖上繪制一個(gè)圖形區(qū)域,如果車輛進(jìn)入或者離開該區(qū)域,監(jiān)控系統(tǒng)會(huì)按照事先設(shè)定的條件,觸發(fā)相關(guān)的處理程序。該區(qū)域可以是規(guī)則的矩形、圓形,也可以是不規(guī)則的圖形,比如不規(guī)則的多邊形。本設(shè)計(jì)針對矩形、圓形和不規(guī)則的多邊形,進(jìn)行討論,提供一種解決方法,設(shè)計(jì)實(shí)現(xiàn)的算法,并通過Java編程實(shí)現(xiàn)應(yīng)用程序。
2 設(shè)計(jì)與實(shí)現(xiàn)
一般的車輛監(jiān)控系統(tǒng)中,車輛的GPS位置信息是通過安裝在車上的GPS芯片完成GPS位置信息的感知,并通過通信網(wǎng)絡(luò)接入到采集服務(wù)器中。采集服務(wù)器將采集到的位置信息進(jìn)行持久化,以備數(shù)據(jù)分析和后期處理。本設(shè)計(jì)以關(guān)系數(shù)據(jù)庫為例,假設(shè)位置信息是保存在關(guān)系數(shù)據(jù)庫中的。另外,GPS芯片感知的位置信息中,經(jīng)緯度是地球坐標(biāo)系,在不同的地圖上進(jìn)行展示時(shí),還要轉(zhuǎn)換成對應(yīng)地圖支持的坐標(biāo)系,否則會(huì)產(chǎn)生較大偏移。關(guān)于坐標(biāo)系的轉(zhuǎn)換,這里不再論述,這里假定地圖是直接支持地球坐標(biāo)系的。
GPSinfo表用以保存位置信息,其結(jié)構(gòu)為GPSinfo(carid,lng,lat,addtime),carid為車輛標(biāo)識(shí),lng為經(jīng)度信息,類型為浮點(diǎn)型,lat為緯度信息,類型為浮點(diǎn)型,addtime為采集的時(shí)間。一個(gè)代表性的數(shù)據(jù)是(7698,113.653655,35.045452, ‘2015/9/15 20:50:18‘)。
2.1 矩形區(qū)域處理
針對矩形區(qū)域處理,復(fù)雜度較低。設(shè)矩形ABCD的四個(gè)頂點(diǎn)分別為A,、B、C、D,坐標(biāo)分別為A(x1,y1,)(x1,y1為A點(diǎn)經(jīng)度緯度坐標(biāo),下同)、B(x 2,y2,)、C(x3,y3,)、D(x4,y4,),設(shè)點(diǎn)E(x5,y5)是采集到的車輛的坐標(biāo),那么判斷E點(diǎn)在矩形區(qū)域的方法是:x5>x3 且 x5 2.2 圓形區(qū)域處理 對于圓形區(qū)域,我們假設(shè)地球是正圓的,同時(shí)假設(shè)圓心為B(Xb,Yb),A(Xa,Ya)為判斷的點(diǎn), Xb,Yb為B點(diǎn)經(jīng)緯度,Xa,Ya為A點(diǎn)經(jīng)緯度,A、B是地求表面的兩個(gè)點(diǎn),如圖2中的a所示,已知A、B兩點(diǎn)的經(jīng)度后,我們可以計(jì)算CD的地表長度為: 其中,R可取值6378千米,PI可取值3.1416。考慮到查詢的性能,我們可以在查詢之前,對查找的記錄做一些預(yù)篩選,找到圓的外切正方形的四個(gè)頂點(diǎn),按照判斷點(diǎn)在矩形區(qū)域的方法,找到矩形區(qū)域中的點(diǎn),之后再判斷是否在圓內(nèi),由于減少了記錄數(shù)量,查詢性能上有所提升。 2.3 多邊形區(qū)域處理 如圖3,判斷點(diǎn)p在多邊形內(nèi)的方法是:用p點(diǎn)的水平坐標(biāo)去和多邊形相交,得到若干個(gè)交點(diǎn),如果點(diǎn)p兩側(cè)的交點(diǎn)數(shù)量都是奇數(shù)個(gè)時(shí),說明p點(diǎn)在多邊形內(nèi),即鉛垂線內(nèi)點(diǎn)法[1]。使用這種方法,適合任意多邊形,包括凸多邊形和凹多邊形,同時(shí)適用于有孔的多邊形。下面給出這種算法的Java實(shí)現(xiàn),其中polySides是多邊形的頂點(diǎn)數(shù)量,polyX為頂點(diǎn)的x坐標(biāo)數(shù)據(jù),polyY為頂點(diǎn)的Y坐標(biāo)數(shù)組。若方法pointInPolygon返回true則表名測試點(diǎn)t(x,y)在多邊形內(nèi)部。 boolean pointInPolygon() { int i,j=polySides-1 ; boolean oddNodes=false; for (i=0;i if(polyY[i] if(polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i]) oddNodes=!oddNodes; } } j=i; } return oddNodes; } 其實(shí),在Java語言的開發(fā)環(huán)境中,提供了一種便捷的方法。類java.awt.geom.GeneralPath提供了根據(jù)直線、二次曲線和三次 (Bézier) 曲線構(gòu)造的幾何路徑的方法,同時(shí)GeneralPath類繼承類Path2D,通過Path2D類提供的方法contains(double x, double y) 來判斷某個(gè)點(diǎn)是否在曲線或直線構(gòu)成的邊界內(nèi)。一種可行的使用方法是: Point2D.Double first = polygon.get(0); p.moveTo(first.x, first.y); for (Point2D.Double d : polygon) p.lineTo(d.x, d.y); p.lineTo(first.x, first.y); p.closePath(); return p.contains(point); 其中p為構(gòu)造的GeneralPath對象,polygon包含了多邊形頂點(diǎn)的List對象,每個(gè)頂點(diǎn)被定義為Point2D.Double類型。point 則是要判斷的點(diǎn),其類型也為Point2D.Double。p.contains (point)返回true則表示點(diǎn)point包含在多邊形polygon內(nèi)。 在處理數(shù)據(jù)庫中的數(shù)據(jù)時(shí),可以先將多邊形外切的矩形作為選區(qū),選出滿足矩形選區(qū)的點(diǎn),之后可以在判斷選出的點(diǎn)是否在多邊形區(qū)域內(nèi),這樣可以一定程度上改善數(shù)據(jù)庫操作的性能。 3 結(jié)束語 以上處理方法,在實(shí)際應(yīng)用中取得了較好的效果,圖4、5、6分別展示了當(dāng)車進(jìn)入矩形、圓形、多邊形區(qū)域后立即顯示到地圖上的效果。如果結(jié)合出區(qū)入?yún)^(qū)的其他條件,比如出入?yún)^(qū)時(shí)間、區(qū)域內(nèi)車輛速度、出入?yún)^(qū)次數(shù)等其他條件,則能夠設(shè)計(jì)和實(shí)現(xiàn)更加復(fù)雜的程序,以滿足更多的應(yīng)用場合。 參考文獻(xiàn): [1] 王潤科, 張彥麗. 判斷點(diǎn)與多邊形位置關(guān)系的算法綜述[J]. 甘肅聯(lián)合大學(xué)學(xué)報(bào), 2006,20(11): 32-35.