GPXファイルをpythonで可視化するライブラリとWebアプリ

これまでの記事をベースにした、GPXファイルを分析するpythonライブラリgpxdfを作成した。

pip3 install git+https://github.com/kurama8103/gpxdf

とターミナルに入力するとインストールできる。

該当Githubページはこちら
https://github.com/kurama8103/gpxdf

過去記事はこちら art-of-lives.hatenablog.com art-of-lives.hatenablog.com art-of-lives.hatenablog.com



また、GPXファイルを取り込みブラウザに経路を表示するアプリを作成した。

https://gpx-map.herokuapp.com/

ファイルを選択して"Create Map"を押すと地図にルートを表示する。
なお、ファイルを何も選択せずに押すとサンプルファイル(しまなみ海道)が表示される。 f:id:kurama_sk:20200831213059p:plain

GPXファイルをpythonで分析する3(速度グラフと地図への表示)

dfは前々回のGPXファイルを読み込んだpandas.DataFrame。
df_tは前回の速度計算したpandas.DataFrame。

# 速度推移グラフ
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(df_t.query('velocity!=inf')['velocity']) # 速度の分母が0だと無限大になるので除外

# 経路イメージ
plt.plot(df.longitude, df.latitude)

# 地図への表示
import folium
df_p = df[['latitude', 'longitude']]
map = folium.Map(location=(df_p.iloc[0]+df_p.iloc[-1])/2, zoom_start=6)
folium.PolyLine(df_p).add_to(map)
map.save('out.html')

out.htmlの例:
f:id:kurama_sk:20200831213059p:plain

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

GPXファイルをpythonで分析する1(取り込みとDataFrame化)

  1. GPXファイルを取り込む(# parse)
    gpxpyというライブラリを使うのが便利。gpxpy.parseでファイルをトラック、セグメント、ポイントといった構造化データとして扱える。
  2. 取り込んだデータをリスト化(# to list)
    parseしたデータ(gpx_p)は、track > segment > point と入れ子になっておりループ処理で取り出す。pointの中にlatitude, longitude, elevation, timeなどのデータが含まれている。
  3. pandas.DataFrameに変換(to pd.DataFrame)
    速度計算やグラフ化など何かと扱いやすいため変換しておく。列名も付加。
import gpxpy
import pandas as pd

# parse
gpx_file = open(filename, 'r')
gpx_p = gpxpy.parse(gpx_file)

# to list
gpx_list = []
for track in gpx_p.tracks:
    for i, segment in enumerate(track.segments):
        for point in segment.points:
            gpx_list.append([point.latitude, point.longitude,
                                point.elevation, point.time, track.name, i])
# to pd.DataFrame
colname = ['latitude', 'longitude',
            'elevation', 'time', 'trackname', 'segment_no']
df = pd.DataFrame(gpx_list, columns=colname)

パック旅行時のサクララウンジへの入り方

パック旅行時のサクララウンジへの入り方

JALは空港にサクララウンジを設置しており、所定の条件を満たすと利用できる。
条件を満たしていてもJALを使った旅程なら常に使えるというわけではない。
例えばじゃらんなどのパック旅行を使うときには注意が必要。

以下抜粋

ご予約時にお得意様番号をご登録いただき、当日ラウンジ受付に設置されているリーダーに搭乗媒体*1をタッチするとご入室いただけます。 CLUB ESTカードのご提示*2でご同行者1名様もご入室いただけます。

*1:搭乗券またはeチケットお客様控の2次元バーコード、ICカード、ICケータイなど。
*2:Apple Pay登録後にモバイル端末上で表示されるカード券面画像のご提示では対象となりません。必ずJALカード(プラスチックカード)をご提示ください。

ラウンジに入室するには予約時にマイレージ番号を登録しておかないといけない。
ちなみにESTの方にしかこの注意事項は見つけられなかったがESTは回数制限がある関係だろうか。

ただし予約時に登録していない時は、当日に空港で登録すればラウンジが利用できる。

そもそもマイレージ番号を予約時に登録するのはステータスと当日の搭乗情報を紐づけるため。
なので空港のチェックイン機でマイレージ番号(JALカード)と搭乗情報(予約番号)を紐づければ良い。

こうすることで問題なくラウンジに入ることができた。

Go To トラベル事業のポイント

Go To トラベル事業の要点

  • 国内旅行代金の50%相当額を還元。上限は2万円(1人1泊あたり)。50%還元の内訳は、35%が旅行代金割引、15%は地域共通クーポンでの還元。ただし7/24~8/31までは35%の旅行代金割引のみで、後日還付手続きが必要。
  • 対象となる旅行料金は主に宿泊料金。交通機関も対象とするには宿泊とセットにする必要がある。
  • 申し込み方法は、旅行代理店・予約サイト経由(宿泊・日帰り問わず)。具体的な旅行業者は7月半ばごろから登録開始となるので現段階では決まっていない。
  • 連泊制限や利用回数の制限はなし。

観光庁のHPに概要とFAQが掲載されており、以上はそこからの抜粋。

www.mlit.go.jp


当事業の還元をフル活用しようとすると宿泊+交通機関のパックという形になる。 パックにおける交通機関は、飛行機や電車などの公共交通機関が主となり、自動車など感染リスクの低い手段は使い勝手がよくないではないだろうか。

足元、新規感染者が増加している中でこの事業を決行するようだが、まだ観光ムードにはほど遠い段階だと感じられる。
しばらくは観光というよりかは、遠方への用事に伴い当事業を利用するといったケースも多いのでないかと予想する。

モバイルプロジェクター(Anker Nebula Capsule II)と三脚の相性の良さ

家でプロジェクターを使い、大画面で映像を投影したいニーズはそれなりにあると思う。
Anker Nebula Capsule IIはそのようなニーズにおすすめできる。

  1. オートフォーカス・キーストーン補正
    最も重要なポイント。モバイルプロジェクターは場所を変えることが多く、ピントを合わせるのは頻繁にはないとはいえ手間になる。モバイルであるならオートフォーカスの有無はかなり重要である。
    キーストーン補正は斜めに投影した時に歪みを補正する機能。スクリーンに対して左右に回転した時は補正してくれないが、上下の場合は補正する。この機能のおかげで設置の自由度がかなり広がり、机の上にプロジェクターを置いて壁に投影するときなどに特に役に立つ。上下に投影するときは三脚があるとかなり便利。天井投影もしやすくなる。 f:id:kurama_sk:20200509203822j:plain

  2. コンパクトなサイズ
    イメージとしては小さめの水筒といった感じ。重さも740gとずっしり感はあるが、安定感もある。直径8cm程度で邪魔にならない。

  3. すっきりとしたインターフェイス
    電池を内蔵しており電源コードなしで使う事が出来るため、ケーブル類がなくすっきりさせることができる。 YoutubeNetflixなどはプロジェクター単体で見ることできるほか、Android OSが入っているためVLC等のアプリでファイルサーバー上の動画も無線で見ることができる。
    また、USB-AがありコンパクトなUSBメモリを使う事で多くの動画を保存することができる。 もちろんHDMIでの有線接続も可能。

  4. スピーカー内蔵
    8Wスピーカー内蔵。単体でもスピーカーとして使う事ができる。

明るさは200ANSIルーメンと気を付けるべき点はもちろんあるが、少し照明の明るさを落とせば十分に見やすい。オフィスやカーテンの開いている昼の部屋などのよほど明るい部屋では厳しいと思う。

税込み6万円とそれなりの値段がするがモバイルプロジェクターとしてはとても使いやすい。繰り返しになるが1.のオートフォーカス・キーストーン補正が重要である。