>
> I am trying to derive a DR fix from an initialized CLLocation.
>
> Like this. (Playground)
>
> let fixTime = NSDate(timeInterval: (1.00 * 60.00 * 60.00 * -1.00),
> sinceDate: NSDate()) // one hour ago
> let fixLocation = CLLocation(coordinate:
> CLLocationCoordinate2DMake(boatLocation.coordinate.latitude,
> boatLocation.coordinate.longitude), altitude: 0.00, horizontalAccuracy: 0.00,
> verticalAccuracy: 0.00,course: heading, speed: knots * 0.51444445,
> timestamp: fixTime) // location one hour ago
>
>
> I am sure there must be something like…..
>
>
For those ever needing this, here is what I came up with. (Heavy credit to SO
for drLat, drLong and conversation formulae)
let knotsToMeters = 1852.00
let earthRadius = 6372797.6
func degrees2radians(coordinate:CLLocationDegrees) -> Double {
return (M_PI * coordinate ) / 180.00
}
func radians2degrees(coordinate:CLLocationDegrees) -> Double {
return (180.00 * coordinate ) / M_PI
}
func deadReckonedLocationFrom(fix: CLLocationCoordinate2D,
bearing:CLLocationDirection, knots:CLLocationSpeed,
timeSinceReport:NSTimeInterval) -> CLLocationCoordinate2D {
let rBearing = degrees2radians(bearing)
let rFixLat = degrees2radians(fix.latitude)
let rFixLong = degrees2radians(fix.longitude)
let rDistance = (knots * timeSinceReport * knotsToMeters) / earthRadius
let drLat = asin(sin(rFixLat) * cos(rDistance) + cos(rFixLat) *
sin(rDistance) * cos(rBearing))
let drLong = rFixLong + atan2(sin(rBearing) * sin(rDistance) *
cos(rFixLat), cos(rDistance) - sin(rFixLat) * sin(drLat))
return CLLocationCoordinate2D(latitude: radians2degrees(drLat), longitude:
radians2degrees(drLong))
}
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]