GPXファイルをpythonで分析する2(速度計算)
df_gpxは前回説明した、GPXファイルを読み込んだpandas.DataFrame。
今回はdf_gpxから速度などを計算したdf_tを作成する。
緯度経度データから距離を計算
GPSデータから距離を計算するにはいくつかの方法があり今回はVincenty法を用いる。
gpxpyライブラリのdistance関数を用いる。
distance関数は2地点の緯度と経度から距離を計算する。
distance([緯度A、経度A],[緯度B、経度B])の形で利用する。
配列に一気に適用できなそうだったので行ごとにapplyさせている。距離と時間から速度を計算
時間は累積経過時間(df_gpx.time)の差。
速度は距離/時間だが、時間はTimeDelta型なので数値型の秒に変換する必要がある。
そして秒速から時速に変換(×3600)している。
import pandas as pd from geopy.distance import distance df_t = pd.DataFrame() # time difference df_t['diff_time'] = df_gpx.time.diff() # distance df_d = pd.concat([df_gpx[['latitude', 'longitude']], df_gpx[['latitude', 'longitude']].shift()], axis=1) df_t['distance'] = df_d.dropna().apply(lambda x: distance( (x[0], x[1]), (x[2], x[3])).km, axis=1) # velocity df_t['velocity'] = df_t['distance'] / \ df_gpx.diff_time.apply(lambda x: x.seconds)*3600