【问题标题】:CLLocation speedCL定位速度
【发布时间】:2023-03-10 20:24:02
【问题描述】:

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

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

我知道 didUpdateToLocation 方法是在位置更改时调用的。

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

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

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

有什么建议吗?

提前致谢。

【问题讨论】:

    标签: iphone objective-c ios performance cllocation


    【解决方案1】:

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

    速度以 m/s 为单位计算/提供,因此 kmph 乘以 3.6 或 mph 乘以 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;
    
        }   
    }
    

    【讨论】:

    • 出于兴趣(就准确性而言)这两个选项中哪个更好?
    • getDistanceFrom 已折旧。替换 CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation]; with CLLocationDistance distanceChange = [newLocation distanceFromLocation:oldLocation];
    【解决方案2】:

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

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

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

    HTH

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 2022-11-16
      • 2010-11-08
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多