如何获取相机视线角度(相对于北,以度为单位,零为北,180为南)图片是使用iPhone拍摄的(而不是设备移动的位置)?例如,我朝北(0度)方向行走,在我的右侧(90度)拍摄一张照片,我想要90度作为我的结果,因为那是iPhone系列产品,视角相对于北方。当拍摄照片时计算iPhone相机视线角度(相对于北)
在+/- 20度范围内有点准确的结果很好。
如何获取相机视线角度(相对于北,以度为单位,零为北,180为南)图片是使用iPhone拍摄的(而不是设备移动的位置)?例如,我朝北(0度)方向行走,在我的右侧(90度)拍摄一张照片,我想要90度作为我的结果,因为那是iPhone系列产品,视角相对于北方。当拍摄照片时计算iPhone相机视线角度(相对于北)
在+/- 20度范围内有点准确的结果很好。
您可以在ios中使用陀螺仪API。
见本的tuto例如:http://ios-programming.blogspot.fr/2011/11/gyroscope-accelerometer-ios-sdk.html
使用CMMotionManager类,用于接收运动数据。不要忘记包含CoreMotion框架。
#import <CoreMotion/CoreMotion.h>
- (void)startProcess
{
CMMotionManager *motionManager = [CMMotionManager new];
motionManager.deviceMotionUpdateInterval = .2;
if (motionManager.deviceMotionAvailable) {
NSOperationQueue *motionQueue = [[NSOperationQueue alloc] init];
CMAttitudeReferenceFrame attitudeFrame = CMAttitudeReferenceFrameXTrueNorthZVertical;
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:attitudeFrame
toQueue:motionQueue
withHandler:^ (CMDeviceMotion *newMotionData, NSError *newError) {
CMAcceleration gravity = motionData.gravity;
CGFloat rotation = [self rotationForGravity:gravity];
});
}];
}
- (CGFloat)rotationForGravity:(CMAcceleration)customGravity
{
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if(orientation == UIInterfaceOrientationLandscapeLeft)
return customGravity.y;
else
return -customGravity.y;
}
感谢@Pablo的详细答案。我错误地描述了这个问题。我希望iPhone相机的视线相对于真正的北(不是设备移动的地方)。例如,我正朝北0度方向走,向右拍摄90度的照片,我想要90度作为我的结果,因为那是iPhone相对于北方的视线角度。 – user2992766 2015-04-02 14:21:40
哦,那么你可能可以使用motionData.magneticField而不是重力和旋转,还没有测试过它,但它应该给你来自北部的弧度。希望这可以帮助。 – 2015-04-02 14:30:34