GoogleEarth COM APIというのを見つけたので、動かしてみた。超簡単だった。10行ぐらい書くだけでグリグリ動かせる。
COM APIは、C++やC#やWSHなど大体何からでも叩くことができるWindowsの仕組みの一つ。先にGoogleEarth.exeを起動させておいて、自作のプログラムからメッセージ(カメラの座標など)を送って操ったり、GoogleEarth.exeの公開している変数を読みとったりできる。
ActiveXの様に、自作のFormの中にGoogleEarthを読み込む事はできない。
■作ったアプリ
Source code, exe (VS2005 C#2.0)
とりあえず、VS2005 C#で作ったアプリでGoogleEarthをコントロールしてみた
カメラの緯度・経度・高度・傾斜・向きなどを指定して移動出来る。ここは奥出研究室があるDNPハウスの上空
GoogleEarthComTest.exeを起動して「Go to DNP」ボタンを押すと、DNPハウスに着く。
これが今回作ったGUI。現在のカメラ位置を取得したり、指定した位置にカメラを移動させたりする。
ビデオの時には付けていなかったがスピード調整バーもつけてみた。
■プログラミングの準備
B-Wiki – Google Earth COM API – Kyosho.netが参考になった。
とりあえずGoogleEarth最新版をインストールしてから
“C:\Program Files\Google\Google Earth\googleearth.exe” /RegServer
をコマンドプロンプトから実行すると、
COMが登録されるので、VisualStudioで「参照の追加」をする
■カメラを動かす
まずGoogleEarthへの接続を作る
usingEARTHLib;
IApplicationGEgEarth=newApplicationGE();
次に新しいカメラ位置を作って、GoogleEarthにセットする
CameraInfoGEcam=newCameraInfoGE();
cam.FocusPointLatitude=35.3874;//緯度
cam.FocusPointLongitude=139.4285;//経度
cam.Range=100;//高度
cam.Tilt=70;//傾斜
cam.Azimuth=-49;//方位
gEarth.SetCamera(cam,0.1);
現在のカメラの位置も取得できる
ICameraInfoGEcam=gEarth.GetCamera(1);
doublelat=cam.FocusPointLatitude;//緯度
doublelon=cam.FocusPointLongitude;//経度
まあこんな感じで、割と簡単に動かせる。
詳しくはAPIドキュメントを参照。
多分KMLを指定して読み込ませられるから、好きなものをGoogleEarth上に表示できるだろうな。
ちょっと俺の使いたい用途には通信速度が重すぎるけど。