Вопрос: Как выполнить вычисление «большого круга» в MS Excel или LibreOffice?


Я получил две колонки с широтой и долготой. Мне нужно рассчитать расстояние между точками в каждой строке. Я пытаюсь использовать гаверсинуса формулу, как видно Вот:

haversine calculation

Это так называемый «большой круг» расчета. Мне нужно выполнить этот расчет на огромном количестве координат.

Данные выглядят так:

  |        A        B    C    D    E   F    G
--|-------------------------------------------
0 |      LAT      LON rLAT dLAT dLON   a DIST
1 | 52.39964 13.04729  ...  ...  ... ...     
2 | 52.39985 13.04802  ...  ...  ... ...  ???
3 | 52.40116 13.04744  ...  ...  ... ...  ???
4 | 52.40147 13.04722  ...  ...  ... ...  ???
5 | 52.40163 13.04685  ...  ...  ... ...  ???
6 |      ...      ...  ...  ...  ... ...  ...

Теперь, что я пробовал, для поля G2 в LibreOffice:

C2=RADIANS(A2)
D2=RADIANS(A2-A1)
E2=RADIANS(B2-B1)
F2=SIN(D2/2)*SIN(D2/2)+SIN(E2/2)*SIN(E2/2)*COS(C1)*COS(C2)
G2=2*ATAN2(SQRT(F2), SQRT(1-F2))*6371

Результат для G2 является20015 что совершенно ... неправильно.

Как рассчитать расстояние между двумя точками, заданными широтой и долготой в Microsoft Excel или LibreOffice Calc? Что случилось с моей формулой?


2
2018-06-02 15:26


Источник


Быстрый поиск в Google: bluemm.blogspot.com/2007/01/... - Brian Adkins


Ответы:


Как найдено Вот от BrianAdkins, эта формула Excel для вычисления расстояния между двумя точками широты / долготы работает для меня как в LibreOffice Calc, так и в Microsoft Excel 2013:

=ACOS(COS(RADIANS(90-A1))*COS(RADIANS(90-A2))+SIN(RADIANS(90-A1))*SIN(RADIANS(90-A2))*COS(RADIANS(B1-B2)))*6371

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

  |        A        B      C
--|--------------------------
0 |      LAT      LON   DIST
1 | 52.39964 13.04729               
2 | 52.39985 13.04802   54.8
3 | 52.40116 13.04744  150.9
4 | 52.40147 13.04722   37.6
5 | 52.40163 13.04685   30.8
6 |      ...      ...    ...

Чтобы отобразить расстояния в милях, замените *6371 с *3958,


4
2018-06-02 17:11





Метод Haversine хорош до тех пор, пока вы готовы принять коэффициент ошибки, или если вы должны реализовать только формулу рабочего листа. Для коротких расстояний и некритических ситуаций это, вероятно, будет нормально. Но если вам нужна точность, вам нужно использовать что-то вроде алгоритма, разработанного Таддеусом Винченти. Его результаты считаются точными до миллиметров на основе точности используемых пар lat / long. Какая разница между этими двумя? Между JFK и Токио разница составляет около 14.9 миль (короткая). Между Лос-Анджелесом и Гонолулу вы будете находиться всего в 3 милях от острова.

Хорошую реализацию алгоритма Винценти в Visual Basic (как для Excel) можно найти по адресу: http://lost-species.livejournal.com/38453.html Код будет работать как «как есть» в 32-разрядных версиях Excel, но с ошибкой «слишком сложной формулы» в 64-разрядной версии Excel. Как раз ниже размещения всего кода я опубликовал исправление к этой проблеме, которое позволяет ему запускать как 32, так и 64-разрядные версии движка VBA.

С Уважением, J.Latham, Microsoft MVP, Excel 2006-2014


2
2017-09-02 05:54





Полные прямые / обратные формулы Vincenty. Реализация Excel VBA (надстройка 32/64 бит), позволяющая не только для вычисления расстояния, но и для азимута и обратного азимута, доступна https://github.com/tdjastrzebski/VincentyExcel


0
2017-07-13 23:19