Swift - Extension to CLLocation to get cartesian representation for a coordinate. source: http://stackoverflow.com/a/5983282/273119
import Darwin
import Foundation
import CoreLocation
extension CLLocation {
/**
source: http://stackoverflow.com/a/5983282/273119
Find cartesian representation for latitude, longitude and altitude.
returns (x,y,z)
*/
var cartesianCoordinates: (Double, Double, Double) {
let rE = 6378137.0
let rP = 6356752.31424518
let latrad = coordinate.latitude/180.0 * M_PI
let lonrad = coordinate.longitude/180.0 * M_PI
let coslat = cos(latrad)
let sinlat = sin(latrad)
let coslon = cos(lonrad)
let sinlon = sin(lonrad)
let term1 = (pow(rE, 2) * coslat) / sqrt(pow(rE, 2) * pow(coslat,2) + pow(rP,2) * pow(sinlat, 2))
let term2 = altitude * coslat + term1
let x = coslon * term2
let y = sinlon * term2
let z = altitude * sinlat + (pow(rP, 2) * sinlat) / sqrt(pow(rE, 2) * pow(coslat, 2) + pow(rP, 2) * pow(sinlat, 2))
return (x,y,z)
}
}