GPS-координаты в градусах для расчета расстояний - PullRequest
11 голосов
/ 09 августа 2011

На iPhone я получаю местоположение пользователя в десятичных градусах, например: широта 39.470920 и долгота = -0.373192;Это точка A.

Мне нужно создать линию с другой координатой GPS, также в десятичных градусах, точка B. Затем вычислите расстояние (перпендикулярно) между линией от A до B и другой точкой C.

Проблема в том, что я путаюсь со значениями в градусах.Я хотел бы иметь результат в метрах.Какая конверсия нужна?Как будет выглядеть окончательная формула для вычисления?

Ответы [ 3 ]

29 голосов
/ 09 августа 2011

Почему вы не используете метод CLLocation s 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];

Это так просто.

1 голос
/ 26 апреля 2018

Swift 3.0 +

Рассчитать только расстояние между двумя координатами:

let distance = source.distance(from: destination)

Если у вас есть массив местоположений:

Чтобы получить расстояние от массива точек, используйте ниже метод уменьшения.

Здесь locations - это массив типа CLLocation.

 let calculatedDistance = locations.reduce((0, locations[0])) { ($0.0 + $0.1.distance(from: $1), $1)}.0

Здесь выполучит расстояние в метров .

1 голос
/ 09 августа 2011
  • (CLLocationDistance) distanceFromLocation: (const CLLocation *) location - это метод для получения расстояния от CLLocation до другого.

Ваша проблема также в том, чтобы найти самую короткую линию между линией (A, B) и точкой C. Я предполагаю, что если ваши 3 CLLocations находятся близко (менее чем в нескольких километрах друг от друга), вы можете сделать математику «как будто», координаты - это точки на одной плоскости, и использовать this в C ++ или this или this и просто используйте CLLocations "как если бы" они были координатами x и y на плоскости.

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

...