Esta não é estritamente uma nova resposta (ainda), mas apresenta um conjunto de dados de aeroportos antipodais que alguém pode usar para encontrar uma rota melhor. Leia sobre os aeroportos mais antípodas e uma revelação chocante sobre a rota Santiago-Xi'an.
Continuando essa exploração, eu volto para o trabalho de um a3nm, que anteriormente participou de alguma tolice relacionada a antípodas de aeroportos. . Usando seu ponteiro para o banco de dados do OpenFlights (para quem todo o crédito é dado por sua licença), posso obter arquivos de dados para aeroportos e rotas aéreas ao redor do mundo.
Primeiro, vou carregar os dados do aeroporto em uma tabela do PostgreSQL usando este procedimento e habilitar a tabela para suporte PostGIS para que possamos fazer cálculos espaciais.
Vamos configurar algumas colunas de rascunho, calcular o antípoda para cada aeroporto e convertê-lo em geometria (provavelmente há uma maneira melhor de fazer isso se você souber o que está fazendo. Um tema comum aqui é que nós não sabemos, de fato, o que estamos fazendo):
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);
E a sanidade verifica os resultados com base em alguns dos que já conhecemos:
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 não! Nós revelamos uma verdade devastadora sobre minha resposta anterior. O SCL-XIY está na verdade a 24km longe demais para se qualificar estritamente. Isso provavelmente pode ser corrigido iniciando sua jornada um pouco mais em direção a Santiago ou Xi'an e pegando algum tipo de ônibus do aeroporto (que você terá muito tempo para fazer se estiver fazendo uma viagem de ida e volta de 72 horas), mas é um triste achado, de fato.
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
A boa notícia é que os resultados parecem sensatos. Agora podemos encontrar os aeroportos mais antípodas, porque não? Vamos continuar nossa tendência de usar o banco de dados estupidamente, porque é um pouco mais fácil e criar uma tabela de rascunho duplicada para que possamos executar a consulta nas duas tabelas. Também limitaremos nossa pesquisa a aeroportos com códigos IATA, para excluir a maioria das estações de trem aleatórias no conjunto de dados e nos dará a melhor chance de encontrar aeroportos com serviço comercial fácil de encontrar:
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
E com certeza, o PLM e o NVA são bem próximos:
Se você está curioso, e eu sei que você está, o PLM e o NVA ainda ganham mesmo se você remover a restrição que os aeroportos têm códigos IATA.
Agora, consultaremos todos os aeroportos antipodais (com códigos IATA) dentro da faixa de 100 km, compensaremos todos os outros registros, já que eles são pares correspondentes e produzirão um arquivo de dados listando 366 pares de cidades candidatos para investigar. Também podemos fazer um conjunto um pouco maior se relaxarmos o limite de 100 km em um cabelo e imaginarmos que podemos andar um pouco mais.
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;
Em nossa próxima edição, veremos se podemos encontrar uma rota mais rápida.