使ってみよう! Bing API/SDK

第1回 Hello, Bing Map App!──Silverlightで作るBing Mapsアプリケーション(1)

この記事を読むのに必要な時間:およそ 6.5 分

プラグイン

最初にMap Appの構成について説明します。Map Appはbing.comのSilverlightアプリケーションのプラグインのひとつとして動作します。Map App開発者は,SDKのライブラリーに含まれている特定のクラスを継承したクラスを作成します。これがプラグインとなり,必要な時点でロードされ実行されます。プラグインの以下のような構成になっています。

レイヤー(Layer)

プラグインは,ひとつ以上のレイヤーを持っています。何か情報を表示するためにはレイヤーを作成する必要があり,レイヤー単位で情報を管理します。レイヤーごとに複数のエンティティやオーバーレイ,ひとつのパネルを含んでいます。

エンティティ(Entity)

エンティティとは,プッシュピン図6などの特定の地点を示すポイントや,ルートや領域を表す線や多角形の地図上に表示するアイテムです。

図6 プッシュピン

図6 プッシュピン

オーバーレイ(Overlay)

オーバーレイは,地図上に重ねて表示するボタンなどのUIです。エンティティと異なり地図の移動と一緒に動きません。

パネル(Panel,Expanded Panel)

パネルは,Bing Mapsの左側に表示されている検索結果などを表示するためのUIです。パネルは折りたたみ可能で,またページ全体へ展開もできます。通常表示のときのパネル(Panel)と展開したときのパネル(Expanded Panel)は,プラグイン内では区別して扱います。

今回 作成するMap Appはひとつのレイヤーとプッシュピンを持っています。

プロジェクトの作成

それでは,Map Appを作っていきましょう。プログラミング言語は,C#を使用します。Visual Studioで新規にSilverlight Class Libraryプロジェクトを作成します図7⁠。ここではプロジェクト名をHelloWorldBingMapAppとしました。OKボタンクリック後に表示されるSilverlight のバージョン選択は,Silverlight 4を選択します。

図7 Silverlight Class Libraryプロジェクトの作成

図7 Silverlight Class Libraryプロジェクトの作成

続いて必要なライブラリーを参照します。プロジェクト メニューの「参照の追加」を選択します。Bing Map App SDKをインストールした場所(通常であれば,C:\Program Files\Microsoft SDKs\Bing Map App SDK\libraries)に,下記のDLLファイルがありますので,すべて追加します図8⁠。

  • Microsoft.Maps.Core.dll
  • Microsoft.Maps.Extended.dll
  • Microsoft.Maps.MapControl.Types.dll
  • Microsoft.Maps.Plugins.dll

図8 参照の追加

図8 参照の追加

プラグイン クラスの作成

プラグインは,Microsoft.Maps.Plugins.Pluginクラスを継承したクラスとして作成します。ここではHelloWorldPluginというクラス名にします。Class1.cs ファイルををHelloWorldPlugin.csに名前を変更し,クラス名もHelloWorldPluginクラスに変更します。

usingディレクティブを記述し必要な型をインポートします。

using Microsoft.Maps.Core;
using Microsoft.Maps.Plugins;

そして,Pluginクラスを継承します。

public class HelloWorldPlugin : Plugin
{
}

Pluginクラスには,プラグインの初期化処理を行うInitializeメソッドとMap App GalleryからMap Appを起動したときに呼ばれるActivateメソッドが定義されています。このふたつをオーバーライドします。

public override void Initialize()
{
    base.Initialize();
}

public override void Activate(System.Collections.Generic.IDictionary<string, string> activationParameters)
{
    base.Activate(activationParameters);
}

以上で何もしないプラグインができました。ここに各種機能を追加していきます。

ContractのImportとExport

さて,プラグインからどのように地図を操作したり,情報を表示・取得したりすればよいのでしょうか。Bing Mapsから提供される機能を使用するには,Contractという特定の機能を参照するための仕組みを用います。プラグインクラスにプロパティを定義し,使用したい機能を取り込み(Import)ます。場合によってはプラグインからBing Mapsに対して機能を提供する(Export)こともできます。たとえば地図上にプッシュピンを追加した場合,PushupinFactoryContractクラス型のプロパティを定義し,機能を取得したいことを示す属性を付けます。

[ImportSingle("Microsoft/PushpinFactoryContract", ImportLoadPolicy.Synchronous)]
public PushpinFactoryContract PushpinFactoryContract { get; set; }

PushpinFactoryContractは地図上にプッシュピンを追加する機能を提供します。上記のように記述することで,Initializeメソッドが呼ばれる前にPushpinFactoryContactプロパティが参照可能になっています。このようにプラグインに対し機能を提供する方法は,.NET Framework 4のアプリケーションの拡張機能の仕組みを提供するManaged Extensibility Framework(MEF)とよく似ています。ただし,SilverlightでもMEFを使用できますが,それとは異なっています。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp