车联网监控中心的研究与设计
在数据库的表格中,设计的字段主要有车主、车牌号、车型、经度、纬度、速度、前左车门、前右车门、后左车门、后右车门、前端盖、后端盖、故障代码和驾驶员疲劳状态等,在收到了GPRS发送过来的数据之后,根据协议进行解码,将其中的数据分别存入对应的数据库当中。向数据库中新增数据的代码如下:
本文引用地址:http://www.amcfsurvey.com/article/245925.htmAdodc1.Recordset.AddNew '将数据写入数据库
Adodc1.Recordset("车主") = chezhu
Adodc1.Recordset("车牌号") = chepaihao
Adodc1.Recordset("车型") = chexing
. . . . . .
Adodc1.Recordset.Update
上面的chezhu、chepaihao、chexing等变量都是获得了车载终端数据的全局变量,利用这种方式可以将数据存入到数据库对应的字段当中,便于查询、使用和保存。
2 Android手机客户端设计
2.1 Android中Socket通信设计
Android中提供了一个Socket的类,存在于“java.net.Socket”包中。首先要设定连接服务器的公网IP以及端口号,同时以输入流InputStream()的形式来获取从服务器传过来的数据,然后从输入流中读取相应的数据存入缓冲区,最后读取缓冲区即可以得到所需要的数据。把接收到的数据存在一个字符串里面,根据Android手机客户端和PC上位机的协议进行数据的解码,再把解码后的数据存入到相应的字段当中,比如经度、纬度、速度、驾驶员疲劳状态等等。
使用手机也可以向PC机发送数据和指令,比如点击了“车辆监控”按钮时,就需要向PC机发送指令,再通过PC机来控制车辆,从而达到手机监控车辆的效果。当手机需要向PC机发送数据时,建立Socket连接之后,是通过输出流来实现的,先定义好所要发送的数据,再用outputStream.write()语句来将数据发送到Socket服务器。
由于Socket在连接通信的时候有可能会出现异常,所以系统要求加入用来捕捉和处理异常的try-catch语句。程序运行正常时,执行try{}里面的代码;当出现异常时,执行catch里面的语句捕捉和处理异常。Android中Socket通信的部分代码如下。
try{
Socket Socket = new Socket("125.216.144.177",8091); //实例化Socket
InputStream indata = Socket.getInputStream(); //获得从服务器传过来的数据
byte[] buffer = new byte[indata.available()]; //缓冲区
indata.read(buffer); //读取缓冲区
String msg = new String(buffer); //转换字符串
System.out.println(msg); //将得到的数据进行输出
String[] arr= msg.split(","); //以“,”分割收到的数据,存入arr[]数组当中
OutputStream outputStream = Socket.getOutputStream(); //获得输出流,向服务器发送数据
byte[] buffer2 = new byte[1111] ; //定义要发送的数据
outputStream.write(buffer2, 0, 6); //开始发送数据
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
2.2 Android中电子地图的加载与纠偏
近几年随着Android操作系统的兴起,越来越多的地图供应商都提供了Android地图的SDK(软件开发包),在Android中开发地图加载的流程如下[5]:
Android程序在开发地图时,需要在“AndroidManifest.xml”列表中添加多个应用权限,保证电子地图能够正确加载。
然后进行初始化设置,在“SetupMap”函数中,需要设置地图视图、设置缩放尺度、将指定坐标设置为地图中点。
“MapView”类的“setTraffic”方法可以设置显示地图视图的模式,地图视图的模式有卫星图map.setSatellite(true)、一般地图map.setTraffic(true)、街道图map.setStreetView。“MapController”类的“setZoom”方法可以控制地图的缩放尺度。由全球地图(1)到街道地图(21),数值越大地图细节越详细。
Android通过“Geopoint”类来定义坐标,“Geopoint”接受的两个参数分别是“纬度”、“经度”值,需要以整数来表示。“Geopoint”接受的纬度和经度手机通过Socket从上位机获取,然后通过实例化GeoPoint ()对象,在GeoPoint ()输入纬度和经度即可以实现地图的加载[6]。
GeoPoint point = new GeoPoint((int)(weidu),(int)(jingdu));
无论是Google地图还是百度地图,GPS坐标直接输入加载处理的位置是有偏差的,论文使用百度地图提供的在线API坐标转换接口来实现纠偏,其语句为
GeoPoint point2 =CoordinateConvert.bundleDecode(CoordinateConvert .
fromWgs84ToBaidu(point));进行转换之后可以很好的解决坐标偏移的问题,测试结果表明定位误差在5米以内。
为了在地图上标示车辆所在的位置,需要添加一个定位图标。在Android电子地图中属于覆盖物,所有的覆盖物都继承“Overlay”类,本次设计自定义一个CustomItemizedOverlay子类,继承ItemizedOverlay类,用来实现标注定位图标和定位文字的功能。
3 系统的测试与结论
在设计好监控中心和手机客户端之后,配合硬件进行测试,监控中心要具备公网IP,图4和图5为监控中心的部分界面展示,图6为Android手机客户端界面。
从以上测试结果可知,本次车联网系统的设计达到了预期目标,系统总体运行流畅,上位机监控中心和Android手机能够正确显示车辆的基本信息、精确显示车辆的位置、对车辆进行监控和控制、警示驾驶员是否疲劳等,便于车辆的管理、监控、调度、远程诊断等,为我国的智能交通行业的发展提供有力的参考。
评论