使ってみよう! Bing API/SDK

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

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

はじめに

前回に引き続いて今回もBing Map App SDKの紹介です。前回はごく簡単なアプリケーションを作り,実行方法を紹介しました。今回は新たにBing Map Appの次の機能を紹介します。

  • パネルの追加
  • レイヤーのシリアライズ

今回作成するMap Appは,図1のように県庁所在地の場所にプッシュピンを表示する単純なものですが,左側のパネルを活用しています。パネル内の地名をクリックするとその場所へ移動します。

図1 県庁所在地 Bing Map App

図1 県庁所在地 Bing Map App

プラグイン クラスの作成

最初にMap Appのプロジェクトおよびプラグイン クラスを作りましょう。前回と同様ですので,前回の内容を参照しながら作成してください。

プロジェクトはC#のSilverlightクラス ライブラリ プロジェクトです。プロジェクト作成後,Bing Map App SDKのライブラリーの参照の追加をしてください。今回はプロジェクト名をCapitalCitiesBingMapAppとしました。

続いて,Pluginクラスを継承したクラスを作ります。またContractのImportも行います。クラス名はCapitalCitiesPlugin,ファイル名はCapitalCitiesPlugin.csとしました。コードは次のようになります。Initializeメソッドの内容は後から編集します。

namespace CapitalCitiesBingMapApp
{
    using System;
    using Microsoft.Maps.Core;
    using Microsoft.Maps.Plugins;
 
    public class CapitalCitiesPlugin : Plugin
    {
        private Layer mainLayer;
 
        [ImportSingle("Microsoft/MapContract", ImportLoadPolicy.Synchronous)]
        public MapContract DefaultMap { get; set; }
 
        [ImportSingle("Microsoft/LayerManagerContract", ImportLoadPolicy.Synchronous)]
        public LayerManagerContract LayerManagerContract { get; set; }
 
        [ImportSingle("Microsoft/PushpinFactoryContract", ImportLoadPolicy.Synchronous)]
        public PushpinFactoryContract PushpinFactoryContract { get; set; }

        public override void Initialize()
        {
            // (後で編集)
        }
 
        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);
            }
        }
 
    }
}

エンティティの作成

エンティティとはプッシュピンなどの地図上に表示するアイテムでした。前回のコードでは,Initializeメソッド内で直接,Entityクラスそのものを生成して使用していましたが,今回はEntityクラスを継承して,県庁所在地を表すエンティティ クラスを作成して使用します。といっても県庁所在地の名前を設定するプロパティを追加しただけの簡単なものです。

プロジェクトに新しいクラスを追加して,次のようにコードを記述します。ファイル名はCityEntity.cs,クラス名はCityEntityとします。

namespace CapitalCitiesBingMapApp
{
    using Microsoft.Maps.Core;
 
    public class CityEntity : Entity
    {
        public string Name { get; set; }
    }
}

レイヤーの作成

続いてレイヤーを作成しましょう。レイヤーには県庁所在地を示すエンティティを追加します。また,レイヤーにはパネルも追加します。まずは,エンティティを追加する処理を書きましょう。

前回のコードではエンティティの追加を,プラグイン クラスのInitializeメソッドで行っていましたが,今回はレイヤーのコンストラクタ内で行います。

XMLファイルの追加

県庁所在地の名前と経緯度情報は,情報を記載したXMLファイルを用意して,ここから情報を取得するようにしましょう。プロジェクトにリソースとして追加して,レイヤーのコンストラクタ処理のときに読み込みエンティティを作成することにします。

プロジェクトに新しい項目としてXMLファイルを追加します図2)⁠ファイル名はCities.xmlとします。追加後,ソリューションエクスプローラからファイルを選択して,ビルドアクション プロパティを「埋め込まれたリソース」に設定します図3)⁠

図2 XMLファイルの追加

図2 XMLファイルの追加

図3 埋め込まれたリソース

図3 埋め込まれたリソース

XMLファイルの内容は次のように,47都道府県分の<Pushpin>要素を記述して,属性として地名と経緯度の値を設定します。

<?xml version="1.0" encoding="utf-8" ?>
<Pushpins>
  <Pushpin Name="札幌市" Latitude="43.0646147" Longitude="141.3468074" />
  <Pushpin Name="青森市" Latitude="40.8243077" Longitude="140.7399984" />
  <Pushpin Name="盛岡市" Latitude="39.7036194" Longitude="141.1526839" />
(省略)
  <Pushpin Name="鹿児島市" Latitude="31.5610825" Longitude="130.5577279" />
  <Pushpin Name="那覇市" Latitude="26.2124013" Longitude="127.6809317" />
</Pushpins>

以上でXMLファイルの準備は完了です。内容からわかるように別に県庁所在地である必要はなく,好きな地名と経緯度を記述して構いません。

著者プロフィール

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

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

URL:http://katamari.jp

コメント

コメントの記入