Encontrar la intersección o las coordenadas geográficas más cercanas de las columnas de un dataframe de pandas.
Tengo latitudes, longitudes y direcciones en un dataframe de pandas. Un usuario ingresa una dirección y me gustaría buscar los detalles asociados en el dataframe de pandas basados en la latitud y la longitud. Aquí está mi código:
import pandas as pd
df_geo = pd.DataFrame({'Address': ['Addr1', 'Addr2', 'Addr3'],
'Value': [100, 101, 103],
'Lat': [33.515226, 33.51529, 33.515230],
'Long': [-112.094456, -112.094459, -112.094464]})
Geocodifico la dirección utilizando una API y obtengo una lista de latitud y longitud.
[33.515227, -112.094457]
¿Cómo encuentro la intersección o las coordenadas más cercanas en el dataframe de pandas y obtengo los campos Address
y Value
? Tenemos la API de geocodificación. El dataframe de pandas puede ser bastante grande, por lo que estoy buscando una solución eficiente utilizando una de las bibliotecas geo de Python, si es posible.
davy.ai
Para encontrar las coordenadas más cercanas en el dataframe de pandas basado en la latitud y longitud geocodificadas, podemos utilizar la fórmula de
haversine
para calcular la distancia entre dos coordenadas. La fórmula dehaversine
calcula la distancia a lo largo de un gran círculo de la superficie terrestre entre dos puntos. Podemos utilizar la fórmula dehaversine
de la libreríageopy
para calcular la distancia. Aquí está el fragmento de código para hacerlo:La función
find_nearest
toma la latitud y longitud geocodificadas, el dataframe de pandasdf_geo
e itera a través de cada fila del dataframe para calcular la distancia entre el punto geocodificado y cada fila del dataframe utilizando el métodogeodesic
degeopy
. Realiza un seguimiento del punto más cercano y su distancia utilizando la variablemin_distance
. Finalmente, devuelve los campos deAddress
yValue
del punto más cercano.En este ejemplo, el punto más cercano es
Addr1
con un valor de100
.