计算列中GPS坐标之间的距离

问题描述

我正在使用geopy distance.distance函数来计算gpx文件中每个经纬度点之间的距离,如下所示:

lat lon alt time
0   44.565335   -123.312517 85.314  2020-09-07 14:00:01
1   44.565336   -123.312528 85.311  2020-09-07 14:00:02
2   44.565335   -123.312551 85.302  2020-09-07 14:00:03
3   44.565332   -123.312591 85.287  2020-09-07 14:00:04
4   44.565331   -123.312637 85.270  2020-09-07 14:00:05

我正在使用此代码为lat和lon创建新列,其中行向下移动,然后可以使用apply计算每个行的距离。这行得通,但是我想知道是否有一种方法可以在不为移动数据创建其他列的情况下实现。

def calcdistance(row):
    return distance.distance((row.lat_shift,row.lon_shift),(row.lat,row.lon)).miles

GPS_df['lat_shift']=GPS_df['lat'].shift()
GPS_df['lon_shift']=GPS_df['lon'].shift()
GPS_df['lat_shift'][0]=GPS_df['lat'][0]
GPS_df['lon_shift'][0]=GPS_df['lon'][0]
GPS_df['dist']= GPS_df.apply(calcdistance,axis=1)

解决方法

代码很有效。一种选择是在获得距离后删除新列。

GPS_df = GPS_df.drop(columns=['lat_shift','lon_shift'])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...