我正在创建一个应用程序,需要确定我当前的位置(在didUpdateLocation中重新定位)是否存在于我拥有的一组地理坐标中。现在我明白,比较double / float值的相等性可能容易出错,因为地理坐标中涉及的精度非常高。 GPS中的轻微不准确可能会使我的算法偏离轨道。因此,我需要将它与一些误差范围进行比较。
如何将2个CLLocations与误差范围进行比较?或者确定位置读数中的错误(我不认为这是可能的,因为CLLocationManager会纠正它)。
提前致谢:)
答案 0 :(得分:4)
在每个CLLocation
实例中都有一个声明为@property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy;
的属性。您可以做的是如下例程:
-(BOOL)isLocation:(CLLocation*)location inRangeWith:(CLLocation*)otherLocation{
CLLocationDistance delta = [location distanceFromLocation:otherLocation];
return (delta < location.horizontalAccuracy);
}
你可以制作更复杂的逻辑,因为两个地点都有这个属性......
干杯。 【ツ】
答案 1 :(得分: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
}