このエントリーをはてなブックマークに追加

番外編:au携帯のGPSで走行ログ&Googleマップに貼り付け

自転車で走ったら、どこを走ったか記録を残したくなります。
この世の中には、そういった用途に使用する機器として、GPSレシーバというものがあるらしいです。
例えば楽天で検索するとこんな感じでいっぱいあります。

ただ、見てみるとわかるのですが、結構な値段がします。そもそもショボ太より高いというのはちょっと考え物です。
で、考えたんですが、最近の携帯電話ってGPS機能が付いてます。これを使えば走行ログが取れるのではないかと思って調べてみました。

調べたところ、au携帯のアプリに「地図ビューアー」というのがありました。
最近の端末には標準で付いてるらしいですが、自分の使ってるW44Sにはついてませんでした。
ない場合は、「アプリを探す」から「地図」で検索しインストールできます。アプリ自体は無料です。

この地図ビューアですが、本来は別途地図をダウンロードし、それを見ながら歩き回ったりするような用途を想定しているみたいです。
ただ、今回は本来の地図表示は無視して、おまけ機能である「簡易ハンディGPS」機能を使います。
簡易ハンディGPS機能を使うと、定期的(約10秒ごと)にGPS測位してそのログをテキストファイルに残してくれます。
まさに今回やりたいことそのものだったりします。

実際の使い方とかはググってもらうことにして、ログのテキストファイルですが、

本ファイルは、地図ビューアーにより出力されたGPS情報ファイルです。

出力日時:2008/10/29 19:50:35 +0900

+++GPSログ+++
909343017,130.409469,33.597736
909343024,130.409275,33.597967
909343032,130.409549,33.597999
909343044,130.409367,33.597757
909343051,130.409334,33.597639
  :
  :

こんな感じの形式です。
「+++GPSログ+++」からあとの行が測位データで、カンマ区切りの左から、タイムスタンプ、経度、緯度です。
ただ、これを見て「うーん、福岡の博多駅の近くか」などと即座にわかる人はかなりの変態だと思います。
地図の上に重ねてみないと何のことやらという感じです。

地図といえばGoogleマップですので、Googleマップに↑のデータを表示させる方法を調べてみたところ、GoogleマップのマイマップにKML形式のファイルをインポートするのが一番手っ取り早そうです。
KML形式は、GoogleEarthやGoogleマップ上に線や目印を表示させるためのファイル形式です。中身は一番シンプルな形式で

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="//earth.google.com/kml/2.1">
<Document>
  <Placemark>
    <name>名前</name>
    <description>説明文</description>
      <LineString>
        <extrude>1</extrude>
        <tessellate>1</tessellate>
        <altitudeMode>clampToGround</altitudeMode>
        <coordinates>
130.409469,33.597736
130.409275,33.597967
   :
        </coordinates>
      </LineString>
  </Placemark>
</Document>
</kml>

こんな感じのXMLです。要は、<coordinates>~</coordinates>の間に経度と緯度をカンマ区切りしたものを並べていくだけです。
ですので、さっきのGPSのログから経度と緯度の部分を切り出して、<coordinates>と</coordinates>の中に流し込めば基本的にはOKです。
(ただしログファイル側のデータにいくつか例外があるみたいです。[参考])

KMLが出来たらあとは、Gooleマップのマイマップに登録です。マイマップを使うには、たぶんGoogleに登録が必要です。
まずは、Googleマップの「マイマップ」から「新しい地図を作成」。


適当にタイトルなんかをつけます。デフォルトでは全世界に公開する設定ですので、まずいなら「非公開」に。その後、「インポート」をクリック


ダイアログが出るので、作ったKMLファイルを選択して「アップロード」


うまくいけばマップ上に軌跡が表示されます。


あとは、保存しておけばいつでも見ることが出来ます。

測位の精度についてはおおむね正確ですが、街中などGPSの電波が届きにくいところはかなり怪しいデータを残します。
例えば、上の図だと、「東京第一ホテル福岡」のあたり、川の上を走ってます(笑)。
専用品を使ったことがないのでこれがどの程度の品質なのか、専用品と比べてどうなのか、ってのはわかりかねるところではあります。

ま、こんな感じで出来ることは出来ます。
が、やってみればわかるんですが、経度と緯度のところを切り出すのって、結構煩雑です。
そこで、私、一応IT系企業で仕事してまして、プログラムが若干組めます。なので、仕事中にこっそり作ってみました。

a2k:auあしあと形式→KML変換君

あしあとファイル形式を簡単なKML形式に変換します。
ついでに平均速度と最高速度を計算し、最高速度が出た場所のポイントを表示します。
ご自由にお使いください。なお、動かすにはJava5以降が必要です。一応Windows専用です。→作り直しました。


マイマップにインポートすると、こんな感じになります。

ある日のデータをとりこんでみました。

速度についてはGPSの測位誤差が大きいと、瞬間的に50km/hなどという、ショボ太と私の足の命に関わるような速度が検出されてしまう傾向があります。
あくまで参考程度ということで。

【a2kちょっと改修】

いろいろ使ってみるといろいろおかしかったので直してます。修正は以下のとおりです。
  • 10秒間隔で測位するのでデータが莫大になり、Googleマップに読み込ませると重くなってしまってました。
    • 直線っぽく走っている場合は間の測位データを間引くようにしました。
    • 信号待ちの際など、あまり動いていない場合は測位データを間引くようにしました。
  • GoogleEarthで読み込むとエラーしてました。
    • 吐き出したKMLにDocument要素が抜けてたので追記しました。
    • 線を地面に這わせて描画させるようにしました。
  • Swingで作り直しました。
    • Macとかでも動くかもです。未確認ですが。
  • 教訓:
    • googleってすごいですね。
  • 使用工具類:
    • auの携帯電話(GPS付き)
    • Java5
    • Velocity1.5
    • Eclipse3.2+VisualEditor
  • 費用:0シェボー(0円)