gpt4 book ai didi

iphone - 为什么我的 CLLocation 速度如此不准确?

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:40 24 4
gpt4 key购买 nike

我正在尝试使用 iPhone SDK,我想在我的应用程序中显示当前速度。有很多应用程序可以非常精确地做到这一点,尤其是对于运行或骑自行车等低速情况。我见过的最好的是 RunKeeper。

但是,在我的应用程序中,速度绝对不准确。在低速时它始终为空,只有在高速时它才会显示一些值,但它们很少更新并且没有真正用处。

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
if (newLocation.timestamp > oldLocation.timestamp &&
newLocation.verticalAccuracy > 0.0f && // GPS is active
newLocation.horizontalAccuracy < 500.0f && // GPS is active
//newLocation.horizontalAccuracy < kCLLocationAccuracyHundredMeters && // good quality GPS signal
//newLocation.speed > 1.0f && // enough movment for accurate speed and course measurement
oldLocation != nil) // oldLocation is nil on the first reading
{
double speed = (newLocation.speed * 3.6);
[self updateDisplayWithSpeed:speed];
//double direction = newLocation.course;
}
}

有人有这方面的工作代码吗?或者你能告诉我我的问题是什么吗?

最佳答案

我会尝试以下方法。

请记住,您应该根据场景需要设置 distanceFilter 和 desiredAccuracy:步行与开车等不同。此外,当您从 GPS 请求高精度时,您必须始终丢弃由GPS 并使用第二个作为起始位置。引用 Apple 文档:

您应该为此属性分配一个适合您的使用场景的值。换句话说,如果您只需要几公里内的当前位置,则不应指定 kCLLocationAccuracyBest 作为精度。更准确地确定位置需要更多的时间和更多的能量。请求高精度位置数据时,位置服务提供的初始事件可能不具有您请求的精度。位置服务会尽快传送初始事件。然后,它会继续按照您要求的精度确定位置,并在该数据可用时根据需要提供其他事件。

这是我的建议。

首先,使用 GPS 以至少一秒的间隔更新位置。低于此间隔时,速度值是无用的,因为它是以米每秒为单位测量的,并且由于前面的讨论,您不太可能在不到一秒的时间内获得高精度的有效更新。

其次,仅对位置坐标使用有意义的值:您应该丢弃具有负 horizo​​ntalAccuracy 的值。这就是我在谈到好位置时所指的。

第三,您可以自己计算距离:使用 getDistanceFrom() 计算上一个正确位置与上一个正确位置之间的距离,然后除以位置更新之间经过的秒数。这将为您提供以米/秒为单位的距离。我将尝试这样做并将结果与​​ Apple 提供的速度进行比较。

关于iphone - 为什么我的 CLLocation 速度如此不准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com