iOS:locationManager:didUpdateToLocation:fromLocation:报告不移动时的速度

时间:2011-09-27 01:33:06

标签: iphone ios gps core-location cllocationmanager

我正在使用locationManager:didUpdateToLocation:fromLocation:获取位置更新。大多数一切都运行良好但是当我在静止时检查newLocation.speed属性时,我几乎总是得到一个大于0的速度值。即使我第一次开始获取位置更新并且从未移动过,我将获得正值一些更新。

只需执行一个大于0的简单检查,然后设置UILablel,如果它是:

if (newLocation.speed > 0) {
     self.speed.text = [NSString stringWithFormat:@"%.2f",[self speed:newLocation.speed]];
}

该方法的更多代码:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    // Check first if we are getting the accuracy we want
    if (newLocation.horizontalAccuracy < 0) return;

    // Make sure the update is new not cached
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;

    // Check to see if old and new are the same
    if ((oldLocation.coordinate.latitude == newLocation.coordinate.latitude) &&
        (oldLocation.coordinate.longitude == newLocation.coordinate.longitude)) return;

    // Make sure our new location is not super far away from old
    CLLocationDistance dist = [newLocation distanceFromLocation:oldLocation];
    NSLog(@"Distance: %f", dist);
    if (dist > 40) return;

    // Make sure we have a new location
    if (!newLocation) return;

    // Check to see if we are stopped
    if (newLocation.speed == 0) {
        self.inMotion = NO;
    } else if (newLocation.speed > 0) {
        self.inMotion = YES;
    } else {
        // Probably an invalid negative value
        self.inMotion = NO;
    }//end

    // Speed
    // Should always be updated even when not recording!
    if (newLocation.speed > 0 && inMotion) {
        self.speed.text = [NSString stringWithFormat:@"%.2f",[self speed:newLocation.speed]];
        NSLog(@"Speed: %f", newLocation.speed);
    }

    // Tons more code below that I removed for this post

}//end

这是正常的吗?

1 个答案:

答案 0 :(得分:2)

大于零多少钱?而且持续多久?您比较的所有位置都具有相同的准确度吗?

在GPS接收器中,速度通常由连续位置定位之间的位置变化确定(它也可以通过测量多普勒频移来计算)。由于测量错误或更准确,位置修复会略有不同。位置的变化可能会使设备看起来移动。

例如,假设您的第一个修正具有1000米水平的精度,而您的第二个修复具有300米水平的精度,第一个位置可能距实际位置1000米,第二个距离第一个修复距离700米即使设备没有移动。这转化为随时间变化的位置,即“速度”。