Google EarthをCurlで操作

今回は、Google EarthをCurlからGoogle Earth COM APIを利用して、操作する方法を説明していこうと思います。これを用いることで、Google Earth上を自由に移動・観光したり、3D建物を配置したり、画面のスクリーンショットを取得することができます。ここではGoogle Earth4.3のインストールを前提としています。

まずは、Google Earthをインストール後、以下のコマンドにてCOMレジストリの登録を実施します。

“C:Program FilesGoogleGoogle Earthgoogleearth.exe” /RegServer

 

コーディング(Google Earth COM API)

CurlでGoogle Earth COM APIを利用するには、ActiveXObjectを利用します。ActiveXの扱い方についてはこちらのページを参考ください。

まずは、CURL.GRAPHICS.ACTIVEXパッケージをインポートし、ActiveXObjectオブジェクトを生成します。この際、ProgIdにGoogleEarth.ApplicationGEを指定します。

{import * from CURL.GRAPHICS.ACTIVEX}

{def ge = {ActiveXObject ProgId = “GoogleEarth.ApplicationGE“}}

これにより、IApplicationGEオブジェクトが生成されます。このオブジェクトからバージョン情報を取得する簡単なサンプルは以下の通りです。(IApplicationGEのゲッターであるVersionMajor、VersionMinor、VersionBuild、VersionAppTypeを利用)

{output ge.VersionMajor & “.” & ge.VersionMinor & “.” & ge.VersionBuild}
{output ge.VersionAppType}

 これだけでは面白くないので、カメラ位置を設定して、いろいろな場所へ移動できるようにしてみます。まずは、カメラ・オブジェクト(ICameraInfoGE)をIApplicationGEのGetCameraメソッドから取得します。このICameraInfoGEのいくつかのセッターを設定し、再度IApplicationGEオブジェクトにカメラをセットすることで場所の移動が可能となります。

|| カメラの取得
def ge-cam = {ge.GetCamera 0}

|| カメラのプロパティに値をセット
set ge-cam.FocusPointLatitude = 35.3800 || 緯度
set ge-cam.FocusPointLongitude = 139.0000 || 軽度
set ge-cam.FocusPointAltitudeMode = 2 || 1 or 2
set ge-cam.FocusPointAltitude = 1000.0 || 高度(meter)
set ge-cam.Range = 1000.0 || カメラとフォーカスポイントの距離(meter)
set ge-cam.Tilt = 80.0 || 傾き 
set ge-cam.Azimuth = 90 || 方位

|| カメラをIApplicationGEにセット
{ge.SetCamera ge-cam, 0.5}

また、目的地の場所から移動することができます。これにはGetFeatureByNameメソッドを利用し、IFeatureGEオブジェクトを取得し、存在すればSetFeatureViewで移動します。例えば以下のようにディズニーランドに飛んでみます!

def feature = {ge.GetFeatureByName “アメリカ フロリダ州、ディズニーランド”}
{if-non-null feature then
    {ge.SetFeatureView feature, 10.0} || 場所の移動
    {ge.ShowDescriptionBalloon feature} || バルーンの表示
}

実行しますと、ディズニーランドに飛びます。

g-earth01.jpg

Google Earth上の画面左の検索・場所・レイヤを操作することもできます。これにはSearchController(検索)やGetMyPlace(場所)等を用いて、操作できます。例えば検索の例は以下の通りです。

def search = ge.SearchController || ISearchControllerGEの取得
{search.Search “東京タワー”} || 検索
def feature-collection = {search.GetResults} || 検索結果の取得 
{dump {feature-collection.Item 1}.Name}

さらに「場所」にある”観光”名所をツアーすることもできます。これには、以下のようなコードにて実現できます。

def tour = ge.TourController || ツアーオブジェクト
{tour.PlayOrPause} ||画面左の「観光」をツアー

最後に3DオブジェクトをGoogle Earth上に配置する方法を記載します。Google Earth上に配置されるオブジェクトはKML(Keyhole Markup Language)というフォーマット形式で記述された情報を元に作成されます。これにはGoogle SketchUpを利用し、作成することができます。またGoogle 3D Galleryからダウンロードすることもできます。

ここではそれらから作成されたファイルをCurlで開きます。コードは以下のようになります。(たった一行) 

{ge.OpenKmlFile “C:\doc.kml”, true}

これを実行しますと以下のように3Dオブジェクト(車)が配置されます。

g-earth03.jpg