【问题标题】:How To Handle Incorrect CLLocation Data如何处理不正确的 CLLocation 数据
【发布时间】:2013-08-18 13:08:55
【问题描述】:

我正在开发一款健身追踪应用,例如 Runtastic、Nike+ 等。我将从头到尾绘制整个活动的地图。我不会在应用启动时开始更新位置更改,而是在用户开始锻炼时开始更新。但是当 locationManager 开始更新时,前 3 到 5 个 CLLocations 是非常不正确的。误差高达一公里。我正在使用以下代码来初始化位置管理器:

self.locationManager = [(PFAppDelegate *)[[UIApplication sharedApplication] delegate] locationManager];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.locationManager.distanceFilter = 5.0;
[self.locationManager startUpdatingLocation];

并且在 locationManagerDidUpdateToLocation 方法中:

 if( didFindGPS == NO )
 {
     if( [[lastLocation timestamp] timeIntervalSinceNow] < 10.0 )
     {
         if( [lastLocation horizontalAccuracy] < 20)
         {
            didFindGPS = YES;
         }
     }
 }
 else
 {
     //process data here
 }

这不会过滤掉那些最初不正确的位置。我也尝试过忽略horizo​​ntalAccury 值小于20 的位置,但是应用程序不会处理任何位置。

可以做些什么来改进第一个位置或处理第一个不正确的位置?

【问题讨论】:

  • 请增加 distanceFilter 值。

标签: ios objective-c core-location cllocationmanager cllocation


【解决方案1】:

改变

if ([lastLocation horizontalAccuracy] < 20)...

if (([lastLocation horizontalAccuracy] > 0) && ([lastLocation horizontalAccuracy] < 20))...

根据documentation

负值表示该位置的经纬度 无效。

一个负值horizontalAccuracy,即。

如果您想设置处理数据的条件(看起来像您这样做),您应该将代码重写为:

if (([lastLocation horizontalAccuracy] > 0) && ([lastLocation horizontalAccuracy] < 20))
{
    didFindGPS = YES;
    //process the data here... since here the location fits your limitations
    //and you don't loose the first location (as in original code)
}
else
{
    didFindGPS = NO;
}

请注意,此代码可能会给您一些丢失 GPS 的错误警报,因此您可能希望省略 else 块。

【讨论】:

  • 我试过了,第一次更新的位置距离正确位置还有 300 多米。
  • 嗯,是的,因为您正在条件块之外处理数据。您的方法将获取所有通过过滤器的位置。但是您仍然可以在处理数据之前添加自己的条件。此时你的if语句只适用于设置didFindGPS = YES;
  • 新的位置更新不应该比第一次错误少吗?
  • 这一切都取决于 GPS 条件。假设您在等待初始位置修复时手上有手机。然后你把它放在你的口袋里并在森林中奔跑——准确度会有所不同。如果当前条件(天空能见度、云层覆盖......)足够糟糕,您也可以取消 GPS 定位。
  • 我必须进一步测试。如果我使用您所说的 if-else 语句,当用户在开始时覆盖范围不好时,他们的开始位置将丢失。稍后我会在有建筑物的地方进行测试。
猜你喜欢
  • 2020-03-07
  • 2016-08-23
  • 2020-08-24
  • 2010-09-20
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多