CoreLocationUtils
iOS CoreLocation extensions, simulator and tools
Install / Use
/learn @100grams/CoreLocationUtilsREADME
Core Location Utilities#
An Objective-C library with tools and extensions for iOS CoreLocation.
Update: added support for iOS5 SDK and ARC compatibility
Features
- Dispatching CoreLocation updates to multiple listeners.
- Archive/Unarchive location data (play log file)
- Calculate Direction and distance between locations and routes.
- Dead Reckoning
Classes
CLLocationDispatch
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<br/> 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 <code>startDemoWithLogFile:startLocationIndex:</code> method.
You can extend CLLocationDispatch to read location data from other file formats, (e.g. KML, NMEA) by providing a class which adheres to <code>HGRouteProvider</code> protocol.
Support for Dead-Reckoning<br/> I've recently extended CLLocationDispatch to dispatch "soft-locations", i.e. locations generated by a dead-reckoning engine. For more info see <code>CLLocationDeadReckoning</code> below.
CLLocation(measuring)
An extension of <code>CLLocation</code> 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.
CLLocation(routeInfo)
An extension of <code>CLLocation</code> which provides an API to map-match a location on a given route. A route being <code>NSArray</code> of <code>CLLocation</code> objects.
<pre><code> - (CLLocationDistance) distanceFromRoute : (NSArray*) locations nearestNodeFound : (CLLocation**)nearestRouteNode nearestLocationOnRoute : (CLLocation**) nearestLocation nodeIndexAfterIntersection : (NSInteger*)nodeIndexAfter; </code></pre>CLLocationDeadReckoning
Dead Reckoning generates location updates at fixed time intervals, defined by <code>kDeadReckiningInterval</code>. 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 <code>startWithRoute:</code>. You must provide a route for the DR to stick to.
-
After <code>CLLocationDeadReckoning</code> 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 by <code>kDeadReckoningInterval</code>.
-
You register for DR location updates by calling the <code>addListener</code> method of <code>CLLocationDispatch</code>. You must also respond to the <code>CLLocationDeadReckoningHandler</code> protocol messages, which will be sent to your listener by CLLocationDispatch.
How to use
- Clone this repo
- Add CoreLocationUtils folder to your project.
- Link with CoreLocation framework.
License
CoreLocationUtils library is released under MIT License.
Please contribute your improvements and suggestions, and raise issues if you spot them.
Thanks!

