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,实现了定位服务的无缝连接。

猜你喜欢

转载自technicalsearch.iteye.com/blog/2111417