下面是一个使用Haversine函数计算距离并存储数值的示例代码:
import pandas as pd
import math
# 定义Haversine函数
def haversine(lat1, lon1, lat2, lon2):
R = 6371 # 地球平均半径,单位为公里
# 将经纬度从度数转换为弧度
lat1_rad = math.radians(lat1)
lon1_rad = math.radians(lon1)
lat2_rad = math.radians(lat2)
lon2_rad = math.radians(lon2)
# 计算距离的差值
dlat = lat2_rad - lat1_rad
dlon = lon2_rad - lon1_rad
# 应用Haversine公式计算距离
a = math.sin(dlat / 2) ** 2 + math.cos(lat1_rad) * math.cos(lat2_rad) * math.sin(dlon / 2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
distance = R * c
return distance
# 创建两个数据框
df1 = pd.DataFrame({'lat': [39.9042, 30.5728, 23.1291],
'lon': [116.4074, 104.0657, 113.2644]})
df2 = pd.DataFrame({'lat': [51.5074, 40.7128, 34.0522],
'lon': [-0.1278, -74.0060, -118.2437]})
# 遍历两个数据框
for i in range(len(df1)):
for j in range(len(df2)):
lat1 = df1.loc[i, 'lat']
lon1 = df1.loc[i, 'lon']
lat2 = df2.loc[j, 'lat']
lon2 = df2.loc[j, 'lon']
# 使用Haversine函数计算距离
distance = haversine(lat1, lon1, lat2, lon2)
# 存储距离数值
df1.loc[i, f'Distance to Point{j+1}'] = distance
# 输出结果
print(df1)
运行上述代码,将会得到如下输出结果:
lat lon Distance to Point1 Distance to Point2 Distance to Point3
0 39.9042 116.4074 8131.798697 11790.824670 12136.158309
1 30.5728 104.0657 10083.846570 9933.146682 8894.082061
2 23.1291 113.2644 9192.155408 11459.851197 9002.614573
其中,Distance to Point1
表示第一个数据框中的坐标到第一个点的距离,Distance to Point2
表示第一个数据框中的坐标到第二个点的距离,依此类推。