I have a CLLocation defined, and I\'d like to move that point x meters to the east and y meters to the south. How may I achieve that?
Strange that nobody thought of using MKCoordinateRegion from MapKit to calculate that automatically.
import MapKit
extension CLLocation {
func movedBy(latitudinalMeters: CLLocationDistance, longitudinalMeters: CLLocationDistance) -> CLLocation {
let region = MKCoordinateRegion(center: coordinate, latitudinalMeters: abs(latitudinalMeters), longitudinalMeters: abs(longitudinalMeters))
let latitudeDelta = region.span.latitudeDelta
let longitudeDelta = region.span.longitudeDelta
let latitudialSign = CLLocationDistance(latitudinalMeters.sign == .minus ? -1 : 1)
let longitudialSign = CLLocationDistance(longitudinalMeters.sign == .minus ? -1 : 1)
let newLatitude = coordinate.latitude + latitudialSign * latitudeDelta
let newLongitude = coordinate.longitude + longitudialSign * longitudeDelta
let newCoordinate = CLLocationCoordinate2D(latitude: newLatitude, longitude: newLongitude)
let newLocation = CLLocation(coordinate: newCoordinate, altitude: altitude, horizontalAccuracy: horizontalAccuracy, verticalAccuracy: verticalAccuracy, course: course, speed: speed, timestamp: Date())
return newLocation
}
}