Próbuję napisać kategorię dla CLLocation, aby przywrócić łożysko do innej CLLocation.Kategoria CLLocation do obliczania łożyska z funkcją Haversine
Wierzę, że robię coś nie tak z formułą (nie jest to mój silny kombinezon). Zwrócone łożysko jest zawsze wyłączone.
Szukałem na to pytanie i starał zastosowaniu zmian, które zostały przyjęte jako poprawną odpowiedź, a strona odwołuje:
Calculating bearing between two CLLocationCoordinate2Ds
http://www.movable-type.co.uk/scripts/latlong.html
Dzięki za wszelkie wskazówki. Próbowałem wykorzystywać opinie z tego drugiego pytania i nadal po prostu nie dostaję czegoś.
Dzięki
Oto moja kategoria -
----- CLLocation + Bearing.h
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@interface CLLocation (Bearing)
-(double) bearingToLocation:(CLLocation *) destinationLocation;
-(NSString *) compassOrdinalToLocation:(CLLocation *) nwEndPoint;
@end
--------- CLLocation + Bearing.m
#import "CLLocation+Bearing.h"
double DegreesToRadians(double degrees) {return degrees * M_PI/180;};
double RadiansToDegrees(double radians) {return radians * 180/M_PI;};
@implementation CLLocation (Bearing)
-(double) bearingToLocation:(CLLocation *) destinationLocation {
double lat1 = DegreesToRadians(self.coordinate.latitude);
double lon1 = DegreesToRadians(self.coordinate.longitude);
double lat2 = DegreesToRadians(destinationLocation.coordinate.latitude);
double lon2 = DegreesToRadians(destinationLocation.coordinate.longitude);
double dLon = lon2 - lon1;
double y = sin(dLon) * cos(lat2);
double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
double radiansBearing = atan2(y, x);
return RadiansToDegrees(radiansBearing);
}
Czemu konwersji LAT i LON wartości ze stopni na radiany? Czy funkcja Haversine wymaga tej konwersji? –
Aby odpowiedzieć na moje własne pytanie, tak. Funkcja Haversine wymaga tej konwersji, jak pokazano tutaj: http://www.movable-type.co.uk/scripts/latlong.html –