董露+石磊+胡德正
摘要:针对日益突出的老人儿童监护需求,基于北斗卫星导航系统,将采集到的地理位置信息依据互联网协议传输至网络。在用户终端利用安卓系统丰富的APIs,调用百度地图,设计并实现具有跟踪功能的手机终端定位系统。测试结果表明,系统能准确定位手机和监控位置,灵活拖拽、缩放地图,提供便捷的定位服务,为关爱老人儿童工作提供了很好的服务。
关键词:北斗卫星导航系统;安卓;百度地图;老人儿童关爱;定位跟踪
DOIDOI:10.11907/rjdk.171339
中图分类号:TP319
文献标识码:A 文章编号:1672-7800(2017)006-0110-03
0 引言
北斗卫星导航系统(BDS)是我国自主研制的全球卫星定位与通信系统[1],通信信号可覆盖我国全境及周边地区[2],BDS对亚太地区定位较GPS更加精准,对复杂地形定位准确度高。2015年我国卫星导航与位置服务产业总体产值达1735亿元,同比增长29.2%。北斗应用占比进一步提高,市场贡献率接近20%,北斗兼容应用已经成为国内行业市场的主流方案[3],其应用除了车载外,对老人儿童等特殊群体的关爱也有帮助。
预计到本世纪中叶我国老年人口将达到4.86亿[4]。老人儿童在外出时易发生走失,由于他们缺乏冷静的应对和呼救能力,导致寻人十分困难,能跟踪老人儿童位置的设备作用凸显。
目前,老人跟踪定位系统很多,大多基于GPS系统,未能充分发挥北斗系统的优势。
本文基于北斗系统,采用Eclipse、百度地图Android SDK、JDK、ADT等开发工具和包,实现手机定位跟踪系统开发。软件设计一个定位主界面和跟踪按钮,实现手机实时定位跟踪老人小孩位置,并在地图上显示。
1 系统构架
北斗数据接收模块接收天线发出的地理位置信息,通过串口连接到PC机,将数据上传至服务器,用户客户端软件通过Socket获取位置信息并在安卓手机上通过百度地图显示,系统流程如图1所示。
北斗数据接收模块采用和芯星通UM220-III N 双系统高性能GNSS模块[5]。随着北斗二代导航定位系统区域导航定位的实现,使用多系统兼容的接收机提供导航定位信息,可以提高接收机的可用性并充分利用在轨卫星提高定位精度[6]。UM220安装方法如图2所示。
数据传输装置采用RS232串行接口[7]传输线,一端连接UM220,另一端连接服务器,数据传输是异步进行的,发送的内容和接收到的内容互不影响,能保证数据传输出错率较低。
软件部分采用Eclipse编程软件用Java语言编写,应用百度地图API实现手机位置实时显示以及跟踪老人小孩位置功能。
2 开发语言及平台
系统使用Java语言进行编码开发。Java 技术因其固有的网络移动、面向对象、平台无关、安全等诸多特征,迅速成为企业级应用开发的首选技术[8],是安卓[9]智能终端应用开发最常用的编程语言。
Android开发平台主要由JDK、Eclipse、Android SDK、ADT四部分组成。首先配置Java开发环境,下载JDK并安装;接下来下载eclipse,双击文件夹中的eclipse.exe即可直接启动;然后下载ADT的压缩包,并在eclipse中离线安装此插件;再配置Android SDK,点击菜单window→preferences,点击Browse选择Android SDK解压目录[10];最后配置ADV安卓虚拟机,完成开发平台搭建[11]。
3 系统实现
安卓客户端软件通过申请百度地图API key实时调用百度地图,完成主界面实时定位功能和跟踪模块的设计开发。用户按下跟踪按钮后,客户端通过Socket获取北斗地理位置数据,并用地图清晰地显示出来。
3.1 申请百度地图API key
百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口,通过该接口可实现丰富的LBS功能[12-13]。
在使用百度地图SDK前,必須通过百度账户申请百度地图移动版开发密钥。申请流程:登陆API控制台→创建应用→配置应用→获取安全码→成功创建KEY。安全码的组成规则:Android签名证书的sha1值+packagename[14]。
例如:SHA1:BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
包名:com.baidumap.demo
使用eclipse开发时,应用获取包名packagename是Android应用程序本身在AndroidManifest.xml中定义的名称。
3.2 主界面设计
3.2.1 主界面布局
主界面总体布局为垂直线性布局,在其左上方加入一个名为“北斗跟踪”的按钮Button,具体操作方法为:
在布局文件activity_main.xml里设置button代码,或者在Graphical Layout里拖拽button至屏幕并按需求修改大小和位置,此时activity_main代码区会直接显示出对应的Button代码,代码如下:
3.3 跟踪模块设计与实现
当用户点击“北斗跟踪”按钮后,安卓客户端通过Socket接口与已经获取的北斗地理数据服务端进行通信,获取老人小孩所在地理位置数据,并刷新地图显示。
3.3.1 Socket通信
在网络通信中常常把Socket称作“套接字”,它主要用来描述网络上一端的IP 地址和端口号,可以理解为是一个数据在网络上交换的句柄,这个句柄用来实现主机和主机的通信连接[16]。在Java中,基于TCP协议实现网络通信的类有两个:客户端的Socket类和在服务器端的ServerSocket类。ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客户端的连接请求。使用Socket进行通信过程如下:①在服务器端指定一个等待连接的端口号,在客户端规定一个主机和端口号,从而在客户端和服务器端创建Socket/ServerSocket实例[17];②打开连接到Socket的输入输出流;③利用输入输出流,按照协议对Socket进行读写操作;④关闭输入输出流和Socket。
3.3.2 跟踪功能实现
在main activity.java中mainactivity类声明按钮变量Button mButton,然后在OnCreat函数中声明mButton,写按钮的点击函数mButton.setOnClickListener(),按下按钮后地图跳转至北斗模块所处位置点point处,更新地图,以图标形式覆盖在点上用以指示其位置,可用map.addOverlay方法向地图添加覆盖物,具体代码如下:
4 测试结果
运行手机软件,定位到当前位置如图3所示,将UM220模块放置在武汉大学操场内,获取到的位置为:latitude=30.534511,longitude = 114.367977,传入服务器IP为192.168.0.102,在手机上点击“北斗跟踪”按钮,界面切换至模块所在位置,在地图上观察到的位置与初始放置位置相同,完成准确的定位和跟踪功能,如图4所示。同时在地图显示时可以灵活拖拽并将地图放大或缩小。
5 结语
本文描述了基于北斗卫星的手机定位跟踪系统总体构架、开发语言和平台,介绍了百度地图API key的申请,根据Android和Baidu Map提供的应用程序编程接口以及Java中的Socket接口,设计并实现了基于北斗卫星的互联网定位跟踪系统。以北斗卫星为基础,借助百度地图提供的数据地图服务,为用户外出时提供定位显示,跟踪老人儿童位置,以免发生走失现象,具有较高的实用价值。
参考文献:
[1]朱建伟,袁国辉.基于北斗卫星导航系统的新一代广州市空间测绘基准框架构建[J].工程勘察,2017,45(1):59-63.
[2]王春芳,陈永涛,李春来,等.基于北斗卫星的预警信息发布技术研究及实现[J].应用气象学报,2014,25(3):
375-384.
[3]刘重才.北斗全球组网提速[N].上海证券报,2017-1-10(16).
[4]张向南,汪传建,兰贞益.基于Android的老人关爱系统[J].计算机系统应用,2016,25(6):100-105.
[5]和芯星通公司.UM220用户手册[EB/OL]. http://www.docin.com/p-557798299.html.
[6]怀洋,邵琼玲,陆振民.北斗/GPS混合定位模块UM220应用研究[J].国外电子测量技术,2014,33(3):254-257.
[7]NAYDEN C. Intelligent modular service mobile robot controllable via Internet[J].IFAC Proceedings Volumes,2012,45(10):49-153.
[8]歐锋.Java技术方案概述[J].计算机系统应用,2012,21(8):236-239.
[9]诸姣.安卓应用系统的功能与权限相关性研究[J].计算机应用与软件,2014, 31(10):27-33.
[10]冯玉平,王曙光.基于Android 的手机定位软件[J].计算机与现代化,2015,33(2):11-13.
[11]周丽,黄素珍.神经网络在洪水预测中的应用研究[J].计算机工程与设计,2007,28(17):4312-4314.
[12]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011.
[13]杜传明.百度地图 API 在小型地理信息系统中的应用[J].测绘与空间地理信息,2011,34(2):152-156.
[14]李骁.百度地图API在Android中的配置和应用[J].计算机光盘软件与应用,2015,18(2):37-38.
[15]张波,赵双明.基于安卓平台的百度地图开发研究[J].软件导刊,2015,14(7): 96-98.
[16]王新忠,杨波. 基于SOCKET 的数据传输安全技术研究[J].科技广场,2016, 1(7):72-77.
[17]文显琼,张继荣.基于Socket的网络编程及其实现[J].软件导刊,2012,11(2):97-98.
(责任编辑:杜能钢)