GPXファイルをpythonで分析する2(速度計算)

df_gpxは前回説明した、GPXファイルを読み込んだpandas.DataFrame。
今回はdf_gpxから速度などを計算したdf_tを作成する。

  1. 緯度経度データから距離を計算
    GPSデータから距離を計算するにはいくつかの方法があり今回はVincenty法を用いる。
    gpxpyライブラリのdistance関数を用いる。
    distance関数は2地点の緯度と経度から距離を計算する。
    distance([緯度A、経度A],[緯度B、経度B])の形で利用する。
    配列に一気に適用できなそうだったので行ごとにapplyさせている。

  2. 距離と時間から速度を計算
    時間は累積経過時間(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