Очень «простая» проблема: учитывая два CLLocationCoordinate2D, как я могу получить направление (в радианах) от первого до второго? Я провел много исследований и исследований по этому вопросу, как общей проблемы, так и 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 радиан
должно быть 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 )
Я дважды и трижды проверил, что формула верна. Я также проверил несколько значений, как в примере выше, некоторые правильные, некоторые неправильные. Я играл с различными модулями или ограничениями возвращаемого значения, тоже не повезло.
Есть идеи? Есть ли проблема с моим кодом? Может быть, я неправильно понял, как работают математические функции?