Как рассчитать расстояние воздушной линии между двумя местами?

17

Большую часть времени я ищу способ расчета расстояния между двумя местами, чаще всего центрами городов.

Например, когда я летел из Цюриха в Хельсинки, я хотел знать, как далеко это было. С Google Maps я могу сделать это, но не для расстояния до авиалинии.

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

RoflcoptrException
источник
1
Имеет ли значение расстояние до авиалинии, когда путешествие между двумя маленькими аэропортами осуществляется только через отдаленный центр?
Mouviciel
1
Очевидно, нет ...
RoflcoptrException
3
Незначительная мысль: должны ли небольшие самолеты находиться на определенном расстоянии от земли в случае отказа двигателя? Я думал, что видел сайт, который так сказал. Если это так, расстояние по большому кругу не всегда будет точным.
Баррикартер
@barrycarter: Самолеты будут отклоняться от кратчайшего пути по разным причинам, таким как предотвращение штормов и использование реактивного потока для ускорения. Так что даже невозможно всегда знать заранее.
Майкл Боргвардт
У вас уже есть исчерпывающий ответ, так что сейчас спорный вопрос, но «воздушная линия», очевидно, вызвала некоторую путаницу. Я подозреваю, что вы имели в виду Luftlinie , и в этом случае «прямая линия», «beeline» или «по прямой линии» были бы более идиоматичными способами выразить это на английском языке.
Relaxed

Ответы:

18

Лучшим местом для этих расчетов является веб-сайт "Great Circle Mapper".

http://www.gcmap.com/

Чтобы найти расстояние между двумя или более аэропортами, просто введите их с тире между ними. например, JFK-DFW или SFO-IAD-LHR

Вы можете сделать несколько поездок одновременно, разделяя их запятыми. JKF-DFW, SFO-IAD-LHR

доктор
источник
Обратите внимание, что эти значения являются нижней границей фактического расстояния, которое самолет будет перемещать между аэропортами.
ESultanik
Отметьте это в регламенте ЕС о задержке / отмене рейса (ЕС) № 261/2004: «Расстояния, указанные в пунктах 1 и 2, должны измеряться методом большого круга».
chx
13

Всем ответчикам, рекомендующим математику Большого Круга, Вы правы лишь отчасти.

Расстояние между двумя точками на сфере определяется GC Maths, однако OP специально запросил расстояние до воздушной линии. Это можно найти, сначала найдя все посещенные точки на пути к пункту назначения, а затем рассчитав расстояния GC для всех пар маршрутов.

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

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

NWS
источник
Это именно то, о чем я думал!
Анкур Банерджи
1
Я полагаю, что ФП действительно спрашивает о большой дистанции круга, здесь «воздушная линия» означает немецкую «Люфтлини» и не имеет ничего общего с «авиакомпаниями».
Relaxed
11

Многие авиакомпании включают эту информацию в свои расписания. Например, Air Canada позволяет загрузить PDF-файл с полным расписанием. Вот клип из этого:

введите описание изображения здесь

Я предлагаю поискать на сайте авиакомпании, которую вы собираетесь использовать. Любой инструмент, основанный на том, насколько далеки друг от друга города, может отличаться на расстоянии 20-30 миль от расстояния авиакомпании.

Кейт Грегори
источник
Расстояния в каталогах (для миль для часто летающих пассажиров и т. Д.), Как правило, совпадают с оптимальными расстояниями большого круга, указанными в GCMap. Фактические расстояния меняются изо дня в день в зависимости от ветра, управления воздушным движением и т. Д.
lambshaanxy
7

Если вы хотите вычислить это самостоятельно, то сферический закон косинусов , вероятно, самый простой способ сделать это. Вероятно, он будет достаточно точным для ваших нужд и действительно прост. Если вы хотите это в Python, попробуйте этот мой код (вы хотите calculate_distance_and_bearing)

Скорее всего, вам также понадобится информация о местоположении различных аэропортов, представляющих интерес. Я имел обыкновение использовать Глобальную Базу данных Аэропорта в прошлом для такого рода вещей.

Gagravarr
источник
5

Если вы хотите сделать этот расчет для полетов, вы должны будете использовать Сферический закон косинусов, как упоминал Гаграварр. Однако, если вы хотите написать свой собственный маленький инструмент и хотите нарисовать линию на карте, то это немного сложнее. Вы должны использовать карту проекции Ламберта, чтобы нарисовать на ней прямую линию от А до В. Проблема с конформной конической проекцией Ламберта состоит в том, что эти карты точны только вдоль двух эталонных параллелей, и чем дальше вы удаляетесь от них, тем менее точными они являются. Обычно это не так и возникает на небольших картах, которые охватывают только 100x100 км, но чем больше карта, тем больше допустимая погрешность. Это как-то связано с тем, что земля круглая, и вы не можете сделать точное отображение 1: 1 от круглой к плоской поверхности.

Карты Google (и все морские карты) используют проекцию цилиндрической карты , это означает, что вам придется рисовать кривые на карте, чтобы получить тот же маршрут, что и с прямой линией на проекции Ламберта.

у меня есть компьютер
источник
3

В дополнение к уже упомянутым опциям milecalc.com также выполнит этот расчет, используя расстояние по Большому кругу, которое обычно используется для расчета пробега часто летающего пассажира и т. Д.

Эндрю Ферье
источник
2

Смотрите здесь: http://www.movable-type.co.uk/scripts/latlong.html

var R = 6371; // Earth's average radius in km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;
затруднительное положение
источник