GreatCircle is an iOS framework that provides a set of extensions to the CLLocation
class.
The CLLocation class provides only one method:
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
For calculating the distance between two GPS locations. Because of this, iOS developers must "roll their own" to solve more complex GPS location calculation problems.
GreatCircle - which is based on the amazing work of Chris Veness, the owner
of the Geodesy functions project - provides a comprehensive set of extension methods to the CLLocation
class that
make working with GPS locations and performing calculations on then simple and easy.
(For a more general introduction, see: Movable Type Scripts Latitude / Longitude Calculations Reference)
Thus far, I have worked on porting the spherical-earth model, which provides simple formulae covering the accuracy requirements of most use cases.
GreatCircle should be used via Carthage dependency manager. (Why no Cocoapod? I've switched my work to Carthage. Here's why.)
github "softwarenerd/GreatCircle" "master"
(Until GreatCircle is released, there are no tagged versions, so please use the master
branch.)
carthage update
Add a run script that uses the carthage copy-frameworks
command to copy the GreatCircle.framework
Extension Methods
-crossTrackDistanceToStartLocation:endLocation:
Returns the cross track distance (in meters) of this location relative to the specified start location and end location.
-crossTrackLocationToStartLocation:endLocation:
Returns a location representing the cross track point of this location relative to the specified start location and end location.
-distanceToOtherLocation:
Returns the distance (in meters) between this location and the other location.
-finalBearingToOtherLocation:
Returns the final bearing (in degrees) between this location and the other location. The final bearing is the initial bearing from
the other location to this location reversed 180°. The final bearing will differ from the initial bearing by varying degrees according
to distance and latitude.
-initialBearingToOtherLocation:
Returns the initial bearing (in degrees) between this location and the other location.
+intersectionOfLocation:andBearing:withLocation:andBearing:
Returns a location representing the point of intersection of two paths, each specified by a location and bearing. Returns nil if
the two paths do not cross.
-isEqualToOtherLocation:
Compares this location to the other location for equality.
-locationWithBearing:distance:
Returns a location representing the point that lies at the specified bearing and distance from this location.
-midpointToOtherLocation:
Returns a location representing the midpoint between this location and the other location.
GreatCircle is a work in progress and your contributions are most welcome. Feel free to fork the repo and submit PR's.
GreatCircle is released under the MIT License.