Как я вычисляю расстояние между двумя точками широты и долготы? [дубликат]

16
задан Matthew Flaschen 16 April 2010 в 15:34
поделиться

3 ответа

CLLocation *location1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2];
NSLog(@"Distance i meters: %f", [location1 distanceFromLocation:location2]);
[location1 release];
[location2 release];

Вам также необходимо добавить CoreLocation.framework в свой проект и добавить оператор импорта:

#import <CoreLocation/CoreLocation.h>
32
ответ дан 30 November 2019 в 16:36
поделиться

Я разобрался с математикой и теперь могу значительно упростить решение.

Представьте, что мы вращаем Землю так, чтобы наш первый вектор находился на 0 градусах широты и 0 градусах долготы. Второй вектор будет находиться в (альфа2 - альфа1) градусах широты и (бета2 - бета1) градусах широты.

Поскольку ...

sin(0) = 0 and cos(0) = 1

наше скалярное произведение упрощается до ...

cos(delta_alpha) * cos(delta_beta) = cos(theta)

Остальная часть математики остается неизменной.

theta = acos (cos(delta_alpha) * cos(delta_beta))
distance = radius * theta

Надеюсь, это поможет.

1
ответ дан 30 November 2019 в 16:36
поделиться

Возможно, это не самый эффективный способ сделать это, но он будет работать.

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

Если v1 = (x1, y1, z1) и v2 = (x2, y2, z2), то ...

v1 dot v2 = magnitude(v1) * magnitude(v2) * cos (theta)

Удобно, что величина v1 и v2 будет одинаковой ... радиус земля (R).

x1*x2 + y1*y2 + z1*z2 = R*R*cos(theta)

Найдите тета.

theta = acos ((x1*x2 + y1*y2 + z1*z2) / (R * R));

Теперь у вас есть угол между двумя векторами в радианах. Расстояние между двумя точками при путешествии по поверхности земли, таким образом, составляет ...

distance = theta * R.

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

Чтобы преобразовать в декартовы координаты ...

Пусть альфа будет широтой, а бета - долготой.

x = R * cos (alpha) * cos (beta)
y = R * sin (alpha)
z = R * cos (alpha) * sin (beta)

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

5
ответ дан 30 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: