An Objective-C library with tools and extensions for iOS CoreLocation.
Update: added support for iOS5 SDK and ARC compatibility
- Dispatching CoreLocation updates to multiple listeners.
- Archive/Unarchive location data (play log file)
- Calculate Direction and distance between locations and routes.
- Dead Reckoning
This is a central dispatch for distributing location updates to the app. Dispatched locations include:
- CoreLocation updates (location and heading)
- Location data read from an archive (playing a log file)
- Location data received from dead-reckoning service.
Locations are dispatched to any listener which registers itself with addListener. In order to receive the update, the listener must respond to CLLocationManagerDelegate protocol methods.
Serializing location data
In addition, CLLocationDispatch provides an API for archiving and unarchiving CLLocation data to a file. This way you can record GPS traces and play them over (e.g. for debugging, or as a "route demo").
To start reading locations from an archive call startDemoWithLogFile:startLocationIndex:
method.
You can extend CLLocationDispatch to read location data from other file formats, (e.g. KML, NMEA) by providing a class which adheres to HGRouteProvider
protocol.
Support for Dead-Reckoning
I've recently extended CLLocationDispatch to dispatch "soft-locations", i.e. locations generated by a dead-reckoning engine. For more info see CLLocationDeadReckoning
below.
An extension of CLLocation
which provides distance and direction calculations between locations and stretches (lines), defining a bounding box from a center coordinate and radius, and validating coordinate values.
An extension of CLLocation
which provides an API to map-match a location on a given route. A route being NSArray
of CLLocation
objects.
- (CLLocationDistance) distanceFromRoute : (NSArray*) locations
nearestNodeFound : (CLLocation**)nearestRouteNode
nearestLocationOnRoute : (CLLocation**) nearestLocation
nodeIndexAfterIntersection : (NSInteger*)nodeIndexAfter;
Dead Reckoning generates location updates at fixed time intervals, defined by kDeadReckiningInterval
. Since DR estimates a location based on previous locations, it may result in cumulative errors. CLLocationDeadReckoning therefore constrains DR to a given route, i.e. an NSArray containing CLLocation objects.
-
To start CLLocationDeadReckoning, call
startWithRoute:
. You must provide a route for the DR to stick to. -
After
CLLocationDeadReckoning
starts, it listens to CoreLocation updates and generates new DR locations after no location updates are received from CoreLocation for a predefined time interval, defined bykDeadReckoningInterval
. -
You register for DR location updates by calling the
addListener
method ofCLLocationDispatch
. You must also respond to theCLLocationDeadReckoningHandler
protocol messages, which will be sent to your listener by CLLocationDispatch.
- Clone this repo
- Add CoreLocationUtils folder to your project.
- Link with CoreLocation framework.
CoreLocationUtils library is released under MIT License.
Please contribute your improvements and suggestions, and raise issues if you spot them.
Thanks!