diff --git a/Haversine.h b/Haversine.h old mode 100644 new mode 100755 index 9525398..fd8ccc0 --- a/Haversine.h +++ b/Haversine.h @@ -12,23 +12,13 @@ extern float const HAVERSINE_KM_RADIUS; extern float const HAVERSINE_M_PER_KM; extern float const HAVERSINE_F_PER_MI; -@interface Haversine : NSObject { - float lat1; - float lon1; - float lat2; - float lon2; -} +@interface Haversine : NSObject + +@property CLLocationCoordinate2D point1; +@property CLLocationCoordinate2D point2; -@property float lat1; -@property float lon1; -@property float lat2; -@property float lon2; +- (id)initWithPoint1:(CLLocationCoordinate2D)point1 andPoint2:(CLLocationCoordinate2D)point2 ; -- (id)init; -- (id)initWithLat1:(float)newLat1 - lon1:(float)newLon1 - lat2:(float)newLat2 - lon2:(float)newLon2; - (float)distance; - (float)toKilometers; - (float)toMeters; diff --git a/Haversine.m b/Haversine.m old mode 100644 new mode 100755 index a256b89..a756380 --- a/Haversine.m +++ b/Haversine.m @@ -12,34 +12,23 @@ float const HAVERSINE_M_PER_KM = 1000.0; float const HAVERSINE_F_PER_MI = 5282.0; - @implementation Haversine -@synthesize lat1, lon1, lat2, lon2; - -- (id)init { - return [self initWithLat1:0.0 lon1:0.0 lat2:0.0 lon2:0.0]; -} - -- (id)initWithLat1:(float)newLat1 - lon1:(float)newLon1 - lat2:(float)newLat2 - lon2:(float)newLon2 { +- (id)initWithPoint1:(CLLocationCoordinate2D)point1 andPoint2:(CLLocationCoordinate2D)point2 { self = [super init]; if (self) { - self.lat1 = newLat1; - self.lon1 = newLon1; - self.lat2 = newLat2; - self.lon2 = newLon2; + + self.point1 = point1; + self.point2 = point2; } return self; } - (float)distance { - float lat1Rad = lat1 * HAVERSINE_RADS_PER_DEGREE; - float lat2Rad = lat2 * HAVERSINE_RADS_PER_DEGREE; - float dLonRad = ((lon2 - lon1) * HAVERSINE_RADS_PER_DEGREE); - float dLatRad = ((lat2 - lat1) * HAVERSINE_RADS_PER_DEGREE); + float lat1Rad = self.point1.latitude * HAVERSINE_RADS_PER_DEGREE; + float lat2Rad = self.point2.latitude * HAVERSINE_RADS_PER_DEGREE; + float dLonRad = ((self.point2.longitude - self.point1.longitude) * HAVERSINE_RADS_PER_DEGREE); + float dLatRad = ((self.point2.latitude - self.point1.latitude) * HAVERSINE_RADS_PER_DEGREE); float a = pow(sin(dLatRad / 2), 2) + cos(lat1Rad) * cos(lat2Rad) * pow(sin(dLonRad / 2), 2); return (2 * atan2(sqrt(a), sqrt(1 - a))); }