【问题标题】:Inaccurate distance travelled values行驶距离值不准确
【发布时间】:2013-10-31 17:56:03
【问题描述】:

使用 corelocation 框架的新手可能需要一些帮助来理解为什么我的代码不能按照我想要的方式运行。我希望它跟踪行进的距离,但是当视图启动时,它每次都会做不同的事情。有时它会跳到 1000 或另一个大值,或者它会随机增加。谁能明白为什么这段代码不适合我?

    - (void)viewDidLoad
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    locationManager.distanceFilter = 100; //update every 100 meters
    [locationManager startUpdatingLocation];
    startLocation = nil;

    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    if (startLocation == nil)
    {
        totalDistanceBetween = 0;
        self.startLocation = newLocation;
    }
    CLLocationDistance distanceBetween = [newLocation distanceFromLocation:startLocation ];
    startLocation = newLocation;
    totalDistanceBetween += distanceBetween;
    totalDistanceBetween = totalDistanceBetween * 0.001; //convert to m value to km
    NSString *tripString = [[NSString alloc]
                            initWithFormat:@"%.02f",
                            totalDistanceBetween];
    distance.text = tripString;
}

【问题讨论】:

  • 可能不相关,但是:首先代码将 distanceBetween (以米为单位)添加到 totalDistanceBetween (将以上次调用的 km 为单位),然后将 totalDistanceBetween 除以 1000(但它已经以 km 为单位)称呼)。另外,您可能应该这样做 self.startLocation = newLocation.
  • 谢谢。我创建了一个单独的浮点值来保存计算。

标签: ios core-location cllocationmanager cllocation


【解决方案1】:

让我想到的第一件事是你将startLocation 设置为nil你告诉位置经理开始给你更新之后。

根据startLocation 的定义/初始化/重用方式,它可能不包含您期望的初始值。

【讨论】:

  • 谢谢。这固定了值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多