码迷,mamicode.com
首页 > 移动开发 > 详细

如何获得你的准确位置及iphon手机应用定位不准原因分析

时间:2015-08-29 18:49:26      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:提高位置定位准确度   gps   准确的位置   定位不准原因分析   

相信做APP的大都要用到高德地图和百度地图,并且用到获取用户位置的功能。那么你会发现,你对地图接口设置了过滤精度,结果你获取的位置很不准确,经常你在路上跑,结果在你的应用上看到你的车在河里游,让人泪流满面。来我告诉为何这样坑你你怎么获取用户的准确位置。
首先IPHONE的GPS定位在全球都能获得位置信息,不像安卓那么苦逼进了房间就定位不到位置了。若是你在一个山头的背面在搞得地图上定位不到你的位置,并非你的地图没有收到GPS位置信息,而是你的地图没有收录你的坐标信息,。这个场景我在杭州虎跑后山的马儿上岗附近的山头测试过,再一个山头背面我写的测试应用收到GPS位置信息,但是高德地图和百度地图都没有定位信息。在上天竺山头上,我的手机从4G切换到3G网络,我写的应用收到GPS位置信息,高德地图和百度地图都没有定位信息,百度地图能加载地图完毕,高德地图加载不出来。经过测试IPHONE的应用,只要开启时有网络,以后把网络关闭,那么你的手机应用仍旧能收到位置信息,所以IPHONE获取的是GPS位置信息。不像安装又是基站定位,GPS定位,网络定位N多种情况。但是IOS的GPS位置信息精度仍然受到建筑物,山脉等障碍物的影响。如经过测试在我们公司的主楼6楼上,一般开启高德地图,获取的精度大约是65,再公司外面大门口的精度可以达到10米–20米。
以高德地图为例:
高德有两种位置过滤位置信息的设置:设置过滤距离,设置期望精度。
_mapView.distanceFilter = 20.0;
// _mapView.desiredAccuracy = kCLLocationAccuracyHundredMeters;
当你设置了过滤精度后,实际上当你的应用启动时,有3个精度都超过20米(达到65米精度)的点进入if(updatingLocation)的下面的语句。并不是你期望的位置坐标,以后还有精度达到20米–45米的点进入里面,所以是期望吗?不靠谱。

-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
updatingLocation:(BOOL)updatingLocation
{
    if(updatingLocation)
    {
         //保存位置信息和位置相关操作,如画车子的运行轨迹

     }
}

言归正传,如何获得精度达到20米的点呢,当然要靠进度来判断了。注意若某片区域GPS信号不好,收不到精度达不到20米的位置信息,那么你可能过滤掉所有的位置信息,那么你的车在这个区域将没有轨迹。谁让你过滤的太狠呢!你对我太狠我人间暂时人间蒸发一段时间。
正确的获取位置代码是:

-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
updatingLocation:(BOOL)updatingLocation
{



    if(updatingLocation)
    {
                                     if(userLocation.location.horizontalAccuracy <= 20.0)
            {
                //保存位置信息和位置相关操作,如画车子的运行轨迹
            }


     }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

如何获得你的准确位置及iphon手机应用定位不准原因分析

标签:提高位置定位准确度   gps   准确的位置   定位不准原因分析   

原文地址:http://blog.csdn.net/jia12216/article/details/48089079

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!