マイコン工作実験日記

Microcontroller を用いての工作、実験記録

GoogleMapを表示する

2008-02-24 13:29:39 | W-SIM
基地局から取得した緯度/経度情報をもとに、GoogleMapから周辺の地図を取得して表示する機能を加えてみました。



GooleMapといえば、Ajaxの代表的なアプリとして知られていますが、こちらはJavascriptが使えるブラウザを載せているわけではありません。グリグリと、マウスで地図をドラッグしたいわけでもなくて、単に自分の居場所周辺の地図画像をダウンロードしたいだけです。Google APIとか勉強すればイロイロとわかるのでしょうが、面倒なことはしたくありません。緯度経度を指定してGETすると、画像を返してくれるインタフェースがあれば十分です。そう思いながら探してみたところ、こちらのページでmapprintというインタフェースを見つけました。そうです! わたしが欲しかったのは、まさにこの情報です!

Googleの提供してくれるインタフェースの使い方はわかりましたが、そのまま直接マイコンから使えるわけではありません。次のふたつの作業が必要でした。
  1. 測地系の変換 W-SIMの返してくれる緯度経度は測地系としてTokyoを使用しているようですが、mapprintではWGS84を使用しているようです。また、W-SIMが返す座標は、"度:分:秒"形式になっていますが、mapprintでは度数を小数点以下6桁まで指定する形式になっています。
  2. 画像形式の変換 mapprintでは出力の画像形式も指定できるようになっていますが、AT91SAM7Sマイコンで直接処理するには、GIF/JPG/PNGのいずれの形式も荷が重すぎます。

測地系の変換については、「表を使ってズレを求める簡便な方法」が紹介されていたので、この表のデータを使わせていただきました。画像形式については、自宅のLinuxマシンに変換をさせることにしました。マイコンからは、自宅マシンのサーバにアクセスし、自宅マシンが実際にGoogle Mapをアクセスしにいきます。Google Mapから得られた画像を、自宅マシンで12ビットBMP形式に変換してマイコンに返すわけです。

画像形式の変換作業は自宅サーバ側でおこなうことにしたので、マイコン側では位置座標と表示する縮尺を指定して自宅サーバにHTTPリクエストを送信すればいいだけになりました。位置座標はあらかじめ取得されているものを使用することにしていますので、デバック用コンソールから地図表示のコマンドを実行する際には、縮尺を指定すればいいだけになっています。

広域表示にした際の表示例も示しておきます。ちなみに、表示されている場所は前回の記事の緯度経度に基づいたものではありません。きょう見えた基地局が異なっていたのか、前回とは異なる緯度経度が取得できたので、表示場所も異なっています。