Encontrar eficientemente o par de coordenadas mais próximo de um conjunto em Python
O problema
Imagine que estou parado em um aeroporto. Dado um par de coordenadas geográficas, como determinar com eficiência em qual aeroporto eu estou?
Entradas
Um par de coordenadas(x,y)
representando o local em que estou.Um conjunto de pares de coordenadas[(a1,b1), (a2,b2)...]
onde cada par de coordenadas representa um aeroporto.Saída desejada
Um par de coordenadas(a,b)
do conjunto de pares de coordenadas do aeroporto que representam o aeroporto mais próximo do ponto(x,y)
.
Solução ineficiente
Aqui está minha tentativa ineficiente de resolver esse problema. É claramente linear no comprimento do conjunto de aeroportos.
shortest_distance = None
shortest_distance_coordinates = None
point = (50.776435, -0.146834)
for airport in airports:
distance = compute_distance(point, airport)
if distance < shortest_distance or shortest_distance is None:
shortest_distance = distance
shortest_distance_coordinates = airport
A questão
Como essa solução pode ser melhorada? Isso pode envolver alguma maneira de pré-filtrar a lista de aeroportos com base nas coordenadas do local em que estamos atualmente ou classificá-los em uma determinada ordem previamente.