小ネタ 2009-012

GoogleMaps/ストリートビュー/O3Dを使ったWindowsアプリのサンプル

GoogleMapsやGoogleストリートビューの表示内容を、Windows上のアプリから制御するソフトを作ってみた。(2009-05-05)

以下のような応用に使って色々試している。
 ・GPSやウィルコムW-SIMの位置情報との連動
 ・WiiリモコンやWiiFitのバランスボードや、その他ゲームコントローラーとの連動
 ・方位センサー/モーションセンサー/6軸センサーとの連動

これらの応用例は大体動いているのだが、整理できていなかったり他人のソースを丸ごとそのまま使っている部分があったりと少し問題があるため、書き直して公開するまでに暫く時間がかかりそうだ。
とりあえず、表示部分だけサンプルソフトとしてソースコードを公開する。



1. GoogleMapsのサンプル (2009-05-05)

 
 サンプルアプリの実行画面

 動作: 上下左右のキー操作で、表示の中心の緯度経度の座標が動く。


 [ GoogleMapsサンプルの実行ファイル+source code ... googlemaps_test_v01.zip (download) 80KB ]

 (後日加筆2009-06-12 JavaScript部分を記述したHTMLファイルがダウンロード後に実行できない問題があったので修正した。)
 [ GoogleMapsサンプルの実行ファイル+source code ... googlemaps_test_v02.zip (download) 80KB ]


 ビルド方法:
  build_vc?.batでコンパイラを起動してビルドすることができる。
  vc7 (Visual C++ 2003)、vc8 (Visual C++ 2005)、vc9 (Visual C++ 2008)のどれかが必要。ただし、ExpressEditionではビルドできない。
  Visual Studio 2008の場合にVisual C++のみインストールするとコマンドライン版cl.exeがインストールされないという不具合があるようなので注意。


(後日加筆2009-6-3) 衛星写真/航空写真の表示は、今回のサンプルには入れていないが、JavaScript部分に数行書き足せばできると思われる。

 単に画像を動かしてるだけなので、Google Static Mapsを使えばこんな面倒なことをしなくてもよかったのかもしれない。次のサンプルのストリートビューのような使い方をするためには、必要だったのである。




2. Googleストリートビューのサンプル (2009-05-06)

 
 サンプルアプリの実行画面

 動作: 上下左右のキー操作で、表示する方位yawとピッチ角が動く。


 [ StreetViewサンプルの実行ファイル+source code ... streetview_test_v01.zip (download) 80KB ]

 (後日加筆2009-06-12 JavaScript部分を記述したHTMLファイルがダウンロード後に実行できない問題があったので修正した。)
 [ StreetViewサンプルの実行ファイル+source code ... streetview_test_v02.zip (download) 56KB ]


 IE (Internet Explorer)のバージョンに依存して、動かない場合がある。
 IE6環境では動作確認できた。

 (後日加筆 2009-11-29)
 正常に動かせなくなってしまった。
 StreetViewの画面が真っ黒になってしまう場合、IEのキャッシュをクリアすることで、表示できるようになった。
 StreetViewの画面の表示が動かせないという症状について、画面下部のYawとPitchの数字が変化しても、その数値の向きの風景に更新されない。Googleのstreetviewが何か仕様を変えたりしたのか、何かの制限に引っかかったりしてるのだろうか?

 (後日加筆 2010-06-06)
 動かなかった原因を調べて、JavaScript部分を修正した。

 [ StreetViewサンプルの実行ファイル+source code ... streetview_test_v02a.zip (download) 56KB ]



