【发布时间】:2016-10-04 04:11:08
【问题描述】:
我有一个从 gps 设备创建的 lat/lng 点的 pandas 数据框。
我的问题是如何为 gps 轨迹线中每个点之间的距离生成一个距离列。
一些谷歌搜索给了我下面的 hasrsine 方法,该方法使用使用 iloc 选择的单个值,但我正在努力解决如何迭代方法输入的数据框。
我原以为我可以运行一个 for 循环,类似于
for i in len(df):
df['dist'] = haversine(df['lng'].iloc[i],df['lat'].iloc[i],df['lng'].iloc[i+1],df['lat'].iloc[i+1]))
但我收到错误 TypeError: 'int' object is not iterable。我也在考虑df.apply,但我不确定如何获得适当的输入。任何帮助或提示。如何做到这一点将不胜感激。
样本 DF
lat lng
0 -7.11873 113.72512
1 -7.11873 113.72500
2 -7.11870 113.72476
3 -7.11870 113.72457
4 -7.11874 113.72444
方法
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, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.asin(math.sqrt(a))
km = 6367 * c
return km
【问题讨论】:
-
试试
for i in range(len(df))