我们如何在数据框中添加一个字段来查找两个数据框中的纬度和经度之间的距离?

问题描述

我有两个带有纬度和经度坐标的数据框。 DF #1 包含各种业务数据,以及一列纬度和一列经度。 DF #2 列出了美国周围的所有机场,这个 DF 也有一列纬度和一列经度。我想在 DF #1 中添加一列来查找相似的纬度/经度坐标之间的距离。我认为根据我的研究,haversine 方法会奏效。我尝试了下面的函数,但我的距离列中的数字非常大。

lon1 = df_result['longitude_fuze']
lon2 = df_airports['longitude_air']
lat1 = df_result['latitude_fuze']
lat2 = df_airports['latitude_air']

from math import radians,cos,sin,asin,sqrt
def haversine(lon1,lat1,lon2,lat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1,lat2 = map(radians,[lon1,lat2])
    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    # Radius of earth in kilometers is 6371
    km = 6371* c
    return km

# Creating a new column to generate the output by passing lat long information to haversine Equation
df_result['distance'] = [haversine(df_result.longitude_fuze[i],df_result.latitude_fuze[i],df_airports.longitude_air[i],df_airports.latitude_air[i]) for i in range(len(df_result))]
df_result['distance'] = df_result['distance'].round(decimals=3)
# Printing the data table 
df_result.head()
df_result

这是我的 DF 的一个小屏幕截图,其中计算了距离列,大概是通过两个数据帧中的纬度/经度之间的差异。

enter image description here

这里有什么问题?我希望距离非常小,或者如果距离很大,也许我需要一种不同的方法,比如如果距离 > 1 英里,什么都不做,跳到下一行检查下一个距离。知道我的设置有什么问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)