GPSログをATGoogleMapsで(GPX解析エンジン作成編)
前回の妄想jから、PythonとPyXML、PILによるGPXログファイル解析エンジンを作成。エンジンっていっても大それたもんじゃないんですけどね。
【環境】
- Zope-2.9-6793 (for Win)
- plone-2.5.2 (for Win)
- PyXML-0.8.4 (for Win)
さて、前回の妄想 を元にまずはGPXファイル解析+データ加工エンジンの作成を。環境はテストなので自PCにPloneとPyXMLをインスコして。
GPXファイル解析エンジン
Python、PyXML、PILをロクに扱ってないのでちょっと作っては実験と紆余曲折しつつ、一週間ぐらいせこせこやってなんとか形に。PyXMLでのデータ抽出はあらかた出来てたので、その他の課題であった、記録されている時間のJST変換、緯度経度の差から距離、及び時速を算出するにも成功。さらにPILでグラフの自動生成にも成功。
テストコードでの部分SSはこんな感じです(←)。グラフとマップの元GPXファイルが違いますがあくまでイメージということで。
あとPolylineだけじゃ味気ないのでSTARTとENDでMarkerを付けようかなと。
ちなみに、GoogleMapsの画像は trk2googlemaps というWinアプリで生成されたhtmlにヲレ作成解析エンジンで作ったpointリストをコピペして表示させてみたものです。
GPXトラックログは <trkseg> というタグ(エレメント?)で区切られてるのですが全部一色端にまとめてます。あと、データ破棄条件としては、緯度が0もしくは経度が0のとき。両方存在しない場合も捨てるぐらいでほぼ生トラックログをトレースするという仕様。
んなもんだから、GPS捕捉がバタついてぼんぼん飛んでるのも計算に入れてるのでそうなると最高速度とかマッハを越えていたりと結構すごいことになってますww
あと、緯度と経度の差から移動距離を算出する方法は精度を厳密にするにはなんだかえらい数式になるらしいんですが、比較的簡単なものを発見したのでそれを採用。誤差的には日本国内の範疇であれば気にすることない模様。そんなわーるどわいどなログをブチ込んだら鯖マシンとScriptが動く自PCが死ぬ・・・。
1500ポイントぐらいの解析だけでも結構時間が掛かる。13秒ぐらい? スピードを求めるのであればPyXMLで解析するんではなくて自前のロジックを組むしかないかもしれない。
速度、高度グラフイメージ作成
↑でもちょっとふれましたが、これも形になりました。もう、ImageDraw.line()、polygon() 駆使しまくりでかなりPILマンセー状態です。
グラフの速度とか高度とか移動距離とかの各目盛は各最大値をと目盛の最小px数を基準にして変化するようにしました。たとえば、速度が最大 100km/h で、 目盛最小px数が 8px だったら 目盛は5km/h 単位に入れるとか、200km/h だったら10km/h 単位とか。
基本的にメートルを基準にして1メートル単位のpx数(かなり細かい小数点になる)を算出してセコセコやってるのでグラフの精度は悪いかもしれませんが、まぁ見た目的におkということでこれでよしとしますww
あとグラフの目盛数値(10,20・・・[km/h]とかの文字)は、ImageDraw.font() を使おうと思ったのですがFontの設定方法がさっぱり分からず、結局文字イメージを描いた画像を用意してそこから crop() → paste() する方法を採用。
一応このテスト解析エンジンソースも添付しときます。あまりにも汚いコードというのはキニシナイ。加えてコメントの英文がぐちゃぐちゃなのも華麗にスルーして下さいwwww
次は・・・
これで取りあえずエンジン作成はfix。・・・ですがこれからがヤバイ。Ploneプロダクト作成(改造?)と格闘です。まずは既存ソース解析からだなぁ。
【参考URL】
- ・GMT→JST変換 for Python
-
6.10.4 datetime オブジェクト(Python リファレンス)
6.10.6 tzinfo オブジェクト(Python リファレンス) - ・画像自動生成関係
- PILチュートリアル — nagosui.org
Color, Image : kei@sodan
Python Imaging Library Handbook - ・緯度経度からの距離算出
-
5.6 math -- 数学関数(Python リファレンス)
轍 ~自転車的なる日記~ 緯度・経度から距離を求める方法
- ・Ploneプロダクト作成関係(まだ調べ中・・・)
- RichDocument How Toの翻訳