基于位置服务LBS(Location Based Service)是移动终端利用通信运营商的移动通信网络或者其他定位方式(GPS、Wi-Fi等)来获取移动终端用户的地理位置信息,应用开发商基于此用户位置信息,为用户提供更多的增值服务,如无线订餐、打车、社区交友等。其中典型的应用有国外的Foursquare、Gowalla、Whrrl等,国内则有大众点评、微信、易信等。
LBS应用的核心是通过定位技术来获取移动终端的地理位置信息,通常将定位技术主要分为基于网络的定位技术和基于移动终端定位技术两大类。常见的基于网络的定位技术包括蜂窝网络中的到达时间TOA、到达角度AOA、到达时间差TDOA和Wi-Fi无线系统中基于信号强度RSSI定位,RSSI包括信号强度指纹定位和信号强度建模定位两种方法。Microsoft设计的RADAR系统是一个典型的基于信号强度指纹分析的定位系统,而参考文献则采用一种基于权值选择的定位策略,由于Wi-Fi定位范围有限,常用于室内定位。基于终端的定位技术通常有卫星导航定位GPS和网络辅助的GPS定位等,它们是获取室外地理位置的有效方式。GPS系统根据星历参数EPH和历书参数ALM测算到卫星与用户之间的相对位置,借助于导航算法最小二乘法或者卡尔曼滤波法计算得到用户的地理位置。但GPS卫星信号不容易穿透各种复杂的建筑物,仅仅适用于室外定位并且初次定位时间长。
针对几种传统定位技术应用的局限性,本文借助于百度地图API以及定位SDK,结合多种定位技术,采用混合定位的方式获取移动终端的地理位置,并基于此设计了一个无线购物LBS系统。移动客户端通过该应用除了实现无线购物功能外,还实现了移动用户的地理位置定位、路线导航及选择个性化服务。系统服务器为客户端提供无线购物服务,并实现管理员后台管理和维护操作功能。
1.LBS系统架构与方案设计
LBS应用系统通常由移动终端、内容提供商、通信网络和定位组件4个部分组成,如图1所示。移动终端是连接网络能够进行语音和数据通信的手持电子设备;内容提供商是为移动终端提供数据服务的载体,如数据库服务器、Web服务器和应用服务器等;通信网络是移动终端与内容提供商之间进行数据交互的通道;定位组件是为了实现移动终端的定位导航功能,如GPS定位卫星、移动网络基站和无线网络等。
图1 系统架构
利用混合定位依据实现Android智能手机无线定位后,为移动用户提供无线购物功能。无线购物系统基于C/S体系架构,其中服务器端主要实现用户信息和商品信息维护、处理客户端发来的HTTP请求以及实现管理员后台操作;手机客户端实现用户注册登录、商品浏览、购买、评价以及用户地理位置定位和线路导航功能,如图2所示。另外,客户端还将实现地图加载、地图浏览和地图查询功能。
图2 设计方案图
系统服务器利用MyEclipse集成开发环境,将服务部署在Apache Tomcat应用服务器上,后台数据使用MySQL以及Navicat数据库管理工具以便后台数据的存储和维护,通过JDBC的方式进行数据访问。客户端基于Android平台通过XML语言进行用户的UI设计,用Java语言设计Activity、Service等组件以及HTTP通信接口,以实现客户端与服务器端的信息交互。
2.系统实现及关键技术
2.1 服务器端设计模型
无线购物系统服务器端搭载在Apache Tomcat服务器上,采用MVC设计模型,如图3所示。通过Java Bean封装数据作为数据模型,JSP和HTML等技术完成服务器端Web页面的设计,利用Java语言设计Servlet作为控制器,控制着整个服务器端的响应并且完成客户端用户请求处理。
图3 系统MVC设计模型
MVC设计模型将系统服务分成Model、View和Controller 3个基本部分,将系统业务逻辑与数据显示分离,从而提高应用系统的可扩展性和维护性。例如管理员登录系统后向Servlet发送请求,Servlet将请求参数封装至Java Bean中实现相关数据更新,根据请求类型查询后台数据库,填充查询结果到相应的视图页面并显示在浏览器中,以实现管理员对无线购物系统的管理和维护。
2.2 系统定位原理及过程
利用百度地图API实现移动终端的混合定位,首先需把百度地图的开发包locSDK.jar文件以及与定位相关的liblocSDK.so文件导入工程中。移动终端的混合定位过程为LBS应用程序通过定位SDK发起定位请求,定位SDK收到请求后根据定位因素,即终端的网络状态(如GPS信号、Wi-Fi信号或者基站信号等)生成相应的定位依据,将定位依据发送至定位服务器,服务器处理定位请求后将定位结果经由定位SDK最终回送给LBS应用程序,为移动用户提供必要的地理位置信息和导航路线信息,如图4所示。
图4 系统定位原理及过程
利用百度地图API开发过程中用到的几个主要关键类如下。
(1)Map View:一个显示地图的视图,当被焦点选中时,它能捕获按键事件和触摸手势去平移和缩放地图;
(2)GeoPoint:表示一个地理坐标点,存放经度和纬度,以微度的整数形式存储;
(3)MKEvent:地图事件类,主要功能是实现网络连接、网络数据验证和授权验证等;
(4)LocationData:用户位置信息,存放信息包含了定位精度、经纬度坐标、GPS定位卫星数目和定位时速度等;
(5)LocationClient:定位SDK核心类,实现定位参数设置、注册监听函数及发起定位功能;
(6)BDLocation:封装了定位SDK的定位结果,通过该类用户可以获取位置的坐标和精度半径等信息。
移动用户终端将依据实时的网络情况采用混合定位方式返回用户的地理位置信息。在进行定位开发时,Manifest.xml配置文件必须声明应用程序的使用权限如Wi-Fi、Internet、Network等,移动客户端定位的部分示例代码如下。
mLocClient=new LocationClient(this); //定位初始化
locData=new LocationData();
mLocClient.registerLocationListener(myListener);
LocationClientOption option=new LocationClientOption();
option.setOpenGps(true);//打开GPS
option.setCoorType("bd09ll"); //设置坐标类型
mLocClient.setLocOption(option);
mLocClient.start();
myLocationOverlay=new locationOverlay(mMapView);
//定位图层初始化
myLocationOverlay.setData(locData); //设置定位数据
mMapView.getOverlays().add(myLocationOverlay);
//加定位图层
myLocationOverlay.enableCompass();
mMapView.refresh();//修改定位数据后刷新图层生效
2.3 JDBC数据库访问技术
服务器端的后台利用MySQL关系型数据库,存储着用户信息、商品信息、后台管理员信息等数据,服务器端利用JDBC(Java Database Connectivity)方式连接关系型数据库,通过SQL结构化查询语言来实现数据库数据的增删改查操作。JDBC编程步骤大致分为以下几步:(1)加载数据库驱动;(2)通过DriverManager获取数据库连接;(3)通过Connection对象创建Statement对象;(4)使用Statement执行SQL语句;(5)获取操作结果集;(6)回收数据库资源,包括关闭ResultSet、Statement和Connection对象等资源。
这样,通过JDBC访问方式实现对主流数据库的操作。并且利用JDBC操作数据库可以实现跨数据库、跨平台,具有非常优秀的可移植性能。
2.4 服务器与客户端HTTP通信
在无线购物系统中,客户端在注册登录、浏览和购买商品时必须将用户信息及商品信息封装后向服务器端发起请求,以得到服务器端的响应数据。HTTP协议是实现客户端与服务器端数据交互和通信的主要途径。客户端通过GET和POST两种请求方式向Web服务器发送请求。服务器端控制器Servlet将根据客户端发起的请求类型调用不同的响应函数对客户端请求进行相应处理。Web服务器将处理结果回送到客户端进行界面更新,客户端发送HTTP请求的Java示例代码如下。
public static HttpClient httpClient=new DefaultHttpClient();
public static String getRequest(String url) throws Exception{
HttpGet get=new HttpGet(url); //GET请求方式
HttpResponse httpResponse=httpClient.execute(get);
if(httpResponse.getStatusLine().getStatusCode()==200){
String result=EntityUtils.toString(httpResponse.getEntity());
return result;
}
return null;
}
public static String postRequest(String url,Map<String,String> rawParams)throws Exception{
HttpPost post = new HttpPost(url); //POST请求方式
List<NameValuePair> params=new arrayList<NameValuePair>();
for(String key:rawParams.keySet()) {//封装请求参数
params.add(new BasicNameValuePair(key,rawParams.get(key)));
}
……
return null;
}
3.实验结果与分析
无线购物LBS系统服务器端在MyEclipse 8.5集成环境中开发,部署于Tomcat 7.0应用服务器,数据库采用MySQL 5.5;客户端由Eclipse集成开发平台和Android ADT组成,利用Android智能手机对所开发的系统进行测试。
用户通过无线购物应用获取到感兴趣的商家地址以及商品详细信息。移动用户向定位服务器发起定位请求,获取到移动终端的当前位置,百度定位SDK将获取得到的定位信息通过定位图层显示在终端上,并显示出了用户的当前经纬度信息。系统还为用户和商家之间提供了合理的驾车导航路线,用户可以选择送货上门服务或者到店取货服务。
- 上一篇:手机LBS应用研究
- 下一篇:室内定位行业系列报告