Geofencing (v2.1.x - iOS)
The core component of Navmii SDK responsible for geofencing is NMGeofenceManager. This class provides an API for managing user geofences and transition event notifications.
CREATING GEOFENCE MANAGER
NMSdk class contains a property geofenceManager
which allows Navmii SDK user to access geofence manager instance. The geofence manager instance can only be accessed if the SDK is started.
GEOFENCE TYPES
The geofence manager supports two types of geofence geometry:
NMGeofenceCircular
NMGeofencePolygonal
GEOFENCE EVENTS
The geofence manager provides a NMGeofenceListener
interface to handle transition events:
- (void)onGeofenceEnter:(nonnull NSString *)geofenceId geofenceTag:(nullable NSString *)geofenceTag;
- (void)onGeofenceExit:(nonnull NSString *)geofenceId geofenceTag:(nullable NSString *)geofenceTag;
You can add listeners using addGeofenceListener
method:
[sdk.geofenceManager addGeofenceListener:geofenceListener];
Don't forget to detach listeners using removeGeofenceListener
method:
[sdk.geofenceManager removeGeofenceListener:geofenceListener];
EDITING GEOFENCES
For a circular geofence it’s possible to change its center and radius using center
and radius
properites respectively.
To modify a polygonal geofence use coordinates
property.
To update a geofence when its corresponding editable NMGeoObject
is modified (for example, when a user drags a NMGeoCircle
to a different location), use NMGeoObjectListener onGeoObjectChanged:
method:
- (void)onGeoObjectChanged:(NSUInteger)geoObjectID {
NMGeoObject *geoObject = [self geoObjectForId:geoObjectID fromArray:geoObjects];
NMGeofence *geofence = [self geoGeofenceForGeoObject:geoObject fromArray:geofences];
if ([geoObject isKindOfClass:[NMGeoCircle class]] && [geofence isKindOfClass:[NMGeofenceCircular class]]) {
NMGeoCircle *circle = (NMGeoCircle *)geoObject;
NMGeofenceCircular *geofenceCircular = (NMGeofenceCircular *)geofence;
geofenceCircular.radius = circle.radius;
geofenceCircular.center = circle.center;
} else if ([geoObject isKindOfClass:[NMGeoPolygon class]] && [geofence isKindOfClass:[NMGeofencePolygonal class]]) {
NMGeoPolygon *polygon = (NMGeoPolygon *)geoObject;
NMGeofencePolygonal *geofencePolygonal = (NMGeofencePolygonal *)geofence;
geofencePolygonal.coordinates = [polygon.vertices copy];
}
}