使用CLLocationManager时查找速度的问题

时间:2011-06-07 11:04:39

标签: 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.

        }       
    }

}

1 个答案:

答案 0 :(得分:4)

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

速度是一段时间的距离,对吧?

如果你有两个CLLocation,你可以这样做:

CLLocationDistance distance = [aLocation distanceFromLocation:bLocation];

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

NSTimeInterval timediff = [aDate timeIntervalSinceDate:bDate];

timediff是以秒为单位的差异。

因此,这些以米为单位的点之间的平均速度为distance超过timediff。您现在可以准确计算瞬时速度,就像您获得位置更新的频率一样。

我想这就是获得你正在接受的CLLocation对象的speed属性所发生的一切。但是,嘿,你想要更接近数学,直接前进。

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

现在:这和任何纯粹的基于GPS的速度计算一样有缺陷,因为你不会得到位置更新的完美间隔标记,有时它们会出错。如果你丢失GPS信号并且设备回到了蜂窝塔三角测量,那么它可能会让你在某个地方离开路面,看起来你就像绑在火箭包上那样在那里快。