Heading and Course
For appropriately equipped devices, Core Location also supports use of the magnetometer to determine which way the device is facing (its heading) and the GPS to determine which way it is moving (its course).
In this example, I’ll take advantage of the magnetometer and use the device as a compass. The headingFilter setting is to prevent us from being bombarded constantly with readings. For best results, the device should be held level (like a tabletop, or a compass); I have not changed the headingOrientation property, so the reported heading will then be the direction that the top of the device (the end away from the Home button) is pointing:
CLLocationManager* lm = [[CLLocationManager alloc] init]; self.locman = lm; [lm release]; self.locman.delegate = self; self.locman.headingFilter = 3; [self.locman startUpdatingHeading];
Readings arrive as messages to the delegate. I’ll simply log our magnetic heading along with a rough corresponding cardinal direction. I choose to use the magnetic heading (magneticHeading) rather than the true heading (trueHeading) because, as the documentation explains, the latter can be calculated correctly only if we are getting location updates as well as heading updates:
- (void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { CGFloat h = newHeading.magneticHeading; NSString* dir = @"N"; NSArray* cards = [NSArray arrayWithObjects: @"N", @"NE", @"E", @"SE", @"S", @"SW", @"W", @"NW", nil]; for (int i ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access