Question

To be clear my problem is not reading the heading values in landscape right or left. It works fine I'm using a location manager and subtract 90° to read the heading value in landscape right and 270° in landscape left, by default the device is always considered in Portrait mode, that is why we have to make this adjustments.

I recently developed a location-based augmented reality app and what I'm experiencing is, there is always an offset with the heading values between landscape right and left. I tested "on field", the offset is approximately 12°.

I want this app to be as accurate as possible, I mean since we rely on sensor data here and this is the first release, less than 10° is acceptable (even 15° in the worst cases). But if we add to the existing error an offset of 12° it is quite annoying.

Does anyone have an explanation for this? I would like to have one even if I cannot fix it right now. So now I'm trying to "fix" this by adding 12° to landscape left, or maybe I should rather subtract 12° to landscape right, well I don't know!

Any experiences on this issue?

Was it helpful?

Solution

My experience is that the compass is not very good, especially in landscape view. I would NOT subtract 12° in one view since the difference might something else on another device. I suggest that you test on one or two other iPhones before proceeding.

Also, are you setting the view of the LocationManager?

CLLocationManager *compassManager;
compassManager.headingOrientation =CLDeviceOrientationLandscapeLeft;

OTHER TIPS

I also just ran into this issue and there is a difference between LandscapeLeft, landscapeRight and Portrait. Thanks to Sten's reply and the Swift code below fixed the issue.

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    var text=""
    switch UIDevice.currentDevice().orientation{
    case .Portrait:
        text="Portrait"
        locationManager.headingOrientation = CLDeviceOrientation.Portrait
    case .PortraitUpsideDown:
        text="PortraitUpsideDown"
        locationManager.headingOrientation = CLDeviceOrientation.Portrait
    case .LandscapeLeft:
        text="LandscapeLeft"
        locationManager.headingOrientation = CLDeviceOrientation.LandscapeLeft
    case .LandscapeRight:
        text="LandscapeRight"
        locationManager.headingOrientation = CLDeviceOrientation.LandscapeRight
    default:
        text="Another"
    }
    NSLog("You have moved: \(text)")
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top