如何在 Swift 中计算“纯”移动距离?

Posted

技术标签:

【中文标题】如何在 Swift 中计算“纯”移动距离?【英文标题】:How calculate "pure" moving distance in Swift? 【发布时间】:2016-05-09 10:49:50 【问题描述】:

我编写了计算总行驶距离的应用程序。但我想让这个值更不准确。

我的问题是当我不动时,位置管理器总是更新位置并增加我的总距离 ~ 每秒 1...2 米水平精度为 10.0。如果我留下/步行/留下,这个距离将每“站立”分钟增加 60...100 米。这对我不利。

我可以使用 Core Motion 框架停止更新位置,并使用 CMMotionManager 检测更改的 x、y、z 轴。当我走路时,这将起作用。但是当我开车时,设备不会改变 x、y、z 轴。

如何计算“纯”移动距离?

【问题讨论】:

朋友,你走错了方向。我也尝试过这个逻辑,但惨遭失败,尝试使用专门为此目的制作的苹果核心运动框架。检查我的答案 【参考方案1】:

为pedomter声明一个属性

@property (nonatomic, strong) CMPedometer *pedometer;

像这样初始化它 目前在 iphone 5s 及以上的包含运动传感器芯片的设备中支持这些功能

 if ([CMPedometer isStepCountingAvailable]) 

            self.pedometer = [[CMPedometer alloc] init];
        
        else 

            UIAlertView * alertView=[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Distance calculation is not available on this device!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alertView show];
        

最后在这个处理程序中获取数据

[self.pedometer startPedometerUpdatesFromDate:[NSDate date]
                                             withHandler:^(CMPedometerData *pedometerData, NSError *error) 
                                                dispatch_async(dispatch_get_main_queue(), ^

                                                   NSLog(@"data:%@, error:%@", pedometerData, error);
                                                   NSLog(@"distance:%@, pedometerData.distance);
                                                    NSLog(@"Steps:%@", pedometerData.numberOfSteps);

                                                );
                                             ];

别忘了导入 coremotion 框架

【讨论】:

谢谢回答。我希望 CMPedometer 类也支持驾驶汽车活动(不仅仅是步行和跑步活动) 对于使用此类 developer.apple.com/library/ios/documentation/CoreMotion/… 的准确性不适用,这是专门为运动类型制作的

以上是关于如何在 Swift 中计算“纯”移动距离?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新显示的 ETA 和距离值? Swift 4 MKDirections MapKit

如何计算从用户位置到注释的距离并将其显示在标签中

如何计算图片内部的特定距离?

翻译: Swift 中的委托保留周期 如何在“纯”Swift(没有@objc)中进行弱协议引用

如何在 swift 中使用 HealthKit 获得步行和跑步距离

如何在 Swift 中覆盖协议扩展的计算属性