CLLocation速度

时间:2009-09-08 01:52:03

标签: iphone objective-c ios performance cllocation

我正在开发GPS应用程序。 你知道如何检测移动设备的速度吗?

实际上,我需要每2秒检测一次速度。

我知道当位置发生变化时会调用 didUpdateToLocation 方法。

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

但我认为这种方法不适合我的问题。

那么,我需要在2秒内检查[CLLocationManager location]的速度吗?

有什么建议吗?

提前致谢。

2 个答案:

答案 0 :(得分:27)

下面的代码如何使用委托方法。 或者,如果您确实想要轮询,请保留以前的位置并检查距离上次轮询更改的距离,并使用手动方法(也如下所示)计算速度。

速度以m / s计算/提供,因此对于公里数乘以3.6或对于英里/小时乘以2.23693629。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
   //simply get the speed provided by the phone from newLocation
    double gpsSpeed = newLocation.speed;

    // alternative manual method
    if(oldLocation != nil)
    {
        CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation];
        NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];
        double calculatedSpeed = distanceChange / sinceLastUpdate;

    }   
}

答案 1 :(得分:0)

您只能真正使用您在问题中建议的委托方法。

即使您每2秒访问[CLLocationManager位置],您也只会收到上次委托方法中最后收到的坐标。

为什么需要每两秒轮询一次?在某些情况下,iphone可以在更短的时间内更新它的坐标。

HTH