`

A-GPS定位与GPS定位的Android简单实现

 
阅读更多
 A-GPS定位与GPS定位的Android简单实现
首先了解一下在android中定位时所需要的几个名词:
一、LocationManager
LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。
LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 

二、LocationListener
LocationListener,位置监听,监听位置变化,监听设备开关与状态。 
private LocationListener locationListener=new LocationListener() {
        
        /**
         * 位置信息变化时触发
         */
        public void onLocationChanged(Location location) {
            updateView(location);
            Log.i(TAG, "时间:"+location.getTime()); 
            Log.i(TAG, "经度:"+location.getLongitude()); 
            Log.i(TAG, "纬度:"+location.getLatitude()); 
            Log.i(TAG, "海拔:"+location.getAltitude()); 
        }
        
        /**
         * GPS状态变化时触发
         */
        public void onStatusChanged(String provider, int status, Bundle extras) {
            switch (status) {
            //GPS状态为可见时
            case LocationProvider.AVAILABLE:
                Log.i(TAG, "当前GPS状态为可见状态");
                break;
            //GPS状态为服务区外时
            case LocationProvider.OUT_OF_SERVICE:
                Log.i(TAG, "当前GPS状态为服务区外状态");
                break;
            //GPS状态为暂停服务时
            case LocationProvider.TEMPORARILY_UNAVAILABLE:
                Log.i(TAG, "当前GPS状态为暂停服务状态");
                break;
            }
        }
    
        /**
         * GPS开启时触发
         */
        public void onProviderEnabled(String provider) {
            Location location=lm.getLastKnownLocation(provider);
            updateView(location);
        }
    
        /**
         * GPS禁用时触发
         */
        public void onProviderDisabled(String provider) {
            updateView(null);
        }

    
    };
 三、Location
Location,位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。
Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);   
system.out.println("时间:"+location.getTime());   
system.out.println("经度:"+location.getLongitude());  
注意:Location location=new Location(LocationManager.GPS_PROVIDER)方式获取的location的各个参数值都是为0。

四、GpsStatus.Listener
GpsStatus.Listener ,GPS状态监听,包括GPS启动、停止、第一次定位、卫星变化等事件。
//状态监听
    GpsStatus.Listener listener = new GpsStatus.Listener() {
        public void onGpsStatusChanged(int event) {
            switch (event) {
            //第一次定位
            case GpsStatus.GPS_EVENT_FIRST_FIX:
                Log.i(TAG, "第一次定位");
                break;
            //卫星状态改变
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                Log.i(TAG, "卫星状态改变");
                //获取当前状态
                GpsStatus gpsStatus=lm.getGpsStatus(null);
                //获取卫星颗数的默认最大值
                int maxSatellites = gpsStatus.getMaxSatellites();
                //创建一个迭代器保存所有卫星 
                Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
                int count = 0;     
                while (iters.hasNext() && count <= maxSatellites) {     
                    GpsSatellite s = iters.next();     
                    count++;     
                }   
                System.out.println("搜索到:"+count+"颗卫星");
                break;
            //定位启动
            case GpsStatus.GPS_EVENT_STARTED:
                Log.i(TAG, "定位启动");
                break;
            //定位结束
            case GpsStatus.GPS_EVENT_STOPPED:
                Log.i(TAG, "定位结束");
                break;
            }
        };
    };
//绑定监听状态
lm.addGpsStatusListener(listener);
 五、GpsStatus
GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。
//实例化    
GpsStatus gpsStatus = locationManager.getGpsStatus(null); // 获取当前状态    
//获取默认最大卫星数    
int maxSatellites = gpsStatus.getMaxSatellites();     
//获取第一次定位时间(启动到第一次定位)    
int costTime=gpsStatus.getTimeToFirstFix();   
//获取卫星    
Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();   
//一般再次转换成Iterator    
Iterator<GpsSatellite> itrator=iterable.iterator();
 六、GpsSatellite
    
GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。
//获取卫星    
Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();   
//再次转换成Iterator    
Iterator<GpsSatellite> itrator=iterable.iterator();   
//通过遍历重新整理为ArrayList    
ArrayList<GpsSatellite> satelliteList=new ArrayList<GpsSatellite>();    
int count=0;   
int maxSatellites=gpsStatus.getMaxSatellites();   
while (itrator.hasNext() && count <= maxSatellites) {     
    GpsSatellite satellite = itrator.next();     
    satelliteList.add(satellite);     
    count++;   
}    
System.out.println("总共搜索到"+count+"颗卫星");   
//输出卫星信息    
for(int i=0;i<satelliteList.size();i++){   
    //卫星的方位角,浮点型数据    
    System.out.println(satelliteList.get(i).getAzimuth());   
    //卫星的高度,浮点型数据    
    System.out.println(satelliteList.get(i).getElevation());   
    //卫星的伪随机噪声码,整形数据    
    System.out.println(satelliteList.get(i).getPrn());   
    //卫星的信噪比,浮点型数据    
    System.out.println(satelliteList.get(i).getSnr());   
    //卫星是否有年历表,布尔型数据    
    System.out.println(satelliteList.get(i).hasAlmanac());   
    //卫星是否有星历表,布尔型数据    
    System.out.println(satelliteList.get(i).hasEphemeris());   
    //卫星是否被用于近期的GPS修正计算    
    System.out.println(satelliteList.get(i).hasAlmanac());   
}
 
A-GPS
A-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,实现了定位服务的无缝连接。

分享到:
评论

相关推荐

    Android项目实战--手机卫士10--GPS定位与发送短信指令

    Android项目实战--手机卫士10--GPS定位与发送短信指令

    Android GPS定位简单 DEMO

    -- GPS定位必须的权限 --&gt; &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt; **1.获取位置管理器对象LocationManager** ``` import android.location.LocationManager; ...

    基于Android的A-GPS和WiFi的混合定位算法设计.pdf

    基于 Android 的 A-GPS 和 WiFi 的混合定位算法设计 本文设计了一种基于 Android 的 A-GPS 和 WiFi 的混合定位算法,旨在提高定位系统的性能和精度。该算法通过结合 A-GPS 和 WiFi 两种技术,实现了混合定位,提高...

    Android-GPS定位与Google地图管理模块的代码设计.pdf

    【Android-GPS定位与Google地图管理模块的代码设计】这篇技术文档主要讲解了如何在Android平台上构建基于GPS定位和Google地图的导航系统。系统开发采用了Java语言和Eclipse开发工具,涉及的关键技术包括GPS定位、...

    Android GPS 定位的实现

    Android GPS 定位的实现 Android GPS 定位是 Android 平台中的一种常见的定位服务,通过使用 Google 地图实现 GPS 定位服务。下面是 Android GPS 定位的实现知识点: 一、添加权限 要使用 Android 平台的 GPS ...

    Android-GPS定位与Google地图的总体设计.pdf

    【Android-GPS定位与Google地图的总体设计】 在Android应用开发中,集成GPS定位与Google地图可以极大地增强应用的功能和实用性。本文主要讨论了一个基于Android的GPS定位系统的设计方案,结合Google地图,提供了...

    Android编程实现GPS定位

    【Android编程实现GPS定位】 Android平台为开发者提供了一套完整的框架,使得开发GPS定位应用变得简单易行。本文旨在引导开发者了解如何利用Android SDK来创建一个基础的GPS定位应用程序,包括如何设置开发环境,...

    android应用源码(精)GPS定位测速源码-IT计算机-毕业设计.zip

    本资料是针对Android应用开发的一份精良源码,主要实现了GPS定位和测速功能,非常适合计算机科学与技术专业的学生进行毕业设计学习。在Android平台上,GPS定位和速度监测是移动应用开发中的常见需求,例如在导航、...

    GPS定位功能。GPS定位例子。

    在Android平台上,开发者会使用LocationManager类和LocationListener接口来实现GPS定位。他们需要在Manifest文件中声明相应的权限,如ACCESS_FINE_LOCATION。在iOS中,类似地,开发者会使用Core Location框架,创建...

    android模拟器使用gps定位

    在Android开发中,模拟器是开发者测试应用的重要工具,尤其对于地理位置相关功能的测试,如GPS定位。本文将深入探讨如何在Android模拟器上使用GPS定位,并获取经纬度坐标数据。 首先,我们要明白Android模拟器如何...

    AndroidGPS定位源码

    综上所述,这份源码实例涵盖了Android应用中实现GPS定位的基本流程,结合Google Maps服务,可为用户提供直观的位置展示。通过深入学习和实践,开发者不仅可以掌握基础的定位功能,还能进一步探索如地理围栏、轨迹...

    Android获取GPS定位示例程序

    在Android平台上,获取GPS定位是移动应用开发中的基础功能,尤其对于那些依赖地理位置信息的应用,如导航、社交、天气预报等。本示例程序"LocationDemo"是专门为开发者设计的,用于展示如何在Android Studio环境下...

    Android实现GPS定位(转载别人的)

    在Android中的GPS定位在Android中的GPS定位在Android中的GPS定位在Android中的GPS定位

    安卓GPS地图导航定位指南相关-Android高德地图gps定位.zip

    Android 高德地图gps定位.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    android的GPS定位测试

    本文将深入探讨如何进行Android的GPS定位测试,以及与之相关的技术细节。 首先,我们要理解Android中的GPS定位原理。GPS定位依赖于天空中的多颗卫星,通过测量设备接收到信号的时间差来计算出设备的精确位置。在...

    mars-android-gps定位源码(3个)

    简单易懂~亲验。如果是刚刚入门android的话,想试试看android定位的人可以下载来参考看看~(这算入门篇吧,适合入门~)

    Android中实现GPS定位功能

    总的来说,实现Android中的GPS定位功能需要处理权限、注册监听器获取位置更新,并可能与第三方地图服务集成。通过这样的程序,用户可以获取到他们的实时位置,同时可以在地图上显示出来,这对于导航、位置跟踪等应用...

    基于Android平台的GPS定位系统的设计与实现.pdf

    "Android平台的GPS定位系统设计与实现" 1. Android操作系统概述:Android是目前发展最快、最具市场前景的智能操作系统,它不仅仅是一个手机系统,更是一整套包含硬件的解决方案。 2. GPS定位系统概述:GPS(Global...

    Android GPS定位 代码+APK

    在Android开发中,GPS定位是一项基础且重要的功能,它允许应用程序获取用户的位置信息,从而实现各种基于位置的服务,如导航、地图应用、社交网络签到等。本资源提供了一个实现Android GPS定位的源码示例,并附带了...

Global site tag (gtag.js) - Google Analytics