3. GoogleSkyのサンプル (2009-05-16)

 
 サンプルアプリの実行画面

 動作: 上下左右のキー操作で、星空表示の中心の緯度経度の座標が動く。

 [ GoogleSkyサンプルの実行ファイル+source code ... google_skymap_test_v01.zip (download) 80KB ]

 (後日加筆2009-06-12 JavaScript部分を記述したHTMLファイルがダウンロード後に実行できない問題があったので修正した。)
 [ GoogleSkyサンプルの実行ファイル+source code ... google_skymap_test_v02.zip (download) 56KB ]

 画面が見づらいのだが、星空が表示されている。こんな感じにレイヤーを追加して星座の星と星をつなぐ線の表示を追加表示させたりすれば、もう少しそれっぽく見えると思われる。DS星空ナビのような表示ができると面白そう。 あと、Google Skymapとかポケット羅針盤とか。




4. Google Earth プラグインのサンプル (2009-05-16)

 
 サンプルアプリの実行画面

 動作: 上下左右のキー操作で、表示の中心の緯度経度の座標が動く。

 [ Google Earth プラグイン サンプルの実行ファイル+source code ... google_earth_test_v01.zip (download) 80KB ]

 (後日加筆2009-06-12 JavaScript部分を記述したHTMLファイルがダウンロード後に実行できない問題があったので修正した。)
 [ Google Earth プラグイン サンプルの実行ファイル+source code ... google_earth_test_v02.zip (download) 56KB ]

 このソフトは、Google Earthプラグインをインストールしないと動作しないので、インストールしてから起動すること。
 初回の起動に時間が結構かかったりするのだが、その時、初期表示位置がずれることがある。ずれの原因は不明。

 ちなみに、単体のGoogleEarthアプリを外部から制御するためのサンプルも以前試しに作ったのだが、制御用アプリとGoogleEarthアプリの窓を2つ開いて操作すると、フォアグラウンドの窓が切り替わったりしたときに問題が起きたりするので、使いにくかった。




5. Google o3d プラグインのサンプル (2009-05-23)

 
 サンプルアプリの実行画面

 動作: 上下左右のキー操作で、カメラの位置が極座標での緯度経度方向に動く。

 [ Google o3d プラグイン サンプルの実行ファイル+source code ... google_o3d_test_v01.zip (download) 187KB ]

 (後日加筆2009-06-12 JavaScript部分を記述したHTMLファイルがダウンロード後に実行できない問題があったので修正した。)
 [ Google o3d プラグイン サンプルの実行ファイル+source code ... google_o3d_test_v02.zip (download) 56KB ]

 このソフトは、Google o3dプラグインをインストールしないと動作しないので、インストールしてから起動すること。

 当初、こちらのティーポットのCGモデルを動かすgoogle codeのサンプルコードをベースにしようとしていたのだが、モデルのロード先のフォルダ名に日本語が含まれているとロードできなかったり、いろいろ問題があったのでシンプルなコードをベースにした。

 以前に3Dのグラフィック表示したときはOpenGLを使った。SDL経由で使ったり、GLUTやfreeGLを使ったりした。それに比べてo3dが使いやすいかどうかというと、ちょっと難しい感じだ。参考書とかまだ無いからかもしれないが。 あと、o3dはある程度以上の良いグラフィックカードを要求するので、古いPCだと、o3d自体が動かなかった。


 (後日加筆2010-06-24)
 o3d路線変更で、今までの方式は捨ててしまうそうだ。o3dには当面は関わらないほうがよさそう。
 ・Google、「O3D」で路線変更――プラグインからJavaScriptライブラリに



動作原理

 IEコンポーネントをアプリに組み込んでIE互換ブラウザを自前で作って、JavaScriptを記述したhtmlファイルを表示させている。

 WindowsアプリからJavaScriptへ値を渡すために、当初はAjax方式で、Apache等のWebサーバー上のXMLファイルを書き換えて渡していた。
 IE限定の方法だが、Webサーバー無しでローカルのファイルの内容を読み込むことができたので、Webサーバーを介さずにローカルのファイルから値を読ませて、設定パラメータを渡している。

 htmlファイル内のJavaScriptでは、一定時間毎に設定パラメータ値を読み出してGoogleMapsやStreetViewに渡している。