Bu kesinlikle yeni bir cevap değil (henüz), ancak birisinin daha iyi bir rota bulmak için kullanabileceği bir antipodal havaalanı veri kümesi sunar. En antipodal havaalanları ve Santiago-Xi'an rotası hakkında şok edici bir açıklama için okumaya devam edin.
Bu keşfe devam ederken, daha önce havaalanı antipodu ile ilgili bazı tomrukçulukla uğraşan bir a3nm'nin çalışmasına dönüyorum. OpenFlights veritabanına (tüm lisansları lisans başına verilen) işaretçisi kullanarak , dünyanın dört bir yanındaki havaalanları ve hava yolları için veri dosyaları alabilirim.
İlk olarak, bu prosedürü kullanarak havaalanı verilerini bir PostgreSQL tablosuna yükleyeceğim ve uzamsal hesaplamalar yapabilmemiz için PostGIS desteği için tabloyu etkinleştireceğim.
Birkaç çizik sütun kuracağız, her havaalanı için antipodu hesaplayacağız ve bunu bir geometriye dönüştüreceğiz (ne yaptığınızı biliyorsanız muhtemelen bunu yapmanın daha iyi bir yolu var. Burada ortak bir tema, t, aslında ne yaptığımızı bilin):
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);
Ve akıl sağlığı sonuçları zaten bildiğimiz bazı sonuçlara göre kontrol eder:
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**
Oh hayır! Önceki cevabım hakkında yıkıcı bir gerçeği irdeledik. SCL-XIY, gerçekten katılabilmek için 24 km uzaktadır. Bu muhtemelen yolculuğunuza Santiago veya Xi'an'a biraz daha başlayıp bir çeşit havaalanı otobüsü alarak (72 saatlik bir gidiş dönüş yapıyorsanız çok zamanınız olacak) düzeltilebilir, ancak gerçekten üzücü bir bulgu.
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
İyi haber şu ki sonuçlar aklı başında. Şimdi en antipodal havaalanlarını bulabiliriz, çünkü neden olmasın? Veritabanını aptalca kullanma eğilimimize devam edelim, çünkü biraz daha kolay ve iki tablo üzerinde sorguyu çalıştırabilmemiz için yinelenen bir sıfırlama tablosu oluşturuyoruz. Ayrıca, veri setindeki rastgele tren istasyonlarının çoğunu hariç tutmak ve bulması kolay ticari hizmete sahip havaalanları bulma konusunda en iyi şansı vermek için aramamızı IATA kodlu havaalanlarıyla sınırlayacağız:
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
Ve elbette, PLM ve NVA oldukça yakın:
Merak ediyorsanız ve biliyorum ki, havaalanlarının IATA kodları olan kısıtlamayı kaldırsanız bile PLM ve NVA hala kazanıyor.
Şimdi 100 km menzilindeki tüm antipodal havaalanlarını (IATA kodları ile) sorgulayacağız, eşleşen çiftler oldukları için diğer tüm girişleri keseceğiz ve araştırmak için 366 aday şehir çiftini listeleyen bir veri dosyası oluşturacağız . Biz de bir yapabilirsiniz biraz daha büyük bir set biz 100km sınırı bir saç dinlenmek ve eğer başka bir şey her zaman biraz yürüyebilir anlamaya eğer.
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;
Bir sonraki taksitimizde, daha hızlı bir rota bulabilecek miyiz.