I'm actually reposting a question from the iphone development boards. I didn't ask it, but I found it when trying to find its answer. Nobody had yet responded there, so I thought I'd try posting it here.
Thanks in advance for any help!
Does anybody know any specifics about the algorithm of computing the magnetic heading from the raw xyz values of CLHeading? I am sure there must be a general approach to this that works for different magnetometers as well.
If you don't want to use the trueHeading
value, and assuming that the compass lies perfectly horizontal, the heading can be computed this way:
- (y>0) heading = 90 - atan2(x,y)*180 / pi
- (y<0) heading = 270 - atan2(x,y)*180 / pi
- (y=0, x<0) heading = 180.0
- (y=0, x>0) heading = 0.0
(these are from http://www.magneticsensors.com/datasheets/an203.pdf)
... plus the heading must be corrected for Magnetic deviation and Magnetic declination
in case the compass is not horizontal, you should use only the horizontal component (you can not ignore the z axis) by projecting the (x, y, z) vector to a plane that is parallel to the earth surface and then compute the heading from this projected x and y.
Hope it helps.
来源:https://stackoverflow.com/questions/1055014/getting-magnetic-north-from-a-xyz-magnetometer-iphone-3-0