使ってみよう! Bing API/SDK

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

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

はじめに

今回のBing Map App開発では,地図上に表示する各種エンティティについて紹介します。

第1回目の内容からおさらいすると,プラグインはひとつ以上のレイヤーを持っています。レイヤー上にはプッシュピン図1などエンティティと呼ばれる地図上に表示するアイテムを追加可能でした。

図1 プッシュピン

図1 プッシュピン

今回は,プッシュピン,ポリライン,ポリゴンを地図上に表示してみましょう。また最後にダイアログの表示についても触れています。

プッシュピン

最初に,プッシュピンを地図に表示してみましょう。基本的なプッシュピンの追加方法は,第1回でも紹介しています。これまでの内容も参考にプラグインのプロジェクトを作成してください。Visual StudioのC#のBing Map Appプロジェクトテンプレートを利用すると,プッシュピンがひとつ追加されるプラグインのコードが生成されています。

プッシュピンを地図上に追加するプラグインのコードは次のようになります。PushpinFactoryContractCreateStandardPushpinメソッドを使用して,ひとつの地点の情報を表すPointPrimitiveオブジェクトを作成します。これをEntityクラスのPrimitiveプロパティに指定し,レイヤー上に追加しています。

namespace HelloWorldBingMapApp
{
    using System;
    using System.Windows.Media;
    using Microsoft.Maps.Core;
    using Microsoft.Maps.Plugins;
    using Microsoft.Maps.Network;
    using Microsoft.Maps.MapControl;
 
    public class EmptyLayer : Layer {
        public EmptyLayer(PluginToken pluginToken) : base(pluginToken) { }
    }
    
    public class EntitySamplePlugin : Plugin
    {
        private EmptyLayer mainLayer;
 
        [ImportSingle("Microsoft/LayerManagerContract", ImportLoadPolicy.Synchronous)]
        public LayerManagerContract LayerManagerContract { get; set; }
 
        [ImportSingle("Microsoft/MapContract", ImportLoadPolicy.Synchronous)]
        public MapContract DefaultMap { get; set; }
 
        [ImportSingle("Microsoft/PushpinFactoryContract", ImportLoadPolicy.Synchronous)]
        public PushpinFactoryContract PushpinFactoryContract { get; set; }
 
        public override void Initialize()
        {
            base.Initialize();
            this.mainLayer = new EmptyLayer(this.Token);
            DefaultMap.MouseClick += new EventHandler<MapMouseEventArgs>(DefaultMap_MouseClick);
        }
 
        void DefaultMap_MouseClick(object sender, MapMouseEventArgs e)
        {
            // クリックした場所からその経緯度を取得
            var location = DefaultMap.ViewportPointToLocation(e.ViewportPoint);
 
            // プッシュピンの作成
            var pin = PushpinFactoryContract.CreateStandardPushpin(location);
 
            var entity = new Entity();
            entity.Primitive = pin; // Entity(pin) でも可
 
            // レイヤーにエンティティを追加
            this.mainLayer.Entities.Add(entity);
        }
 
        public override void Activate(System.Collections.Generic.IDictionary<string, string> activationParameters)
        {
            if (LayerManagerContract.ContainsLayer(this.mainLayer))
            {
                LayerManagerContract.BringToFront(this.mainLayer);
            }
            else
            {
                LayerManagerContract.AddLayer(this.mainLayer);
            }
         }
    }
}

上記コードでは,地図をクリックした地点にプッシュピンを追加しています。これを元にいろいろと変更を加えていきます。

さまざまなプッシュピン

プッシュピンは簡単に見た目の変更も可能です。

Colorプロパティで色の変更図2ができます。

pin.Color = Colors.Purple;

図2 色の変更

図2 色の変更

また,メソッドの引数にテキストを指定すると,その文字をプッシュピン上に表示できます図3)⁠日本語だと1文字がバランスよく表示されます。最大3文字まで表示可能です。また,HighlightedStateプロパティを使用するとアニメーションで目立たせることができます。

var pin = PushpinFactoryContract.CreateStandardPushpin(location, "あ");
pin.HighlightedState = HighlightedState.Highlighted;

図3 テキストの表示

図3 テキストの表示

アイコンの表示もできます図4)⁠Entityの内容からアイコン画像を設定したUIElementオブジェクトを返すメソッドを用意して,CreateStandardPushpinメソッドに指定します。

System.Windows.UIElement GetPinIcon(Entity entity)
{
    // ここでは entity を利用せず、決まった画像の Image オブジェクトを返す。
    var bmp = new System.Windows.Media.Imaging.BitmapImage(new Uri("http://example.jp/pinicon.png"));
    return new System.Windows.Controls.Image() {Source = bmp};
}
var pin = PushpinFactoryContract.CreateStandardPushpin(location, GetPinIcon);

図4 アイコンの表示

図4 アイコンの表示

さらに,メソッド名CreateStandardPushpinにあるように,Standardでないプッシュピンを作るメソッドも用意されています。

CreateMediaPushpinメソッドを使用すると,動画像をプッシュピンとして使用できます図5)⁠アイコンを指定したときと同じようにUIElementオブジェクト返すメソッド引数に指定します。

var pin = PushpinFactoryContract. CreateMediaPushpin(location, GetPinIcon);

図5 メディアプッシュピン

図5 メディアプッシュピン

CreateMiniPushpinメソッドを使用すると,小さいプッシュピンを作れます図6)⁠

var pin = PushpinFactoryContract. CreateMiniPushpin(location);

図6 ミニプッシュピン

図6 ミニプッシュピン

著者プロフィール

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

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

URL:http://katamari.jp

コメント

コメントの記入