【问题标题】:iOS Compare GPS locationsiOS 比较 GPS 位置
【发布时间】:2012-08-28 18:34:47
【问题描述】:

我正在创建一个应用程序,它需要确定我的当前位置(在 didUpdateLocation 中记录:)是否存在于我拥有的一组地理坐标中。现在我明白了比较 double/float 值是否相等可能容易出错,因为地理坐标中涉及的精度非常高。 GPS 中的轻微不准确可能会使我的算法偏离轨道。因此,我需要将它与一些误差幅度进行比较。

如何比较 2 个 CLLocations 的误差范围?或者确定位置读取中的错误(我认为这是不可能的,因为 CLLocationManager 会纠正它)。

提前致谢:)

【问题讨论】:

  • What have you tried? 检查您的点是否在边或半径为误差范围的正方形或圆形内?

标签: ios gps cllocationmanager


【解决方案1】:

在每个CLLocation 实例中,都有一个声明为@property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy; 的属性,您可以做如下例程:

-(BOOL)isLocation:(CLLocation*)location inRangeWith:(CLLocation*)otherLocation{
    CLLocationDistance delta = [location distanceFromLocation:otherLocation];
    return (delta < location.horizontalAccuracy);
}

您可以制作更复杂的逻辑,因为两个位置都具有该属性...

干杯。 【ツ】

【讨论】:

  • 嗨,爱丽儿。 .horizo​​ntalAccuracy 是一个很好的指针。我可以使用它,谢谢。但我的根本问题是我想避免使用 distanceFromLocation:那里有任何解决方法吗?
  • 您可以计算坐标中的增量,但它会更加复杂,因为一个坐标角的实际距离根据与赤道的距离不同以米为单位。无论如何,据我所知,distanceFromLocation: 没有太多的电源或 CPU 消耗......
【解决方案2】:

您可以使用CoreLocation 方法distanceFromLocation: 来查找用户位置与另一个点之间的距离。如果距离小于您决定的任何阈值,那么您可以假设位置是相同的。

CLLocationDistance threshold = 5.0;  // threshold distance in meters

// note: userLocation and otherLocation are CLLocation objects
if ([userLocation distanceFromLocation:otherLocation] <= threshold) {
    // same location
}

【讨论】:

  • 嗨 jonkroll,我没有看过任何可以证明这一点的定量研究,但从外观上看,Haversine 公式看起来很复杂,并且 distanceFromLocation: 很可能使用它来计算 2 lat 之间的距离-多头。我想避免在每个经纬度上使用该功能。有什么解决方法吗?
猜你喜欢
  • 2019-09-04
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2013-08-11
相关资源
最近更新 更多