【发布时间】:2014-11-04 05:32:27
【问题描述】:
我知道要找到两个经纬度点之间的距离,我需要使用haversine函数:
def haversine(lon1, lat1, lon2, lat2):
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
km = 6367 * c
return km
我有一个数据框,其中一列是纬度,另一列是经度。我想知道这些点离设定点有多远,-56.7213600、37.2175900。如何从 DataFrame 中获取值并将它们放入函数中?
示例数据框:
SEAZ LAT LON
1 296.40, 58.7312210, 28.3774110
2 274.72, 56.8148320, 31.2923240
3 192.25, 52.0649880, 35.8018640
4 34.34, 68.8188750, 67.1933670
5 271.05, 56.6699880, 31.6880620
6 131.88, 48.5546220, 49.7827730
7 350.71, 64.7742720, 31.3953780
8 214.44, 53.5192920, 33.8458560
9 1.46, 67.9433740, 38.4842520
10 273.55, 53.3437310, 4.4716664
【问题讨论】:
-
我已经发布了一个可以解决您的问题的答案,但我认为它不是最佳的
-
对于一个小的 df 我的答案是可以的,但对于一个更大的 df 你最好将度数转换为弧度并存储它,然后在整个数据帧上执行计算
-
我在 df 中有 143 个值,这似乎运作良好。
-
好的,但通常使用
apply应该是最后的手段,pandas 和 numpy 中有向量化函数将对整个 df 执行数学运算,请检查我不能保证的数字