iOS CoreMotion - 计算高度差

标签 ios core-motion

是否可以使用 CoreMotion 的数据计算 iPhone 移动时的高度差?

例如,保存 iPhone 的初始位置,然后移动 iPhone,从而产生新位置。我感兴趣的是检测 iPhone 的高度是否从其初始位置移动。我不需要绝对单位,只需要一个相对值,指示高度相对于原始高度的变化百分比。

let manager = CMMotionManager()

// Save initial attitude
var initialAttitude = manager.deviceMotion.attitude

if manager.deviceMotionAvailable {
manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {
    [weak self] (data: CMDeviceMotion!, error: NSError!) in

    // Get the difference between the initial and new attitude
    data.attitude.multiplyByInverseOfAttitude(initialAttitude)

    // Is there a way to calculate the relative change in height?

    }
}

最佳答案

在较新的 iPhone 上,确实可以从随附的气压计(iPhone 6 提供)获取相对高度。 Core Motion 已进行扩展以适应这一点。

CMAltimeter - 提供高度变化事件的传递。

CMAltitudeData - 封装高度变化事件(米级分辨率)。

这种事情应该有用......

 if CMAltimeter.isRelativeAltitudeAvailable() {
     altimeter.startRelativeAltitudeUpdatesToQueue(altimeterQueue,
     withHandler:
         { (  data:CMAltitudeData?,
             error: NSError?) in
             if let altitudeData = data {
                 self.timeStamp = altitudeData.timestamp
                 self.relativeAltitude = altitudeData.relativeAltitude
             }
         }
     )
 }

我们没有得到绝对高度,只有相对高度变化。初始高度被认为是 0。因此您无法真正获得百分比变化(没有任何意义),但您可以获得米级精度的绝对变化。

关于iOS CoreMotion - 计算高度差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36038491/

相关文章:

ios - CMDeviceMotion 标题为 -1.0

xcode - CoreMotion 显然是从后台线程调用 UI API

mysql - objective-c:创建服务器方法

ios - 将带重音的单词存储到 Sqlite - iOS

ios - Xcode 解析带下划线的 JSON

javascript - Ionic 3 - 内联视频在 iOS 10 上的 native 播放器中全屏打开

ios - 不寻常的 CoreMotion Sensorfusion 数据

ios - Apple Swift - 无法从 CMPedometer 的处理程序中检索数据

ios - iPhone 在后台收集 CoreMotion 数据。 (超过10分钟)

iOS 为什么当我访问特定页面时我的 cookie 变为 null