视线CoreLocation或CoreMotion

时间:2015-10-22 12:23:45

标签: swift core-location core-motion

获得视线(iPhone方向)的最佳方法是什么?

我已经使用CoreLocation实现了一个:

   func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    self.currentDegreesLOS = newHeading.magneticHeading

    if (newHeading.headingAccuracy > 0) { 
        if self.currentDegreesLOS < 135.0 && self.currentDegreesLOS > 45.0 {

                self.currentDegreesLOS = 90.0
            }
                //South direction
            else if self.currentDegreesLOS < 45.0 ||  self.currentDegreesLOS > 315.0 {

                self.currentDegreesLOS = 360.0
            }
                //West direction
            else if self.currentDegreesLOS > 225.0 && self.currentDegreesLOS < 315.0 {

                self.currentDegreesLOS = 270.0
            }
                //North direction
            else if self.currentDegreesLOS > 135.0 &&  self.currentDegreesLOS < 225.0{

                self.currentDegreesLOS = 180.0
            }
    }
  }

但是,通过将设备保持在北方方向,我首先尝试360°。如果我在第二次运行时对此进行测试,我将在同一方向上获得180°或270°。

我尝试的另一个解决方案是使用CoreMotion,但我遇到了同样的问题:

        motionManager.startDeviceMotionUpdatesToQueue(queue, withHandler: { (data, error) -> Void in

    self.quat = data?.attitude.quaternion

        //Possibility 1
        var attitude:CMAttitude = (data?.attitude)!
        var rm:CMRotationMatrix = attitude.rotationMatrix

        // Get the heading.
        var heading = M_PI + atan2(rm.m22, rm.m12)

        heading = heading*180/M_PI
        if( heading < 0 ){
            heading += 360.0;// convert negative to positive angles

        }
        })

有人知道如何使用上述方法之一获得最佳效果吗?

0 个答案:

没有答案