Это не совсем новый ответ (пока), но представляет набор данных аэропортов-антиподов, которые кто-то может использовать, чтобы найти лучший маршрут. Продолжайте читать о самых антиподальных аэропортах и ошеломляющем открытии о маршруте Сантьяго-Сиань.
Продолжая это исследование, я перехожу к работе a3nm, который ранее занимался каким-то дурачеством, связанным с антиподами в аэропортах. Используя его указатель на базу данных OpenFlights (которой все кредиты предоставляются по их лицензии), я могу получить файлы данных для аэропортов и воздушных маршрутов по всему миру.
Сначала я загружу данные аэропорта в таблицу PostgreSQL, используя эту процедуру , и включу таблицу для поддержки PostGIS, чтобы мы могли выполнять пространственные вычисления.
Мы настроим пару столбцов с нулями, рассчитаем антипод для каждого аэропорта и преобразуем его в геометрию (возможно, есть лучший способ сделать это, если вы знаете, что делаете. Общей темой здесь является то, что мы не т, собственно, знаю что мы делаем)
update airports set antipode_latitude = -latitude;
update airports set antipode_longitude = 180+longitude;
update airports set antipode_longitude = antipode_longitude-360 where antipode_longitude > 180;
update airports SET antipode = ST_SetSRID(ST_MakePoint(antipode_longitude,antipode_latitude),4326);
И здравомыслие проверяет результаты на основе некоторых из тех, о которых мы уже знаем:
select airports.name, city, country, iata, ST_Distance_Sphere(airports.antipode, (select airports.geom from airports where iata='SCL')) as distance from airports order by distance limit 3;
Ankang Airport Ankang China AKA 80599.02914563
Xi\\'An Xiguan Xi\\'AN China SIA 109730.42018116
Xianyang Xi'an China XIY **124745.39283865**
о нет! Мы раскрыли разрушительную правду о моем предыдущем ответе. SCL-XIY на самом деле 24 км слишком далеко, чтобы строго квалифицироваться. Вероятно, это можно исправить, начав свое путешествие чуть дальше в Сантьяго или Сиань и воспользовавшись автобусом из аэропорта (у вас будет достаточно времени, если вы совершите 72-часовой перелет туда и обратно), но это действительно печальная находка.
select airports.name, city, country, iata, ST_Distance_Sphere(airports.antipode, (select airports.geom from airports where iata='AKL')) as distance from airports order by distance limit 5;
Ronda Airport Ronda Spain RRA 28932.88795948
Ronda Ronda Spain 30772.20555266
Moron Ab Sevilla Spain OZP 40636.98417791
Malaga Malaga Spain AGP 73182.10790714
Sevilla Sevilla Spain SVQ 75861.92508438
Хорошей новостью является то, что результаты кажутся нормальными. Теперь мы можем найти самые антиподальные аэропорты, потому что почему бы и нет? Давайте продолжим нашу тенденцию тупо использовать базу данных, потому что это немного проще, и создадим дублирующую таблицу, чтобы мы могли выполнить запрос по двум таблицам. Мы также ограничим наш поиск аэропортами с кодами IATA, чтобы исключить большинство случайных железнодорожных станций в наборе данных и дать нам лучший шанс найти аэропорты с легким для поиска коммерческим обслуживанием:
create table airports2 (like airports including all);
insert into airports2 select * from airports;
select airports.name, airports.city, airports.country, airports.iata, airports2.name, airports2.city, airports2.country, airports2.iata, st_distance_sphere(airports.antipode, airports2.geom) as distance from airports, airports2 where airports.geom && ST_Expand(airports2.antipode, 25) and airports.iata <> '' and airports2.iata <> '' order by ST_DISTANCE(airports.geom, airports2.antipode) asc limit 1;
Sultan Mahmud Badaruddin Ii Palembang Indonesia PLM Benito Salas Neiva Colombia NVA 5810.60702928
И, конечно же, PLM и NVA довольно близки:
Если вам интересно, и я знаю, что это так, PLM и NVA по-прежнему выигрывают, даже если вы снимите ограничение, согласно которому в аэропортах есть коды IATA.
Теперь мы запросим все аэропорты-антиподалы (с кодами IATA) в радиусе 100 км, обрежем каждую вторую запись, так как они сопоставляются парами, и создадим файл данных со списком 366 пар городов-кандидатов для расследования. Мы также можем сделать немного больший сет, если мы ослабим 100-километровый предел волос и фигуру, мы всегда можем немного пройтись, если ничего больше.
select airports.name, airports.city, airports.country, airports.iata, airports2.name, airports2.city, airports2.country, airports2.iata, st_distance_sphere(airports.antipode, airports2.geom) as error from airports, airports2 where airports.geom && ST_Expand(airports2.antipode, 25) and airports.iata <> '' and airports2.iata <> '' order by ST_DISTANCE_sphere(airports.antipode, airports2.geom) asc limit 1000;
В следующем выпуске мы увидим, сможем ли мы найти более быстрый маршрут.