         self.y = mapPoint.y
     }
 
-    func metersBetween(point:MKMapPoint) -> CLLocationDistance {
+    func distanceTo(point:MKMapPoint) -> CLLocationDistance {
         return MKMetersBetweenMapPoints(self, point)
+    }
+
+    func bearingTo(otherPoint: MKMapPoint) -> CLLocationDirection {
+        let x = otherPoint.x - self.x
+        let y = otherPoint.y - self.y
+
+        var result = radiansToDegrees(atan2(y, x)) % 360.0 + 90.0
+        if result < 0.0 {
+            result = 360.0 + result
+        }
+
+        return result
     }
 
     var coordinate:CLLocationCoordinate2D {

    return radians * 180.0 / M_PI;
}

extension CLLocationDirection {
    func isValid() -> Bool {
        return self >= 0.0
    }
}


        return fmod(radiansToDegrees(atan2(y, x)), 360.0) + 90.0;
    }

    func greatCircleDistanceTo(location:CLLocationCoordinate2D) -> CLLocationDistance {
        guard self.isValid() && location.isValid() else {
            return CLLocationDistance.NaN
        }

        let sourceLocation:CLLocation = CLLocation(latitude: self.latitude, longitude: self.longitude)
        let destinationLocation:CLLocation = CLLocation(latitude: location.latitude, longitude: location.longitude)
        return sourceLocation.distanceFromLocation(destinationLocation)
    }

    func tween(location:CLLocationCoordinate2D, percent:Double) -> CLLocationCoordinate2D {
        var progressCoordinate:CLLocationCoordinate2D = self
        progressCoordinate.latitude -= (self.latitude - location.latitude) * percent
        progressCoordinate.longitude -= (self.longitude - location.longitude) * percent
        return progressCoordinate
    }
}

