使ってみよう! Windows Live SDK/API

第30回 Bing Maps Silverlight Control SDK

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

地図の制御

コードから簡単な地図の制御をしてみましょう。MainPage.xamlはKeyを追加したままの状態で,MainPage.xaml.vbの内容が以下のようになるよう追記します。

Imports Microsoft.Maps.MapControl

Partial Public Class MainPage
    Inherits UserControl

    Public Sub New()
        InitializeComponent()

        ' 道路地図か航空写真(ラベル表示の有無)かの設定
        MyMap.Mode = New AerialMode With {.Labels = True}
        ' または MyMap.Mode = New RoadMode
        ' MyMap.SetMode(New RoadMode, False) など

        ' ズームレベル(1が最小値でズームアウトした状態)の設定
        MyMap.ZoomLevel = 10

        ' 地図の中心に表示する 緯度・経度の設定
        MyMap.Center = New Location(36.0999, 139.6549)
        ' または MyMap.SetView(New Location(36.0999, 139.6549), 10) など
    End Sub
End Class

コードを見ていただけると直感的にわかるのではないかと思います。道路地図・航空写真表示の切り替え,ズームレベル,経緯度の設定をしています。プロパティやメソッドを使用して設定が可能です。上記コードではコンストラクタに記述し,固定値を設定しているだけであまり有用はありませんが,ボタンを配置しクリック時に移動処理などを行うのも簡単に対応できますね。上記の例であればXAMLだけでも同様に記述できます。

<m:Map x:Name="MyMap" CredentialsProvider="取得したKey"
       Mode="AerialWithLabels" ZoomLevel="10" Center="36.0999,139.6549"/>

SilverlightやWPFの特徴であるデータバインディングももちろん使用できます。次のようにXAMLを編集し,経緯度を表すLocationクラスと文字列を変換するコンバータークラスを追加して実行すると,表示した経緯度がテキストボックスに表示され,反対にテキストボックスに経緯度を入力するとその場所へ地図が移動します。

<UserControl x:Class="BingMapsApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:m="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"
    xmlns:me="clr-namespace:BingMapsApp"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.Resources>
            <me:LocationConverter x:Key="LocationConverter" />
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBox x:Name="LocationTextBox" Text="36.0999,139.6549" />
        <m:Map x:Name="MyMap" 
               Grid.Row="1" CredentialsProvider="取得したKey"
               Mode="AerialWithLabels" ZoomLevel="10" 
               Center="{Binding ElementName=LocationTextBox, Path=Text, Mode=TwoWay, Converter={StaticResource LocationConverter}}"/>
    </Grid>
</UserControl>
Imports System.Windows.Data
Imports Microsoft.Maps.MapControl

Public Class LocationConverter
    Implements IValueConverter

    Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
        Try
            Dim values = CStr(value).Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries)
            Return New Location(CDbl(values(0)), CDbl(values(1)))
        Catch ex As Exception
            Return DependencyProperty.UnsetValue
        End Try
    End Function

    Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
        Try
            Dim location = DirectCast(value, Location)
            Return String.Format("{0},{1}", location.Latitude, location.Longitude)
        Catch ex As Exception
            Return DependencyProperty.UnsetValue
        End Try
    End Function
End Class

上記コードの実行結果は図7のようになります。

図7 データバインディングを使用した例

図7 データバインディングを使用した例

Interactive SDK

今回紹介できた内容はBing Maps Silverlight Control SDKのほんの一部分だけです。ですが,簡単に利用でき,活用できそうな雰囲気が伝わっていれば幸いです。その他の機能に関しては,Interactive SDKというコントロールの各種機能を利用したサンプルとデモをまとめたWebサイトが用意されていますので,こちらを参照するとよいでしょう。その他の機能も手短なコードで利用できることがわかるかと思います。

Interactive SDKでは,Bing Maps Silverlight Control SDKと地名から経緯度を検索するなどのBing Maps Web Servicesと連携したサンプルも紹介されています。よりコントロールを活用したアプリケーションにはこちらも必要かと思います。

おわりに

今回は以上です。いかがでしたでしょうか。LiveブランドからBingブランドへと変わり,地図検索のプラットフォームであったMicrosoft Virtual EarthはBing Maps Platformへと変わりました。その内容はいまのところ名前の変更程度に留まっていますが,これからの発展に期待されます。今回紹介したSilverlightのコントロールもVirtual Earth Silverlight Map Control Community Technology Preview バージョンとして提供されたものが正式リリースされた形ですので,Bingブランドからの新しいサービスというわけではありません。しかし,エンドユーザー向けサービスでSilverlightによる地図検索サービスは,Bing Mapsでも採用されていませんし,また特に日本においてはSDKを利用したサイトはほぼ無いといっていいでしょう。今,この時期にBing Maps Silverlight Control SDKを利用したWebアプリケーションはユーザーに対してインパクトのあるものにできるかもしれませんね。この記事が開発のきっかけになれば幸いです。

著者プロフィール

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

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

URL:http://katamari.jp