【问题标题】:Getting an accurate location with CLLocationManager使用 CLLocationManager 获取准确的位置
【发布时间】:2010-11-06 23:03:52
【问题描述】:

我开始搞乱 CLLocationManager 并尝试使用下面的回调方法。我到外面在我的 iPhone 上测试它,在最初的几次更新中,我似乎得到了乱码,就像突然间我的距离是 39 米,即使我没有移动任何地方。或者有时它会从 5 米开始,然后跳到 20 米,再次没有我移动任何地方。我走到外面走,从最初的起点开始的更新看起来还不错,然后当我走回来时,我又回到了原来的 39 米起点。我想知道我在下面所做的是否正确。我还包括了我的 viewDidLoad 方法,我在其中初始化了我的 CLLocationManager 对象。

有没有办法确保我的第一个值是准确的?提前致谢。

- (void)viewDidLoad
{
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (startingPoint == nil) {
        NSLog(@"NIL starting point");
        self.startingPoint = newLocation;
    }

    CLLocationDistance distance = [newLocation distanceFromLocation:startingPoint];
    NSString *distanceString = [[NSString alloc] initWithFormat:@"%g m", distance];
    distanceLabel.text = distanceString;
    [distanceString release];

    numberOfUpdates++;
    NSString *countString = [[NSString alloc] initWithFormat:@"%d", numberOfUpdates];
    countLabel.text = countString;
    [countString release];
}

【问题讨论】:

    标签: iphone ios cllocationmanager


    【解决方案1】:

    GPS 是一项不完善的技术。大气条件、卫星可用性(和位置)、天空能见度、附近物体(建筑物)反射的信号都导致其固有的不准确性。虽然甚至还有一个“准确度”值(通常相当不错)——即使这并不完全可靠。

    不允许飞机使用 GPS 进行精确进近 - 即使它们的接收器不够准确,它们还需要其他技术(这些技术也有其自身的问题)。

    尝试运行标准的“地图”应用程序并将其用作比较。我认为您的代码很好 - 它只是 GPS。

    我这么说当然是因为我正在开发自己的海上导航应用程序,我自己也遇到了所有这些问题。

    【讨论】:

      【解决方案2】:

      虽然这是一个老问题,但我仍然想回答。第一次调用“didUpdateToLocation”通常是一些旧值,您应该始终检查时间戳。来自 Apple 文档:

      NSDate* eventDate = newLocation.timestamp;
      NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
      if (abs(howRecent) < 15.0)
      {
         // use the value
      }
      

      【讨论】:

        【解决方案3】:

        在您的didUpdate 方法中,您可以测试newLocation.horizontalAccuracy 属性以获得可接受的值,并丢弃任何不可能(甚至不可能!)的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-25
          • 1970-01-01
          相关资源
          最近更新 更多