Iphone 使用CLLocationManager时查找速度时出现的问题

Iphone 使用CLLocationManager时查找速度时出现的问题,iphone,cllocationmanager,Iphone,Cllocationmanager,我正在iPhone上开发一个速度表应用程序。我使用CLLocationManager(基于GPS)测量车辆的速度。但是我没有得到准确的速度。我尝试了各种stackoverflow讨论中给出的所有过滤方法。但我没有得到任何改善。有时,速度会达到更大的值(>400公里/小时) 我不知道出了什么问题。请告诉我任何代码,以获得准确的速度 提前感谢, 我遵循了下面提到的堆栈溢出讨论 我目前已经实现了以下代码: //locationManager declaration in ViewDidLoad

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

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

提前感谢,

我遵循了下面提到的堆栈溢出讨论

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

//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.

        }       
    }

}
//ViewDidLoad中的locationManager声明
LocalManager=[[CLLocationManager alloc]init];
locManager.delegate=self;
[LocalManager startUpdatingLocation];
-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation{
NSTimeInterval locationAge=abs([newLocation.timestamp timeintervalncesInnow]);
如果(位置>5.0)返回;
if(newLocation.speed<0 | | newLocation.horizontalAccurance<0)返回;

如果((newLocation.HorizontalAccurance<(oldLocation.HorizontalAccurance-10.0))| |(newLocation.HorizontalAccurance<50.0)| |(newLocation.HorizontalAccurance即使您不喜欢内置的velocity功能,也可以自己滚动

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

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

CLLocationDistance distance = [aLocation distanceFromLocation:bLocation];
distance
现在是这两个点之间距离的浮点值,单位为米。这两个
cllocation
也有
timestamp
属性,对吗?包含NSDate对象。嗯

NSTimeInterval timediff = [aDate timeIntervalSinceDate:bDate];
timediff
是以秒为单位的差值

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

我想这就是你得到的CLLocation对象的
speed
属性所发生的一切。但是,嘿,你想更接近数学,就这样吧

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


现在:这和任何纯粹基于GPS的速度计算一样有缺陷,因为你不会得到位置更新的完美间隔刻度线,有时它们会出错。如果你失去GPS信号,设备会退回到细胞塔三角测量,它可能会让你在某个地方偏离道路,而且看起来就像你在移动一样被困在火箭包中,以如此快的速度到达那里。

请提供参考StackOverflow讨论的链接,这样就不会有人浪费你的时间来解决你已经放弃的不可接受的问题。另外,请发布你现在正在使用的代码。嗨,杰里米,现在我已经添加了我使用的代码。请查看它。嗨,丹,正如你提到的我我已经试过用我自己的代码来计算速度。我的问题是我得到的速度是近似的,但是即使车辆静止,速度也会有很大的偏差。有没有什么过滤技术可以用来避免车辆静止时的偏差。嗯,是的,我的意思是你可以检查你的位置ns正在进入。你可以放弃突然比你看到的精度低的位置。你可以放弃导致不可能的速度或不可能的delta-v的位置(我的意思是,你可能不太可能突然从40英里到400英里,是吗?)。