AGPS定位Android简单实现

先介绍一下A-GPS的基本知识A-GPSA-GPS技术是一种结合了网络基站信息和GPS信息对移动台进行定位的技术,可以在GSM/GPRS、WCDMA、CDMA2000和TD-SCDMA网络中使用。该技术需要在手机内增加GPS接收机模块,并改造手机天线,同时要在移动网络上加建位置服务器、差分GPS基准站等设备。如果要提高该方案在室内等GPS信号屏蔽地区的定位有效性,该方案还提出需要增添类似于EOTD方案中的位测量单元(LMU)。A-GPS解决方案的优势:主要在其定位精度上。在室外等空旷地区,其精度在正常的GPS工作环境下,可达10米左右,堪称目前定位精度最高的一种定位技术。该技术的另一优点为:首次捕获GPS信号的时间一般仅需几秒,不像GPS的首次捕获时间可能要2~3分钟。应用 A-GPS定位技术的主要功能是能够为终端用户提供高精度的位置信息。移动运营商采用基于A-GPS定位技术的位置服务后,终端用户可以方便快捷地获知自己或他人当前所处的位置,特别适用于车辆跟踪与导航系统以及具有特殊任务的车辆(运钞车、救护车、消防车等),能够大幅度提高车辆安全、运输效率和服务质量。 目前,国内移动通信市场日益发展,特别是随着3G商用的临近,中国移动和中国联通都制订和推出了各自的A-GPS方案。中国移动正在制订的A-GPS方案基于OMA的SUPL规范,是一种用户平面的解决方案;中国联通提供的gpsOne是MS-Assisted方式的A-GPS定位方案,也基于用户平面方式,目前只用于CDMA网络。原理 A-GPS基本思想是通过在卫星信号接收效果较好的位置上设置若干参考GPS接收机,并利用AGPS服务器通过与终端的交互获得终端的粗位置,然后通过移动网络将该终端需要的星历和时钟等辅助数据发送给终端,由终端进行GPS定位测量。测量结束后,终端可自行计算位置结果或者将测量结果发回到AGPS服务器,服务器进行计算并将结果发回给终端。同时后台SP可获取位置信息为其它服务应用。A-GPS与传统导航的区别AGPS(Assisted GPS:辅助全球卫星定位系统)是结合 GSM / GPRS 与传统卫星定位,利用基地台代送辅助卫星信息,藉以缩减 GPS 芯片获取卫星信号的延迟时间,受遮盖的室内也能藉基地台讯号弥补,减轻 GPS 芯片对卫星的依赖度。 和纯 GPS、基地台三角定位比较,AGPS 能提供范围更广、更省电、速度更快的定位服务,理想误差范围在 10 公尺以内。AGPS手机首先工作步骤:1.将本身的基站地址通过网络传输到位置服务器;2.位置服务器根据该手机的大概位置传输与该位置相关的GPS辅助信息(包含GPS的星历和方位俯仰角等)到手机;3.该手机的AGPS模块根据辅助信息(以提升GPS信号的第一锁定时间TTFF能力)接收GPS原始信号;4.手机在接收到GPS原始信号后解调信号,计算手机到卫星的伪距(伪距为受各种GPS误差影响的距离),并将有关信息通过网络传输到位置服务器;5.位置服务器根据传来的GPS伪距信息和来自其他定位设备(如差分GPS基准站等)的辅助信息完成对GPS信息的处理,并估算该手机的位置6.位置服务器将该手机的位置通过网络传输到定位网关或应用平台。A-GPS与GPS区别 GPS:全球卫星定位。 AGPS:和GPS使用起来没有什么区别,因为AGPS是使用在GPS基础上的一项功能,打开GPS后可以通过设置开启或者关闭AGPS功能。A-GPS是要收上网费的。如果你有包月流量,倒也无所谓。如果只用集成方法,没有任何费用。只是定位搜星慢一些。 A-GPS就是利用移动基站提供的位置信息,帮助机身内置的GPS芯片的设备快速定位。AGPS技术与独立GPS技术相比,明显有几大优势: 缩短定位时间:由于利用移动网络提供GPS辅助信息,不需要移动终端通过接收GPS卫星广播数据。由于卫星广播信道速率非常低,信号强度非常弱,这个时间通常会非常长。 降低终端耗电量:由于不需要对卫星进行全频段扫描和跟踪,定位时间缩短,因此终端的耗电量大大降低。 提升定位灵敏度:在靠近建筑物或者天气不好等相对恶劣环境下,由于有网络辅助数据,终端可直接锁定卫星定位,而此时GPS卫星信号非常微弱,独立GPS定位模式则往往终端会因为不能接收完所有的卫星星历和时钟等参数而导致定位失败。 AGPS定位系统可获得用户的位置结果为后台应用服务:AGPS定位服务器可将定位结果提供给后台的SP/SI,SP/SI可在此基础上开发多种多样的与用户位置相关的业务和应用。 借助移动网络定位,可在GPS定位失败时提供Cell ID定位结果:如被定位终端在室内或地下等环境时,无法实现GPS定位,则AGPS服务器会自动通过Cell ID方式获得被定位用户的粗精度位置提供给后台SP/SI,实现了定位服务的无缝连接。最后贴上主要程序代码。仅供参考:[mw_shl_code=java,true]import java.text.SimpleDateFormat;import android.app.Activity;import android.content.Context;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.widget.TextView;/*** * @author ZDY**/public class CurrentLocation extends Activity implements LocationListener {private TextView myLocationText;private LocationManager locationManager;private String provider;private Location location;private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_current_location);myLocationText = (TextView) findViewById(R.id.myLocationText);locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// String provider = LocationManager.GPS_PROVIDER;Criteria criteria = new Criteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(true);criteria.setBearingRequired(true);criteria.setCostAllowed(true);criteria.setPowerRequirement(Criteria.POWER_LOW);provider = locationManager.getBestProvider(criteria, true);location = locationManager.getLastKnownLocation(provider);updateWithNewLocation(location);locationManager.requestLocationUpdates(provider, 2000, 10, this);}private void updateWithNewLocation(Location location) {String latLongString;if (location != null) {double lat = location.getLatitude();double lng = location.getLongitude();float spe = location.getSpeed();// 速度float acc = location.getAccuracy();// 精度double alt = location.getAltitude();// 海拔float bea = location.getBearing();// 轴承long tim = location.getTime();// 返回UTC时间1970年1月1毫秒latLongString = "纬度:" + lat + "\n经度:" + lng + "\n精度:" + acc+ "\n速度:" + spe + "\n海拔:" + alt + "\n轴承:" + bea + "\n时间:"+ sdf.format(tim);} else {latLongString = "无法获取位置信息";}myLocationText.setText("您当前的位置是:\n" + latLongString);}@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stubupdateWithNewLocation(location);}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stubupdateWithNewLocation(null);}@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}}[/mw_shl_code]AndroidManifest.xml需要添加相应的权限:[mw_shl_code=java,true][/mw_shl_code]运行效果图如下:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值