相信做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)
{
//保存位置信息和位置相关操作,如画车子的运行轨迹
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。