นี่ยังไม่เป็นคำตอบใหม่ (แต่) แต่นำเสนอชุดข้อมูลของสนามบิน antipodal ที่ใครบางคนอาจใช้เพื่อค้นหาเส้นทางที่ดีกว่า อ่านต่อไปสำหรับสนามบินที่ตรงกันข้ามที่สุดและน่าตกใจเปิดเผยเกี่ยวกับเส้นทาง Santiago-Xi'an
ต่อการสำรวจนี้ฉันหันไปหางาน a3nm ซึ่งก่อนหน้านี้เคยทำงานในโรงเก็บไก่ที่เกี่ยวข้องกับแอนติพอดของสนามบิน ใช้ตัวชี้ของเขาไปยังฐานข้อมูล OpenFlights (ซึ่งให้เครดิตทั้งหมดตามใบอนุญาต) ฉันสามารถรับดาต้าไฟล์สำหรับสนามบินและเส้นทางอากาศทั่วโลก
อันดับแรกฉันจะโหลดข้อมูลสนามบินลงในตาราง PostgreSQL โดยใช้ขั้นตอนนี้และเปิดใช้งานตารางสำหรับการสนับสนุน PostGIS เพื่อให้เราสามารถทำการคำนวณเชิงพื้นที่
เราจะตั้งค่าคอลัมน์เกาสองสามอันคำนวณ antipode สำหรับแต่ละสนามบินและแปลงเป็นเรขาคณิต (อาจมีวิธีที่ดีกว่าในการทำเช่นนี้หากคุณรู้ว่าคุณกำลังทำอะไรอยู่ธีมทั่วไปที่นี่คือเราไม่ ' อันที่จริงแล้วรู้ว่าเรากำลังทำอะไรอยู่):
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 ชั่วโมง สิ่งนี้สามารถแก้ไขได้โดยเริ่มต้นการเดินทางของคุณเล็กน้อยไปยัง Santiago หรือ Xi'an และนั่งรถบัสที่สนามบิน (ซึ่งคุณจะมีเวลาเหลือเฟือที่จะทำถ้าคุณเดินทางไป 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
ตอนนี้เราจะค้นหาสนามบิน antipodal ทั้งหมด (ด้วยรหัส 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;
ในภาคถัดไปของเราเราจะดูว่าเราสามารถหาเส้นทางที่เร็วขึ้นได้ไหม