Google Earth COM API 概要 †
Google Earth COM APIが公開されています。
これを利用したプログラムは、Google Earthと通信して、命令を出したり、情報を取得できるようになります。
Google Earth COM APIをご覧の通り、現時点ではearth.idlとドキュメントが提供されています。
以降に簡単な説明をしています。 後半は、数種類の開発言語でGoogle Earthと通信するサンプルを用意しました。 サンプルはJScript, VBScript, VBA, C#版です。 ソースとバイナリもダウンロードできるようにしていますので、開発環境構築後の確認などにご利用ください。
Google Earth とは †
Googleが提供する地球3Dビューアです。 無償版があるので、説明を読むよりとりあえずダウンロードして使う方が理解が早いでしょう。
COM とは †
COM(Component Object Model)は、プログラム部品の規約です。
COMに準拠したプログラムは、他の開発者が開発言語を自由に選択して再利用することができます。
理解し易いかは別として、以下が代表的なサイトかな。
COM APIで何ができるか? †
Google Earth COM API は起動しているGoogle Earthと通信するためのルールです。
COM APIのルールはidlファイルで定義されており、多くの開発言語はこれを理解できます。
即ち、COM APIのルールに従えば、以下の図のように自作のプログラムはGoogle Earthと会話して、指示を与えたり、情報を取得できたりします。
大きく以下の指示・情報取得ができます。
- 視点(ビュー)の変更、情報取得
- 表示位置(地図座標)の取得
- KMLの読み込み
- 画面のスナップショット保存
応用例 †
Google Earth COM API Samples?に各クラス毎のサンプルを用意する予定です。
利用するための準備 †
Google Earth COM APIを使ったプログラムをPC上で実行する前に、準備が必要です。
手順は以下です。
- Google Earth のインストール
- Google Earth のCOMレジストリ登録
まず、Google Earthのインストールはオフィシャルサイトでダウンロードして行なってください。無償版が公開されています。 次に、以下のコマンドを実行してCOM登録してください。(デフォルトのインストール先の場合)
"C:\Program Files\Google\Google Earth\googleearth.exe" /RegServer
WSHから動作確認する方法 †
WSH?(Windows Script Host)でGoogle Earthを操作できます。 WSH?は、Windows 2000/XPならば標準的にインストールされているそうです。
Sample code(LaunchGEJs.js) †
サンプルは、Google Earthからタイプとバージョンを取得して、表示します。
var ge = WScript.CreateObject("GoogleEarth.ApplicationGE");
WScript.Echo( "Application Type : " + ge.VersionAppType );
WScript.Echo( "Version : " + ge.VersionMajor + "." + ge.VersionMinor + "." + ge.VersionBuild );
実行 †
jsファイルのアイコンをダブルクリックしても起動できますが、以下のようにDOSプロンプトから起動してみます。
cscript LaunchGEJs.js
Sample code(LaunchGEVbs.vbs) †
サンプルは、Google Earthからタイプとバージョンを取得して、表示します。
Set ge = WScript.CreateObject("GoogleEarth.ApplicationGE")
WScript.Echo "Application Type : " & ge.VersionAppType
WScript.Echo "Version : " & ge.VersionMajor & "." & ge.VersionMinor & "." & ge.VersionBuild
実行 †
vbsファイルのアイコンをダブルクリックしても起動できますが、以下のようにDOSプロンプトから起動してみます。
cscript LaunchGEVbs.vbs
考察 †
JavaScript?, VBScriptで記述できました。
これくらいの動作ならば、kmlから起動するのと大差ないです。
今後は、もっと柔軟な動作ができる例を書いていこうと考えています。
VBA(Excel)から動作確認する方法 †
VBA(Visual Basic for Applications)でも使えました。
以下はExcelでの手順とサンプル、実行結果です。
手順 †
Excelを起動して、VBEを起動します。
VBEのメニューにある参照設定を選択してダイアログを表示します。
利用可能なCOM オブジェクト一覧が表示されます。
"EARTHLib"がリストされているはずなので、チェックして設定してください。
最後にオブジェクトブラウザを開いてみましょう。
Google Earth COM APIのインタフェース一覧を確認できます。
あとは、ソースをゴリゴリ書いていくだけです。
Sample code †
VBAの一部を以下に掲載します。
実装したExcelファイルは公開していませんので、各自作ってみてください。
'Google Earth と通信して、情報を取得する。
Sub LaunchGE()
Set ge = New EARTHLib.ApplicationGE
MsgBox "Application Type : " & ge.VersionAppType & vbCrLf & _
"Version : " & ge.VersionMajor & "." & ge.VersionMinor & "." & ge.VersionBuild _
, , "Google Earth Infomation"
End Sub
実行 †
上記サンプルをボタンから起動するように実装してみました。 ボタンをクリックすると、Google Earthのタイプとバージョンを表示します。
考察 †
ExcelやAccess, Word などの Office製品から Google Earth を利用できることは、大きな意味があるでしょう。 各自が管理している住所データとGoogle Earthを組み合わせることが可能だからです。 実際には管理しているのは"住所という文字列"であって、Google Earthで扱える"座標"とは異なるため、対応表というか辞書が必要になってくるでしょう。
たしか、住所と座標の対応はどこかで取れそうなので、それをどうするかか。。。 次の課題が見えてきた!
.NET Frameworkから動作確認する方法 †
EARTHLib.dllの作成 †
以下の手順で、earth.idlからC#が参照するDLLを作成します。
- midl.exeでearth.tlbを生成
- tlbimpでEARTHlib.dllを生成
まず、midl.exeを使ってearth.tlbを生成します。
midl.exeはMicrosoft Platform SDK?に入っています。
midl.exe /newtlb earth.idl
つづいて、tlbimp.exeを使ってEARTHLib.dllが生成されます。
tlbimpはMicrosoft .NET Framework SDK?に入っています。
tlbimp.exe earth.tlb
Sample code(LaunchGE.cs) †
Google Earthのタイプ(無償版 or Plus)とバージョンを取得するサンプルです。
using System;
using EARTHLib;
namespace net{ namespace kyosho{
class LaunchGE
{
static void Main(string[] args)
{
Console.WriteLine("Launch GE!");
IApplicationGE ge = new ApplicationGE();
Console.WriteLine("Application Type : " + ge.VersionAppType.ToString());
Console.WriteLine("Version : " + ge.VersionMajor + "." + ge.VersionMinor + "." + ge.VersionBuild);
}
}
}}
コンパイル †
LaunchGE.csとEARTHLib.dllを同じフォルダに保存して、コンパイルします。
csc.exe /o /r:EARTHLib.dll LaunchGE.cs
実行 †
LaunchGE.exeができるので、実行してみましょう。 こんな風にデータを取得して表示してくれます。
LaunchGE.exe
考察 †
サンプル実行時にすでにGoogle Earthが起動している状況ならば、そこと通信するようです。
起動していない場合は、勝手に起動してくれます。
また、起動直後に視点のパラメータを取得することはできませんでした。
起動後、しばらくしてからならば取得できました。
うーん、起動後にGoogle Earthがイベントを出して欲しいなぁ。
添付ファイル:
Last-modified: Sun, 15 Apr 2007 18:08:45 JST (1237d)









