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ハウスの上空

GoogleEarth COM API

GoogleEarthComTest.exeを起動して「Go to DNP」ボタンを押すと、DNPハウスに着く。



これが今回作ったGUI。現在のカメラ位置を取得したり、指定した位置にカメラを移動させたりする。

Controller of GoogleEarth COM API

ビデオの時には付けていなかったがスピード調整バーもつけてみた。

■プログラミングの準備

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上に表示できるだろうな。

ちょっと俺の使いたい用途には通信速度が重すぎるけど。