【问题标题】:Improve Accuracy of Location Manager in iOS Programming提高 iOS 编程中位置管理器的准确性
【发布时间】:2012-11-21 21:28:01
【问题描述】:

我正在制作一个跟踪用户的应用程序。我注意到应用程序何时进入后台,然后当您打开应用程序时,它会为用户显示错误的当前位置,直到大约 5 秒。是否可以解决这个问题,因为 5 秒的延迟会破坏跟踪结果(它无缘无故地增加了 3 英里)。

编辑:这个问题实际上并不是一个“错误”。我必须在我的 Info.plist 中设置我想要后台处理和繁荣应用程序跟踪是超级准确的。一个小教程来做到这一点:

  1. 转到 Info.plist
  2. 添加一个名为“必需的背景模式”的新行
  3. 然后再次添加一个名为“App registers for location updates”的新行
  4. 我们完成了 :)

【问题讨论】:

  • 那么您想在 Xcode 中还是在您的应用程序中更新位置? (提示:我当然知道在你的应用程序中,但你不应该将iOS编程称为Xcode编程,并且你也应该在与Xcode本身无关的问题中省略xcode标签。编写iOS应用程序不需要Xcode。 )
  • 好吧,打开的是,当用户关闭应用程序或关闭 iPhone 时,应用程序正在计算用户位置,它显示错误的用户位置,然后五秒钟后它显示正确的用户位置,这让我距离值错误:(
  • @H2CO3 我把标题改成了iOS Programming。 :)
  • 编辑+1怎么样 :)
  • 我在考虑。在这里你要补偿 -1。

标签: iphone ios xcode ipad map


【解决方案1】:

您可以做的一件事是检查CLLocation 上的horizontalAccuracy 属性,您将被退回。如果这高于某个阈值,那么您可以丢弃结果并等待更准确的结果。如果它在数英里之外,那么我希望准确度数字会很大。它最有可能使用蜂窝基站而不是 GPS 来确定位置,而且误差幅度会大得多。

在您的CLLocationManagerDelegatelocationManager:didUpdateLocations: 方法中,您可以执行以下操作:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
  if ([locations count] > 0) {
    CLLocation *lastUpdatedLocation = [locations lastObject];
    CLLocationAccuracy desiredAccuracy = 1000; // 1km accuracy
    if (lastUpdatedLocation.horizontalAccuracy > desiredAccuracy) {
      // This location is inaccurate. Throw it away and wait for the next call to the delegate.
      return;
    } 
    // This is where you do something with your location that's accurate enough.
  }
}

【讨论】:

  • 完成。不过你真的应该尝试一下。
  • 感谢我在不准确的位置更新中徘徊的代码,我应该在其中输入代码还是忽略它直到它获得准确的位置......
  • 这取决于你。我不知道就您的应用程序逻辑而言什么是最好的。您在问题中说不准确的位置会导致问题,所以我会忽略它们。
  • 不,您必须使用仪表。在此处查看文档developer.apple.com/library/mac/#documentation/CoreLocation/…
  • 好的,感谢您的帮助:)
猜你喜欢
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多