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 на плоскости.

Если ваши координаты далеки или точна точность важна, то сферическая форма земли имеет значение, и вам нужно делать что-то, используя большое расстояние круга и другую геометрию на лицевой поверхности сферы.