- 1 -
中国科技论文在线
基于 GPS 的电子围栏设计
朱安里1,杜谦2**
作者简介:朱安里(1992-),男,研究生,java 软件设计
(1. 武汉理工大学信息学院电子与通信工程;
2. 武汉理工大学信息工程学院) 5
摘要:本文阐述了 GIS 系统的电子围栏的设计与开发,主要内容有电子围栏的研究背景和
意义、关键算法的改进、电子围栏的整体设计、数据库实现以及电子围栏的实现与测试。电
子围栏系统实现了电子围栏技术的智能化、人性化,它结合 GPS 和先进的计算机技术平台,
是智能交通的核心部分。电子围栏系统包括车辆终端、GPS 采集模块、信息传输接口、电10
子地图、数据库技术、联动报警等。电子围栏系统采用 GPS 设备进行车辆的位置信息采集;
无线通信技术把信息传输到服务器上;服务器把目标车辆 GPS 位置经纬度与电子围栏区域
的经纬度进行比较可以看出车辆出入电子围栏的情况。
关键词:软件工程;电子围栏;GPS;电子地图
中图分类号:TP311 15
Design of electronic fence based on GPS
ZHU Anli
1
, DU Qian
2
(1. Information Engineering, Electronics and Communications Engineering,Wuhan University of
Technology WUT; 20
2. Information Engineering, Wuhan University of Technology WUT)
Abstract: This paper describes the electronic fence GIS System Design and Development, the main
contents are the background and significance of the electronic fence, improved key algorithms, the
overall design of the electronic fence, electronic fence database implementation and the realization of
the test. Electronic fence electronic fence system achieves intelligent technology, user-friendly, it 25
combines modern and advanced computer center control platform is the core part of the perimeter
protection system, human-computer interaction. Electronic fence system includes a vehicle terminal,
GPS acquisition module, information transmission interface, electronic maps, database technology,
linkage alarm. Electronic fence system uses GPS device location information collection vehicles;
wireless communication technology to transfer information to the server; the server to the target vehicle 30
GPS latitude and longitude and latitude and longitude position electronic fence area can be seen by
comparing the vehicle out of the electronic fence.
Key words: Software Engineering; Electric Fence;GPS; digital map
0 引言 35
交通管理的科学化、现代化,一直是人们综合治理、解决交通问题而追寻的目标[1]。随
着科学技术的发展,机动车保有量也达到了空前的规模,平均每 10 人即拥有 1 辆机动车[1],
智能 GPS 终端设备已经越来越普及,然而我们离智能化的交通管理还有很大距离,我们并
未充分利用车联网将传统的车辆管理方式彻底的解脱出来,传统的车辆管理方式效率低,出
错率高,而且随着企业的不断发展,大中型企业的车辆使用与管理工作日益复杂,司机的不40
固定、车辆的保修、报废等等一系列问题干扰着我们。
车辆的电子围栏功能就是通过车辆终端、GPS 采集模块、信息传输接口、电子地图、
数据库技术、联动报警在监测中心平台或车载终端的电子地图上,圈定行程路线、停车场和
作业面等范围,被监控的车辆一旦驶出这个范围,就会触发报警或断油断电保护。
- 2 -
中国科技论文在线
将 GPS 信息技术、数据传输技术、电子控制技术及计算机软件等技术综合运用于整个45
车辆电子围栏体系,通过对 GPS 信息的实时采集、传输和处理,借助各种科技手段,对各
种交通情况进行协调和处理,建立起一种实时、准确、高效的综合运输管理体系,从而使交
通设施得以充分利用,提高交通运输效率和安全性,最终将使交通运输服务和管理智能化,
实现交通运输的集约式发展。
本系统是一个针对大型网络环境下的车辆电子围栏系统。系统对点与多边形的边界问题50
进行了分析,并提出了对射线法的算法改进[7]。改进后的算法更加灵活和准确,提高了系统
的实用性。
1 实现电子围栏的方法分析
电子围栏的核心问题就是判断车辆是否落在某多边形围栏内部或外部[2]。本节将介绍实
际应用中常用的解决方法。 55
实现电子围栏的方法选择
判断车辆是否在电子围栏内/外,用数学来描述就是判断一个点是在多边形内/外部,为
了方便,这里的多边形默认为有向多边形,规定沿多边形的正向,边的左侧为多边形的外侧
域,即多边形边按顺时针方向遍历。比较常见的判断点与多边形关系的算法有射线法、点线
判断法、夹角和法等[3],不过只有射线法可以正确用于凹多边形,其他 2 个只可以用于凸多60
边形。
点线判断法
把多边形的每条边看作首尾相连的有向线段。如果一个点相对于多边形的每条边(有向
线段)的方向(左侧还是右侧)都相同,那么这个点就在这个多边形内部。这种方法只适用
于凸多边形,而不适用于凹多边形。定义点在有向线段的一侧,定义有向线段(x1,y1),(x2,y2),65
对于点(x, y)计算:
v = (x2-x1)*(y-y1) - (y2-y1)*(x-x1) (1-1)
v=0 表示点在线段所在的直线上,v>0 表示点在线段的左侧,v<0 表示点在线段的右侧。
上面的计算式也可以表示比较斜率的大小:
(y-y1)/(x-x1) > (y2-x1)/(x2-x1) (1-2) 70
射线法
是使用最广泛的算法,相比较其他算法而言,它不但可以正确使用在凹多边形上,而且
不需要考虑精度误差问题。该算法思想是从点水平出发做一条射线,计算该射线与多边形的
边的相交点个数,当点不在多边形边上时,如果是奇数,那么点就一定在多边形内部,否则,
在外部。射线法原理示意图如图 所示。 75
- 3 -
中国科技论文在线
图 射线法原理
如图 所示,射线与多边形的左右交点数分别为 5 和 3,均是奇数,则点 p(红点)
在多边形内;在多边形外部的点与多边形交点数是偶数,则点在多边形外面。以上所述的是
射线法算法的基本思想,适合于大多数被判断点和多边形的位置关系,但是也有一些特殊的80
位置关系的判断结果是错误的。以下将列举这些特殊情况:
(1) 射线过水平边,如图 。
图 射线过水平线
显然,根据射线算法基本思想则无法判定点与多边形的位置关系。 85
(2) 射线过顶点,如图 .
图 射线过顶点
在图 中,多边形中的一个内角刚好接触测试点射线。 在上图中,只有一个侧面(以
红色突出显示)产生的测试点的左侧的节点为偶数,在底部也是相同的情况。无论哪种方式,90
数目为奇数才能表示测试点在多边形内部,然而测试点将在多边形内部其节点被视为偶数。
显然,根据射线算法基本思想无法判定点与多边形的位置关系。
夹角和法
如图 ,在多边形内或外有一点,将这一点与多边形的各个角相连,构成夹角,为 1 、
2 、 3 、 4 、 5 和 6 ,把这些夹角相加便得到夹角和,为方便起见,记此夹角和为95
a。规定正向为顺时针旋转方向,负向为逆时针方向[4]。当 a!=2π 时,则被判断点在多边形
的外部;当 a=2π 时,则被判断点在多边形的内部。
- 4 -
中国科技论文在线
图 夹角和法
若被判断点是多边形的某个顶点,则其中有一个夹角必定等于 0;若被判断点在多边形100
的某条边上,则其中有一个夹角必定等于 0 或者 180 度。一般用点积法来求解两条射线的夹
角,具体步骤如下所示:
假设点 P、p1 和 p2 的坐标分别为(x, y)、(xl, yl)和(x2,y2),向量 vl = pl-p,向量 v2 = p2-p。
由点积公式可得:
1* 2 | 1|| 2 | cos 1v v v v (1-3) 105
由公式(1-3),可以求得 1 的夹角,同样可以得到其他角的值,把他们相加得到夹
角和。由以上可知,射线法算法在判定被判断点与多边形位置关系时是存在局限性的。而夹
角和法和点线判断法只可以用于凸多边形,然而围栏形状是多变的,可能是凸多边形也可能
是凹多边形,从解决问题的广度上来说,射线法是最适合的方法。
射线法的改进 110
改进的射线法[5]主要体现在以下几个方面:
(1)射线穿越一条线段需要线段两个端点分别在射线两侧。只要想通这一点,顶点穿
越的问题就解决了。这样一来,我们只需要在算法的代码里规定被射线穿越的线段的两个端
点算作射线两侧。
(2)点和多边形顶点重合的情况,这种情况可以直接比较点坐标和多边形顶点的坐标115
是否相同就行了。
如果有射线连续经过的两个顶点显然都位于射线一侧这种情况,根据上面的假设,这种
情况可以看作没有发生穿越,射线上的这两个顶点不算在内。由于第(1)点的解决方案实
际上已经覆盖到这种特例,因此不需要再做特别的处理。下面给出算法实现的核心代码:
/** 120
* 射线法判断点是否在多边形内部
* @param {Object} p 待判断的点,格式:{ x: X 坐标, y: Y 坐标 }
* @param {Array} poly 多边形顶点,数组成员的格式同 p
* @return {boolean} 点 p 和多边形 poly 的几何关系,如果是在内部,则为 true,
* 则为 false 125
*/
Boolean isInLine(p, poly) {
String px = ;
- 5 -
中国科技论文在线
String py = ;
boolean flag = false; 130
for(int i = 0, i = , j = l - 1; i < l; j = i, i++) {
String sx = poly[i].x,
String sy = poly[i].y,
String tx = poly[j].x,
String ty = poly[j].y 135
// 点与多边形顶点重合
if((sx === px && sy === py) || (tx === px && ty === py)) {
return true;
}
// 判断线段两端点是否在射线两侧 140
if((sy < py && ty >= py) || (sy >= py && ty < py)) {
// 线段上与射线 Y 坐标相同的点的 X 坐标
String x = sx + (py - sy) * (tx - sx) / (ty - sy);
// 点在多边形的边上
if(x === px) { 145
return true;
}
// 射线穿过多边形的边界
if(x > px) {
flag = !flag; 150
}
}
}
// 射线穿过多边形边界的次数为奇数时点在多边形内
return flag ? true : false; 155
}
2 电子围栏系统设计
电子围栏软件设计
设计电子围栏系统时,把系统的前后端分离,在以前设计软件时,我们通常使用
MVC 框架的模式来开发软件[6],这样会造成几个问题:前后端代码混杂在一起,难以160
理清,随着时间的流逝,代码越来越多,功能越来越臃肿,难以维护;开发效率低下,
前后端不能分开开发,因为前后端是连在一起的;限制了前端的发挥,现在的前端技术
已经发展的很好了,当遇到开发的问题时,我们经常牺牲前端的性能来保证后端的设计,
这样的设计已经过时了[7]。因此重新改进了设计框架,设计改进的电子围栏框架设计如
图 所示. 165
- 6 -
中国科技论文在线
Contr
oller
层
Servic
e层
Dao层
Hbase
Html
JavaScript Css
前端 业务处理
数据库
电子围栏设计
图 电子围栏框架设计
把前后端分离,业务处理通过 jersey+hibernate 的框架可以实现业务,Jersey 是一个
RESTFUL 模式的请求服务 java web 框架,与常规的 java web 编程使用的 struts 框架类似,170
它主要用在系统后台与业务逻辑的交互,开发者需要对业务对象进行建模,抽象出业务模型
并封装在 Model 组件中。由于数据持久层实现了 Java 持久化类并且封装了数据访问对象
(DAO),因此可以在 Model 组件中方便地调用 DAO 组件存取数据。
Hibernate 是对象关系映射的模型,它主要在系统后台与数据库打交道,它对 JDBC 进
行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数175
据库,数据持久由 Java 对象持久化类和数据访问对象(DAO)组成。Hibernate 是 DAO 层的框
架,与 HBase 数据库交互,controller 层控制层把分析处理过得数据通过异步接口(ajax)显
示在前端,客户可以在前端页面请求,后台会把数据传输过来。Hibernate 框架会使每个数
据库表都对应着一个持久化对象,这样就给予了开发者使用面向对象思想的设计和开发的便
利,同时也屏蔽了具体的数据库和具体的数据表、字段,消除了对数据库操作的硬编码在重用180
性上的弊端。
这两个框架构成了系统的后台程序。对于请求式服务,有 GET, PUT,UPDATE,
DELETE 请求,你只需要给出一个对应的 URI 地址即可完成操作。RESTFUL 风格的框架数
据库的增删改查操作与请求式服务 GET, PUT,UPDATE,DELETE 一一对应,在 web 服务
设计过程中可以更好地理解 http 请求[8]。 185
Html 是前端的结构和骨架,网页的结构就靠 html 支撑,css 用来渲染网页,使其布局
更加合理,更加美观;JavaScript 是网页的发动机,一切网页的交互都少不了 JavaScript 语
言,ajax 是异步加载的意思,在 web 发展的早期,从前端发送数据给后台并传输回数据,
需要把网页重新加载,如今有了 ajax,可以根据需求只加载网页的一部分,提高了网页加载
的速度,提高了浏览器的性能。 190
数据库设计
数据库的设计就是将系统需求分析得到的用户需求抽象为数据库的结构信息的过程。只
有通过转化需求为概念结构后,才能转化为机器能够理解的数据模型,我们通常采用的是
- 7 -
中国科技论文在线
E-R 图来对概念模型进行描述,E-R 图表示的概念模型是用户数据要求的形式化。E-R 图的
规范是用矩形框表示实体;用椭圆表示实体的属性,并用无方向的直线与其他的实体连接起195
来;用菱形表示实体型之间的联系。因此,根据上面设计规划出来的实体,以车辆信息表为
核心,对车辆进行操作,得到系统表结构 E-R 图如图 所示。
GPS数据
车辆信息
电子围栏
电子围栏
编号
匹配 产生
电子围栏
名称
围栏点集
合
电子围栏
形状
车牌号 车主
电子围栏
编号
其他信息
GPS编号 经度 纬度
产生时间
车牌号
图 电子围栏 E-R 图
车辆信息表包括电子围栏编号、车牌号、车主和其他信息,车载 GPS 会记录车辆位置200
信息并发送,产生 GPS 数据表,包括 GPS 编号、经度、纬度、产生时间和车牌号;车辆信
息表会与创建的电子围栏进行分配,电子围栏表包括电子围栏编号、电子围栏名称、电子围
栏形状和围栏角的集合。
3 电子围栏实现
车辆的电子围栏功能就是在监测中心平台或车载终端的电子地图上,圈定行程路线、停205
车场和作业面等范围,被监控的车辆一旦驶出这个范围,就会触发报警或断油断电保护。电
子围栏先建立围栏信息表,其中包括车辆 id,围栏名称、进/出围栏,围栏形状,围栏范围
经纬度等信息,支持添加/删除围栏信息。围栏记录的功能通过结合车辆位置信息和围栏信
息得到,存入围栏记录表。见流程图 。
- 8 -
中国科技论文在线
开始
读GPS信息表得
到车辆位置
对比车辆位置和围栏
位置,进/出围栏?
写入数据库
是
否
读围栏信息表
得到围栏位置
出入围栏报警
结束
210
图 电子围栏流程图
电子围栏提高了车辆的安全性且管理更规范,系统设计的界面图如图 所示。在图中
添加围栏监控:在电子围栏界面中,选择车牌号,围栏形状,出/入围栏,该车辆的行驶范
围就被监控;删除围栏监控:在电子围栏界面中的左边选择待删除的序号,该车辆就解除监
控;添加/删除围栏:选择欲添加/删除的围栏的形状,在地图上画出其范围,点击添加/删除,215
该围栏就被添加/删除。
- 9 -
中国科技论文在线
图 界面图
电子围栏实现的原理是:客户在电子地图上点击添加电子地图的按钮,通过百度地图
API 接口,把鼠标放在地图上,会在地图上出现一个点,如果客户设置的围栏形状是圆形的220
就会以这个点为圆心随着鼠标的移动,圆形区域的半径会变化,电子围栏区域(圆形阴影面
积)会随着半径的变化而变化,如果是多边形的形状,地图会以鼠标停留的几个点为角行成
一个多边形,多边形行成的区域就是电子围栏的区域。
围栏坐标的经纬度会记录在在地图上时,浏览器会记录经纬度,当客户表示确认添加时,
前端会向后台请求添加新增的电子围栏,后台收到请求后执行 addFence()方法,在数据库表225
electricfence 中增加新增电子围栏;车辆出入电子围栏时会产生记录,后台把记录保存在数
据库表 fencerecord 中,当要检查是否进出围栏,就把当前记录与先前的记录进行比较,如
果当前记录在围栏内,而先前的记录显示在围栏外,则表示车辆跨越了围栏,会产生报警或
报警信息。
如图 ,地图左边的操作栏可以设置电子围栏的形状、半径和经纬度并在地图上显示230
出来,通过地图的 API 可以把电子围栏的数据显示在地图上。
代码如下:
Class Fence{
public ArrayList<String> getTemp();//得到车辆和围栏信息
public void writeEnclosure(){ 235
ArrayList<String> temp1= getTemp();
ArrayList<String> temp2= getTemp();
While(true){
temp2= getTemp();
if(()!=()){//isInLine()方法是射线法的改进算法实现 240
temp1=temp2;
}
- 10 -
中国科技论文在线
//判断 temp1 是否在围栏外(内)
//判断 temp2 是否在围栏内(外)
//如果是就写数据库,否 do nothing 245
temp1=temp2;//更新 temp1
}
}
}
在上面的代码中,isInLine()方法就是在第 1 节射线法改进之后的算法实现。 250
4 结论
本文研究了点与多边形的关系,介绍了射线法、点线判断法、夹角和法并对射线法进行
了改进,实现了电子围栏的优化算法,提高了查找电子围栏车辆出入的效率;设计了电子围
栏的软件结构和数据库结构并实现了电子围栏,因为电子围栏设计在地图上直接画出多边
形,与实际的地理的经纬度有很大的误差,在绘制电子围栏的时候,所以尽量先确定几个角255
的经纬度,再把相邻角连接起来,同时,确保地图是最大倍数,这样可以保证误差最小。
[参考文献] (References)
[1] 吴忠,栾东庆.智能公共交通系统的理论、方法与应用[M].上海:同济大学出版社,2013.
[2] Ramon Bauza, Javier Gozalvez, Joaquin Sanchez-Soriano. Road Traffic Congestion Detection through 260
Cooperative Vehicle-to-Vehicle Communications [J].IEEE, 2012: 606-612.
[3] Run Sun, Yong Chen. Analysis of urban road congestion in China based on supply and demand perspective
[J].IEEE, 2011: 69-71 .
[4] 向俊,王静,夏幼明.判断点与多边形拓扑关系的改进算法[J].计算机工程与设计.2014,05:1732-1737.
[5] 汤琳琳,张永军.一种实时监测超越电子围栏的算法在智能巡检中的应用[D].北京:北京邮电大学,2015 265
[6] 刘海忠,谭明新.电子围栏中心监控平台的设计与开发[D].武汉:华中师范大学,2012.
[7] 易飞,余刚,何凌.GPRS 网络信令实例详解[M].北京:人民邮电出版社,2013 .
[8] 娄路,盛明兰.网络编程技术[M].北京:清华大学出版社,2013.