周喜平 姜斌
摘要:在車(chē)輛監(jiān)控的地圖上,繪制一種基于矩形、圓形、多邊形的電子圍欄,當(dāng)車(chē)輛在區(qū)域內(nèi)滿(mǎn)足相應(yīng)條件的時(shí)候,能夠報(bào)警或者做一些其他聯(lián)動(dòng)處理。利用車(chē)輛GPS坐標(biāo)結(jié)合電子圍欄的地圖信息,建立數(shù)學(xué)模型,設(shè)計(jì)算法,并通過(guò)編程實(shí)現(xiàn)車(chē)輛出區(qū)入?yún)^(qū)的判斷。該設(shè)計(jì)通過(guò)實(shí)際應(yīng)用,效果較好。
關(guān)鍵詞:車(chē)輛監(jiān)控;電子圍欄;出區(qū)入?yún)^(qū);GPS坐標(biāo)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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 背景
基于地圖的車(chē)輛監(jiān)控系統(tǒng)中,電子圍欄是一個(gè)非常實(shí)用的功能。所謂電子圍欄,就是在地圖上繪制一個(gè)圖形區(qū)域,如果車(chē)輛進(jìn)入或者離開(kāi)該區(qū)域,監(jiān)控系統(tǒng)會(huì)按照事先設(shè)定的條件,觸發(fā)相關(guān)的處理程序。該區(qū)域可以是規(guī)則的矩形、圓形,也可以是不規(guī)則的圖形,比如不規(guī)則的多邊形。本設(shè)計(jì)針對(duì)矩形、圓形和不規(guī)則的多邊形,進(jìn)行討論,提供一種解決方法,設(shè)計(jì)實(shí)現(xiàn)的算法,并通過(guò)Java編程實(shí)現(xiàn)應(yīng)用程序。
2 設(shè)計(jì)與實(shí)現(xiàn)
一般的車(chē)輛監(jiān)控系統(tǒng)中,車(chē)輛的GPS位置信息是通過(guò)安裝在車(chē)上的GPS芯片完成GPS位置信息的感知,并通過(guò)通信網(wǎng)絡(luò)接入到采集服務(wù)器中。采集服務(wù)器將采集到的位置信息進(jìn)行持久化,以備數(shù)據(jù)分析和后期處理。本設(shè)計(jì)以關(guān)系數(shù)據(jù)庫(kù)為例,假設(shè)位置信息是保存在關(guān)系數(shù)據(jù)庫(kù)中的。另外,GPS芯片感知的位置信息中,經(jīng)緯度是地球坐標(biāo)系,在不同的地圖上進(jìn)行展示時(shí),還要轉(zhuǎn)換成對(duì)應(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為車(chē)輛標(biāo)識(shí),lng為經(jīng)度信息,類(lèi)型為浮點(diǎn)型,lat為緯度信息,類(lèi)型為浮點(diǎn)型,addtime為采集的時(shí)間。一個(gè)代表性的數(shù)據(jù)是(7698,113.653655,35.045452, ‘2015/9/15 20:50:18‘)。
2.1 矩形區(qū)域處理
針對(duì)矩形區(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)是采集到的車(chē)輛的坐標(biāo),那么判斷E點(diǎn)在矩形區(qū)域的方法是:x5>x3 且 x5 2.2 圓形區(qū)域處理 對(duì)于圓形區(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的地表長(zhǎng)度為: 其中,R可取值6378千米,PI可取值3.1416。考慮到查詢(xún)的性能,我們可以在查詢(xún)之前,對(duì)查找的記錄做一些預(yù)篩選,找到圓的外切正方形的四個(gè)頂點(diǎn),按照判斷點(diǎn)在矩形區(qū)域的方法,找到矩形區(qū)域中的點(diǎn),之后再判斷是否在圓內(nèi),由于減少了記錄數(shù)量,查詢(xún)性能上有所提升。 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í),說(shuō)明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則表名測(cè)試點(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語(yǔ)言的開(kāi)發(fā)環(huán)境中,提供了一種便捷的方法。類(lèi)java.awt.geom.GeneralPath提供了根據(jù)直線、二次曲線和三次 (Bézier) 曲線構(gòu)造的幾何路徑的方法,同時(shí)GeneralPath類(lèi)繼承類(lèi)Path2D,通過(guò)Path2D類(lèi)提供的方法contains(double x, double y) 來(lái)判斷某個(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對(duì)象,polygon包含了多邊形頂點(diǎn)的List對(duì)象,每個(gè)頂點(diǎn)被定義為Point2D.Double類(lèi)型。point 則是要判斷的點(diǎn),其類(lèi)型也為Point2D.Double。p.contains (point)返回true則表示點(diǎn)point包含在多邊形polygon內(nèi)。 在處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),可以先將多邊形外切的矩形作為選區(qū),選出滿(mǎn)足矩形選區(qū)的點(diǎn),之后可以在判斷選出的點(diǎn)是否在多邊形區(qū)域內(nèi),這樣可以一定程度上改善數(shù)據(jù)庫(kù)操作的性能。 3 結(jié)束語(yǔ) 以上處理方法,在實(shí)際應(yīng)用中取得了較好的效果,圖4、5、6分別展示了當(dāng)車(chē)進(jìn)入矩形、圓形、多邊形區(qū)域后立即顯示到地圖上的效果。如果結(jié)合出區(qū)入?yún)^(qū)的其他條件,比如出入?yún)^(qū)時(shí)間、區(qū)域內(nèi)車(chē)輛速度、出入?yún)^(qū)次數(shù)等其他條件,則能夠設(shè)計(jì)和實(shí)現(xiàn)更加復(fù)雜的程序,以滿(mǎn)足更多的應(yīng)用場(chǎng)合。 參考文獻(xiàn): [1] 王潤(rùn)科, 張彥麗. 判斷點(diǎn)與多邊形位置關(guān)系的算法綜述[J]. 甘肅聯(lián)合大學(xué)學(xué)報(bào), 2006,20(11): 32-35.