Очень "простая" проблема: учитывая два CLLocationCoordinate2Ds, как я могу получить опору (как радианы) от первой до второй? Я провел много исследований и исследований по этому вопросу, как с общей проблемой, так и с Objective-C/Cocoa Touch/iOS.
Здесь моя реализация:
- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
float fLat = fromLoc.latitude;
float fLng = fromLoc.longitude;
float tLat = toLoc.latitude;
float tLng = toLoc.longitude;
return atan2(sin(fLng-tLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(fLng-tLng));
}
Однако этот метод не возвращает результаты для меня. Если подшипник близок к северу или к югу, кажется, все хорошо, однако любое другое направление, похоже, возвращает несогласованные данные, например:
От 50.405018, 8.437500
К 51.339802, 12.403340
Мой метод возвращает: 5.918441 radians
Должно быть 1.18660576 радианов
(см. http://www.movable-type.co.uk/scripts/latlong.html и http://www.movable-type.co.uk/scripts/latlong-map.html?lat1=50.405018&long1=8.437500&lat2=51.339802&long2=12.403340)
Я дважды и тройной проверял правильность формулы. Я также заметил, что проверил множество значений, подобных приведенному выше примеру, некоторые правильные, некоторые неправильные. Я играл с различными модулями или ограничивал возвращаемое значение, также не повезло.
Любые идеи? Есть ли проблема с моим кодом? Может быть, я неправильно понял, как работают математические функции?