GPS-координаты в градусах для расчета расстояний
На iPhone я получаю местоположение пользователя в десятичных градусах, например: широта 39.470920 и longitude = -0.373192; Эта точка A.
Мне нужно создать линию с другой координатой GPS, также в десятичных градусах, точке B. Затем вычислите расстояние (перпендикулярно) между линией от A до B и другой точкой C.
Проблема в том, что меня путают со значениями в градусах. Я хотел бы получить результат в метрах. Что нужно для преобразования? Как будет выглядеть итоговая формула для вычисления этого?
Ответы
Ответ 1
Почему бы вам не использовать метод CLLocation distanceFromLocation:
? Он сообщит вам точное расстояние между приемником и другим CLLocation.
CLLocation *locationA = [[CLLocation alloc] initWithLatitude:12.123456 longitude:12.123456];
CLLocation *locationB = [[CLLocation alloc] initWithLatitude:21.654321 longitude:21.654321];
CLLocationDistance distanceInMeters = [locationA distanceFromLocation:locationB];
// CLLocation is aka double
[locationA release];
[locationB release];
Это так просто.
Ответ 2
- (CLLocationDistance) distanceFromLocation: (const CLLocation *) location - это способ получить расстояние от CLLocation до другого.
Ваша проблема заключается в поиске кратчайшей линии между линией (A, B) и точкой C.
Я думаю, если ваши 3 CLLocations находятся рядом (менее чем на несколько километров друг от друга), вы можете сделать математику "как если бы" координаты являются точками на одной плоскости и используйте this в С++ или this или this и просто используйте CLLocations "как бы", они были координатами x и y на плоскости.
Если ваши координаты далеки или точна точность важна, то сферическая форма земли имеет значение, и вам нужно делать что-то, используя большое расстояние круга и другую геометрию на лицевой поверхности сферы.