お疲れ様です。本日は島根に復帰して最初の土曜日であり、天気も微妙に曇りでしたので家で先日届いた荷物の片付けなどを行いました。東京で買ったテレビを設置したり、PlayStation4 を設置したりと割と忙しかったのです。
夜になって片付けもひと段落したので、最近飛行機に乗った時に記録していた GPS データを mac に取り込んで確認してみました。
Oh...
何度か島根と東京を行き来したときのデータが消さずに追記されていたようです。単に前のを消してから記録していなかっただけですね。
そもそも何をやっている?
私が飛行機に乗る時に GPS レシーバを持って乗り込んでいるのです。詳細は以下の記事を参照ください。
簡単に言えば飛行機に乗った時にどこから離陸して、どのあたりを飛んでどの滑走路に着陸したかを記録しているのです。iPhone でやってもいいのですがバッテリの問題などから専用の GPS ロガーを 1 万円くらいで買って利用しています。
プログラムで分割
詳しく Google Earth を見てみると、どうやら 2016/3/5 に仕事で島根へ行った時の記録からずっとそのままでした。2 往復半くらいです。Google Earth 上からもいじれるようなのですが、いかんせん似たような場所を移動しているのとポイントの点が多すぎるのでプログラムでやるしかないと思いました。
とりあえず Ruby でさくっとスクリプトを書くことにしました。
得意の Java でもいいんですが、XML 読み込みが面倒なんです。C/C++ だと早いなぁと思いつつも XML を扱うのは難しいです。そう考えると Ruby はすごいなぁと思います。さくっと数行書けば読み込めますからね。
require 'rexml/document' require 'time' # 読み込む KML ファイルのパスの定義 KML_FILE_PATH = "/Users/xxxxxx/Desktop/2016-04-16 14_13_44 +0000.kml" # KML の読み込み doc = REXML::Document.new(open(KML_FILE_PATH)) # 最上位層からタグをたどっていく doc.elements.each('kml/Document/Folder/Folder') do |element| # 各トラックの名前を取得 puts element.elements['name'].text # そのトラックの開始日時 # m-241 で記録される日時は UTC のため JST に変換する必要がある begin_time = element.elements['TimeSpan/begin'].text begin_time_jst = Time.parse(begin_time).getlocal puts "記録開始日時(JST):#{begin_time_jst}" # そのトラックの終了日時 end_time = element.elements['TimeSpan/end'].text end_time_jst = Time.parse(end_time).getlocal puts "記録終了日時(JST):#{end_time_jst}" end
うーん。これだけで XML 読めるのがスゴイ。タグを上から辿って取得した日時を UTC から JST に変換しただけ。これを実行すると、
track-1 記録開始日時(JST):2016-03-05 06:29:23 +0900 記録終了日時(JST):2016-03-05 07:23:22 +0900 track-2 記録開始日時(JST):2016-03-05 09:57:33 +0900 記録終了日時(JST):2016-03-05 11:57:11 +0900 track-3 記録開始日時(JST):2016-03-07 19:03:02 +0900 記録終了日時(JST):2060-09-25 13:18:50 +0900 track-4 記録開始日時(JST):2016-04-09 14:35:53 +0900 記録終了日時(JST):2016-04-09 16:14:13 +0900 track-5 記録開始日時(JST):2016-04-10 19:10:03 +0900 記録終了日時(JST):2016-04-10 20:52:13 +0900 track-6 記録開始日時(JST):2016-04-16 14:05:33 +0900 記録終了日時(JST):2016-04-16 16:58:13 +0900
こんな感じで記録された日時が取得できます。
続きます。