Це не є суто новою відповіддю (поки що), але представлений набір антиподальних аеропортів, які хтось може використати, щоб знайти кращий маршрут. Читайте далі про найбільш антиподальних аеропортах і шокуюче розкриття про маршрут Сантьяго-Сіань.
Продовжуючи цю розвідку, я переходжу до роботи a3nm, який раніше займався деякими аеропортними пам'ятниками, пов'язаними з антиподом. Використовуючи його вказівник на базу даних OpenFlight (кому надано всі кредити за їх ліцензією), я можу отримати файли даних для аеропортів та повітряних маршрутів по всьому світу.
По-перше, я завантажу дані аеропорту в таблицю PostgreSQL, використовуючи цю процедуру , і включу таблицю для підтримки PostGIS, щоб ми могли робити просторові обчислення.
Ми встановимо кілька стовпчиків нуля, обчислимо антипод для кожного аеропорту і перетворимо його в геометрію (мабуть, кращий спосіб це зробити, якщо ви знаєте, що ви робите. Загальна тема тут полягає в тому, що ми не робимо " t, насправді, знайте, що ми робимо):
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;
У наступному розстрочку ми побачимо, чи зможемо знайти швидший маршрут.