Location Updates

MGLLocationManager

@protocol MGLLocationManager <NSObject>

The MGLLocationManager protocol defines a set of methods that a class must implement in order to serve as the location manager of an MGLMapView. A location manager is responsible for notifying the map view about location-related events, such as a change in the user’s location. This protocol is similar to the Core Location framework’s CLLocationManager class, but your implementation does not need to be based on CLLocationManager.

To receive location updates from an object that conforms to the MGLLocationManager protocol, use the optional methods available in the MGLLocationManagerDelegate protocol.

Configuring Location Update Precision

  • -distanceFilter

    Specifies the minimum distance (measured in meters) a device must move horizontally before a location update is generated.

    The default value of this property is kCLDistanceFilterNone when MGLMapView uses its default location manager.

    See

    CLLocationManager.distanceFilter

    Declaration

    Objective-C

    - (CLLocationDistance)distanceFilter;

    Swift

    optional func distanceFilter() -> CLLocationDistance
  • -setDistanceFilter:

    Sets the minimum update distance in meters.

    Declaration

    Objective-C

    - (void)setDistanceFilter:(CLLocationDistance)distanceFilter;

    Swift

    optional func setDistanceFilter(_ distanceFilter: CLLocationDistance)

    Parameters

    distanceFilter

    The distance filter in meters.

  • -desiredAccuracy

    Specifies the accuracy of the location data.

    The default value is kCLLocationAccuracyBest when MGLMapView uses its default location manager.

    Note

    Determining a location with greater accuracy requires more time and more power.

    See

    CLLocationManager.desiredAccuracy

    Declaration

    Objective-C

    - (CLLocationAccuracy)desiredAccuracy;

    Swift

    optional func desiredAccuracy() -> CLLocationAccuracy
  • -setDesiredAccuracy:

    Sets the desired location accuracy.

    Declaration

    Objective-C

    - (void)setDesiredAccuracy:(CLLocationAccuracy)desiredAccuracy;

    Swift

    optional func setDesiredAccuracy(_ desiredAccuracy: CLLocationAccuracy)

    Parameters

    desiredAccuracy

    The desired location accuracy.

  • -accuracyAuthorization

    Specifies the level of location accuracy the Maps SDK has permission to use.

    Note

    If the value of this property is CLAccuracyAuthorizationFullAccuracy, you can set the MGLLocationManager.desiredAccuracy property to any value. If the value is CLAccuracyAuthorizationReducedAccuracy, setting MGLLocationManager.desiredAccuracy to a value other thankCLLocationAccuracyReduced has no effect on the location information.

    Declaration

    Objective-C

    - (CLAccuracyAuthorization)accuracyAuthorization;

    Swift

    optional func accuracyAuthorization() -> CLAccuracyAuthorization
  • -activityType

    Specifies the type of user activity associated with the location updates.

    The location manager uses this property as a cue to determine when location updates may be automatically paused.

    The default value is CLActivityTypeOther when MGLMapView uses its default location manager.

    See

    CLLocationManager.activityType

    Declaration

    Objective-C

    - (CLActivityType)activityType;

    Swift

    optional func activityType() -> CLActivityType
  • -setActivityType:

    Sets the type of user activity associated with the location updates.

    Declaration

    Objective-C

    - (void)setActivityType:(CLActivityType)activityType;

    Swift

    optional func setActivityType(_ activityType: CLActivityType)

    Parameters

    activityType

    The location’s manager activity type.

  • -requestTemporaryFullAccuracyAuthorizationWithPurposeKey:

    Requests the user’s permission to temporarily use location update services with full accuracy.

    Note

    If the user turned off location accuracy you may use this method to request full accuracy for a session.

    Declaration

    Objective-C

    - (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:
                    (nonnull NSString *)purposeKey;

    Swift

    optional func requestTemporaryFullAccuracyAuthorization(withPurposeKey purposeKey: String)
  • delegate

    The delegate to receive location updates.

    Do not set the location manager’s delegate yourself. MGLMapView sets this property after the location manager becomes MGLMapView’s location manager.

    Declaration

    Objective-C

    @required
                @property (nonatomic, weak, readwrite)
                    id<MGLLocationManagerDelegate> _Nullable delegate;

    Swift

    weak var delegate: MGLLocationManagerDelegate? { get set }

Requesting Authorization for Location Services

  • authorizationStatus

    Returns the current localization authorization status.

    See

    +[CLLocationManger authorizationStatus]

    Declaration

    Objective-C

    @required
                @property (nonatomic, readonly) CLAuthorizationStatus authorizationStatus;

    Swift

    var authorizationStatus: CLAuthorizationStatus { get }
  • -requestAlwaysAuthorization

    Requests permission to use the location services whenever the app is running.

    Declaration

    Objective-C

    - (void)requestAlwaysAuthorization;

    Swift

    func requestAlwaysAuthorization()
  • -requestWhenInUseAuthorization

    Requests permission to use the location services while the app is in the foreground.

    Declaration

    Objective-C

    - (void)requestWhenInUseAuthorization;

    Swift

    func requestWhenInUseAuthorization()

Initiating Location Updates

  • -startUpdatingLocation

    Starts the generation of location updates that reports the user’s current location.

    Declaration

    Objective-C

    - (void)startUpdatingLocation;

    Swift

    func startUpdatingLocation()
  • -stopUpdatingLocation

    Stops the generation of location updates.

    Declaration

    Objective-C

    - (void)stopUpdatingLocation;

    Swift

    func stopUpdatingLocation()

Initiating Heading Updates

  • headingOrientation

    Specifies a physical device orientation.

    Declaration

    Objective-C

    @required
                @property (nonatomic, assign, unsafe_unretained, readwrite)
                    CLDeviceOrientation headingOrientation;

    Swift

    var headingOrientation: CLDeviceOrientation { get set }
  • -startUpdatingHeading

    Starts the generation of heading updates that reports the user’s current hading.

    Declaration

    Objective-C

    - (void)startUpdatingHeading;

    Swift

    func startUpdatingHeading()
  • -stopUpdatingHeading

    Stops the generation of heading updates.

    Declaration

    Objective-C

    - (void)stopUpdatingHeading;

    Swift

    func stopUpdatingHeading()
  • -dismissHeadingCalibrationDisplay

    Dissmisses immediately the heading calibration view from screen.

    Declaration

    Objective-C

    - (void)dismissHeadingCalibrationDisplay;

    Swift

    func dismissHeadingCalibrationDisplay()

MGLLocationManagerDelegate

@protocol MGLLocationManagerDelegate <NSObject>

The MGLLocationManagerDelegate protocol defines a set of methods that respond to location updates from an MGLLocationManager object that is serving as the location manager of an MGLMapView.

Responding to Location Updates

  • -locationManager:didUpdateLocations:

    Notifies the delegate with the new location data.

    Declaration

    Objective-C

    - (void)locationManager:(nonnull id<MGLLocationManager>)manager
                     didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations;

    Swift

    func locationManager(_ manager: MGLLocationManager, didUpdate locations: [CLLocation])

    Parameters

    manager

    The location manager reporting the update.

    locations

    An array of CLLocation objects in chronological order, with the last object representing the most recent location. This array contains multiple CLLocation objects when MGLMapView uses its default location manager.

Responding to Heading Updates

  • -locationManager:didUpdateHeading:

    Notifies the delegate with the new heading data.

    Declaration

    Objective-C

    - (void)locationManager:(nonnull id<MGLLocationManager>)manager
                       didUpdateHeading:(nonnull CLHeading *)newHeading;

    Swift

    func locationManager(_ manager: MGLLocationManager, didUpdate newHeading: CLHeading)

    Parameters

    manager

    The location manager reporting the update.

    newHeading

    The new heading update.

  • -locationManagerShouldDisplayHeadingCalibration:

    Asks the delegate if the calibration alert should be displayed.

    Declaration

    Objective-C

    - (BOOL)locationManagerShouldDisplayHeadingCalibration:
                    (nonnull id<MGLLocationManager>)manager;

    Swift

    func locationManagerShouldDisplayHeadingCalibration(_ manager: MGLLocationManager) -> Bool

    Parameters

    manager

    The location manager reporting the calibration.

Responding to Location Updates Errors

  • -locationManager:didFailWithError:

    Notifies the delegate that the location manager was unable to retrieve location updates.

    Declaration

    Objective-C

    - (void)locationManager:(nonnull id<MGLLocationManager>)manager
                       didFailWithError:(nonnull NSError *)error;

    Swift

    func locationManager(_ manager: MGLLocationManager, didFailWithError error: Error)

    Parameters

    manager

    The location manager reporting the error.

    error

    An error object containing the error code that indicates why the location manager failed.

  • -locationManagerDidChangeAuthorization:

    Notifies the delegate that the location authorization status has changed.

    Declaration

    Objective-C

    - (void)locationManagerDidChangeAuthorization:
                    (nonnull id<MGLLocationManager>)manager;

    Swift

    func locationManagerDidChangeAuthorization(_ manager: MGLLocationManager)

    Parameters

    manager

    The location manager reporting the change.