es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 de haversine calcula la distancia a lo largo de un gran círculo de la superficie terrestre entre dos puntos. Podemos utilizar la fórmula de haversine de la librería geopy para calcular la distancia. Aquí está el fragmento de código para hacerlo:

    from geopy.distance import geodesic
    
    def find_nearest(lat,long,df_geo):
        nearest_point = None
        min_distance = float('inf')
        for index, row in df_geo.iterrows():
            point = (row['Lat'], row['Long'])
            distance = geodesic(point, (lat, long)).km
            if distance < min_distance:
                nearest_point = row
                min_distance = distance
        return nearest_point['Address'], nearest_point['Value']
    
    # obtener la latitud y longitud geocodificadas
    lat, long = [33.515227, -112.094457]
    
    # encontrar el punto más cercano en el dataframe df_geo
    address, value = find_nearest(lat, long, df_geo)
    
    print("Dirección más cercana: ", address)
    print("Valor: ", value)
    

    La función find_nearest toma la latitud y longitud geocodificadas, el dataframe de pandas df_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étodo geodesic de geopy. Realiza un seguimiento del punto más cercano y su distancia utilizando la variable min_distance. Finalmente, devuelve los campos de Address y Value del punto más cercano.

    En este ejemplo, el punto más cercano es Addr1 con un valor de 100.

Comments are closed.