Рассчитать местоположение по расстоянию от другого места
Я знаю, что есть тонны вопросов (и ответов) о том, как определить расстояние между двумя CLLocations. Но я не нашел ни единого намека на то, как сделать это наоборот.
Вот конкретная ситуация: у меня есть одно CLLocation, одно расстояние (скажем, 200 метров) и одно направление. Теперь мне нужно знать, как рассчитать местоположение, которое находится в 200 метрах (в указанном направлении) от первого местоположения. Я не знаю, какой может быть лучший формат для направления. Возможно, лучшее будет в градусах (север = 0, восток = 90, юг = 180, запад = 270).
В двух словах, мне нужен метод, который может быть определен как
-(CLLocation*)locationWithDistance:(int)meters inDirection:(int)degrees fromLocation:(CLLocation*)origin;
Большое спасибо за вашу помощь.
2 ответа
Для более точного метода используйте эту формулу в ссылке
http://www.movable-type.co.uk/scripts/latlong.html
Пожалуйста, найдите раздел "Пункт назначения с указанным расстоянием и азимутом от начальной точки". Примените это в своем коде
Уже написан код C, чтобы сделать именно это. Это размещено на github здесь. В файлах UtilitiesGeo.c/.h имеется версия функции в градусах и радианах. Он мог быть написан в стиле Objective-C, но я хотел, чтобы он был переносимым на любой проект на основе Си.
/*-------------------------------------------------------------------------
* Given a starting lat/lon point on earth, distance (in meters)
* and bearing, calculates destination coordinates lat2/lon2.
*
* all params in degrees
*-------------------------------------------------------------------------*/
void destCoordsInDegrees(double lat1, double lon1,
double distanceMeters, double bearing,
double* lat2, double* lon2);