iphone - 使用 CLLocationManager 时查找速度时出现问题

标签 iphone cllocationmanager

我正在 iPhone 中开发速度计应用程序。我使用 CLLocationManager(基于 GPS)来测量车辆的速度。但我没有得到准确的速度。我已经尝试了各种 stackoverflow 讨论中给出的所有过滤方法。但我没有得到任何改善。有时,速度会达到更大的值(>400kmph)。

我不知道出了什么问题。请向我建议任何代码以获得准确的速度。

提前致谢,

我关注了下面提到的堆栈溢出讨论

Measuring velocity via iPhone SDK

Optimizing CLLocationManager/CoreLocation to retrieve data points faster on the iPhone

CLLocation speed

Why is my CLLocation speed so inaccurate?

我目前已经实现了以下代码:

//locationManager declaration in ViewDidLoad

locManager=[[CLLocationManager alloc]init];
locManager.delegate =self;
[locManager startUpdatingLocation];           


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

    NSTimeInterval locationAge = abs([newLocation.timestamp timeIntervalSinceNow]);

    if (locationAge > 5.0) return;
    if (newLocation.speed < 0 || newLocation.horizontalAccuracy < 0) return;
    if ((newLocation.horizontalAccuracy < (oldLocation.horizontalAccuracy - 10.0)) || (newLocation.horizontalAccuracy < 50.0)|| (newLocation.horizontalAccuracy <= 150.0))
    {
        if(oldLocation != nil)
        {
            CLLocationDistance distanceChange = [newLocation distanceFromLocation:oldLocation];

            NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];


            double calculatedSpeed;
            calculatedSpeed = (distanceChange / sinceLastUpdate)*3.6;   // to convert the speed into kmph.

        }       
    }

}

最佳答案

即使您不喜欢内置的速度功能,也可以轻松推出自己的功能。

速度是距离随时间的变化,对吗?

如果您有两个 CLLocation,您可以执行以下操作:

CLLocationDistance distance = [aLocation distanceFromLocation:bLocation];

distance 现在是这两点之间距离的 float (以米为单位)。这两个 CLLocations 也有 timestamp 属性,对吗?包含 NSDate 对象。嗯...

NSTimeInterval timediff = [aDate timeIntervalSinceDate:bDate];

timediff 是以秒为单位的差异。

因此,这些点之间的平均速度(以米每秒为单位)是 distance 除以 timediff。您现在可以像获取位置更新的频率一样准确地计算瞬时速度。

我想这就是获取您所收到的 CLLocation 对象的 speed 属性所发生的一切。但是,嘿,如果您想更接近数学,那就继续吧。

从那里,您可以转换为您喜欢的任何单位。一英里有 1609.344 米。一小时有 3600 秒。

现在:这与任何纯粹基于 GPS 的速度计算一样有缺陷,因为您不会获得位置更新的完美间隔的刻度线,有时它们会出错。如果您失去 GPS 信号并且设备退回到手机信号塔三角测量,则可能会使您偏离某个地方的道路,并且看起来就像您绑在火箭包上到那里快。

关于iphone - 使用 CLLocationManager 时查找速度时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264252/

相关文章:

ios - 我可以在后台使用 startupdatinglocation 吗?

ios - Clocationmanager Didupdatelocation 委托(delegate)在没有互联网的情况下不会被调用

iphone - 在 iPhone 中缓存来自远程服务器的图像

iphone - SQLite 的 NSArray 绘制 CGRects

iphone - NSLocale 和国家名称

iphone - 解除模态视图 Controller 的奇怪警告

iOS地理围栏;这会比我现在拥有的更准确吗?

iphone - UIModalTransitionStylePartialCurl 与 UITabBarController

ios - 基于最新 iOS 功能的位置通知

ios - CLLocationManager 默认坐标值