问题描述
我有两个带有纬度和经度坐标的数据框。 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 的一个小屏幕截图,其中计算了距离列,大概是通过两个数据帧中的纬度/经度之间的差异。
这里有什么问题?我希望距离非常小,或者如果距离很大,也许我需要一种不同的方法,比如如果距离 > 1 英里,什么都不做,跳到下一行检查下一个距离。知道我的设置有什么问题吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)