很多苹果手机用户每次使用定位服务时都会发现定位不准确。那么原因是什么呢?让我通过这篇文章向您介绍一下,请继续阅读。
苹果的定位功能批量返回定位点。通常,一个批次会返回3 到10 个不同数量的位置点信息。通常,批次中最后一个点的位置和方向是最准确的。一批位置点通常在100 毫秒内完整返回。如果你想得到最准确的点,你不能一看到第一个点就发送它。相反,您需要延迟100 毫秒才能接收该批次中的所有点,然后再发送最后一个最准确的点。注意:应用首次启动时,获取的位置一般为2~3个点,这些点之间的间隔可能大于100毫秒。
相信大多数APP开发者都会使用高德地图和百度地图,并使用获取用户位置的功能。然后你会发现,如果你给地图界面设置了过滤精度,那么你获取的位置是非常不准确的。常常你在马路上奔跑,然后在你的应用程序上看到你的车在河里游泳,这让人泪流满面。让我告诉你为什么这会欺骗你以及如何获取用户的准确位置。
首先,IPHONE的GPS定位可以获取世界各地的位置信息。不像安卓那么难,进入房间无法定位位置。原因是IPHONE手机的位置信息是由苹果定位模块返回给你的。苹果应用开发者关注IPHONE手机的定位类型(gps定位、wifi定位、基站定位)。 Apple 会自动为您处理。您只需要注意即可获得。位置信息的准确性就足够了。安卓手机必须根据具体情况自行处理(GPS定位、wifi定位、基站定位)。而且Android获取的位置很少有以前的点弹出。因此,Android手机的定位是非常困难的。如果你在山后,地图上无法定位你的位置,那不是你的地图没有接收到GPS位置信息,而是你的地图没有包含你的坐标信息。我在杭州虎跑山后马耳岗岗附近的一座小山上测试了这个场景。我在山后写的测试应用程序接收到了GPS位置信息,但高德地图和百度地图都没有定位信息。在天柱山山顶,我的手机从4G切换到3G网络。我编写的应用程序接收GPS 位置信息。高德地图和百度地图都没有定位信息。百度地图可以加载地图,但高德地图无法加载。经过测试IPHONE应用程序,只要开机时有网络,之后关闭网络,你的手机应用程序仍然可以接收到位置信息,所以IPHONE获取到的是GPS位置信息或者基站定位信息。与安装不同的是,有基站定位、GPS定位、网络定位等多种情况。但IOS的GPS位置信息的准确性仍然受到建筑物、山脉等障碍物的影响。例如,在我们公司主楼6楼测试后,使用4G网络定位偏离到很远的位置(500米外),打开wifi,一般打开高德地图,得到的精度在65左右,在公司外面的门口(4G网络)的精度可以达到10米-20米。
iPhone和Android确实不同。经过我们团队在各种环境(山地、建筑物、房间、偏远农村、山脚下)的测试,iPhone绝对可以获取经纬度,但误差有所不同。安卓手机在这些环境下基本无法获取经纬度。用户大致有两种情况:开启wifi定位(有wifi网络)、关闭wifi(无wifi可用,因为手机wifi有限,如果有wifi网络肯定会优先考虑wifi网络) ,并且不会使用4g网络)通过移动网络(4g、3g、2g网络)定位。普通用户一般不太关注手机是如何定位的,是否通过基站、GPS、网络等定位。如果app想利用获取到的经纬度在地图上画线,那么必须考虑这种定位类型的判断。房间里的wifi定位和基站定位可靠,一般应该扔掉,否则你的人就在小区里。那你的位置显示在1500米外并画一条线就太离谱了。如果你的手机是用GPS定位画线,是正常的,没有GPS信号进入的区域(隧道等),你的定位切换到基站定位,那么你的轨迹曲线不会明显晃动?幸运的是,可以利用定位返回的精度来过滤此类偏差较大的点。
如果手机打开WiFi,手机会自动连接4G基站的免费WiFi。有时可以通过4G基站的免费WiFi连接上网(场景1),有时需要点击登录才能上网(场景2)。
场景一:由于手机优先使用WiFi网络,如果有WiFi网络,使用WiFi定位而不是GPS定位,会导致定位精度降低的问题。
场景2是典型的开放网络(也称为受限网络)。手机会收到正常的网络通知,但根本无法上网,选中状态的socket会立即返回,监测不到任何异常。
因此,对于要求定位精度30米以上的应用(WiFi定位的典型特征是速度为-1,经常出现的精度值为65),必须关闭WiFi,防止手机自动定位连接到WiFi 并导致准确性不清楚。减少。
以高德地图为例:
高德地图对位置过滤位置信息有两种设置:设置过滤距离和设置所需精度。
_mapView.distanceFilter=20.0;
//_mapView.desiredAccuracy=kCLLocationAccuracyHundredMeters;
当你设置了过滤精度之后,实际上当你的应用程序启动的时候,三个精度超过20米的点(达到65米的精度)进入下面的if(updatingLocation)语句。这不是您期望的位置坐标。未来还会有20米到45米精度的点进入其中,这是一个期待吗?不可靠。
-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
更新位置:(BOOL)更新位置
{
if(更新位置)
{
//保存位置信息以及位置相关的操作,比如绘制小车的轨迹
}
}
言归正传,如何获得20米精度的点,当然要看进度。请注意,如果某个区域的GPS 信号较差,无法接收到精度小于20 米的位置信息,您可以过滤掉所有位置信息,您的汽车将在该区域没有轨迹。谁告诉你过滤太严格了?你对我太残忍了,让我从这个世界上消失了一段时间。因为我们的应用是曹操专车,所以我们不考虑车的垂直高度,只考虑水平精度。如果你想控制水平精度,那么你可以自己控制!如果对精度控制仍不满意,建议采用三点滤波法(取最近的三个点,如果第二点误差过大,则剔除第二点)。
获取位置的正确代码(不考虑垂直精度场景)是:
-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
更新位置:(BOOL)更新位置
{
if(更新位置)
{
if(userLocation.location.horizontalAccuracy=20.0)
{
//保存位置信息以及位置相关的操作,比如绘制小车的轨迹
}
}
}
好了,以上就是小编为大家带来的关于“苹果手机好友定位不准确”的完整介绍了。我希望它能帮助你。