読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでBingMapsTaskを使って地図を表示する

Windows Phone

概要

Windows Phone 0S 7.1から使用できるようになりました。Centerプロパティで指定した場所か、ユーザーの現在の位置を中心に表示させたMapアプリ(Bing Maps)を起動します。

検索キーワードが設定されている場合は、検索キーワードに一致する位置に地図上にタグが付けられます。

Windows Phone OS 7.1以前の環境でアプリケーションからMapアプリを起動したい場合は「Windows PhoneでWebBrowserTaskを使って位置座標を設定して標準マップアプリを起動する - 酢ろぐ!」を参考にして頂き、WebBrowserTaskからMapアプリ用のスキーマーを使用してください。

名前空間:Microsoft.Phone.Tasks

System.Object
 +--Microsoft.Phone.Tasks.BingMapsTask

BingMapsTaskを使ったTips

BingMapsTaskは、Mapsアプリケーションを起動するランチャーです。Windows Phone OS 7.1から使用出来るようになりました。

表示中央位置を示すCenterプロパティで指定した場所か、指定しない場合はユーザーの現在の位置を中心に表示させたMapsアプリケーションが起動します。

検索キーワードが設定されている場合は、検索キーワードに一致する位置に地図上にピンが立てられます。

BingMapsTaskを使って地図を表示する(一番簡単な方法)

Windows Phone OS 7.1で追加されたLauncherです。BingMapsTaskは、Bing Mapsアプリケーションを起動することが出来ます。最も簡単な使用例としては、SearchTermプロパティに地図上の位置をマークするための地名等を設定した上で、Showメソッドを呼びます。

ZoomLevelプロパティをあらかじめ指定しておくと、最初にマップが表示されるときに表示されるズームレベルを指定することができます。

Centerプロパティは表示されるマップの中心点を設定することができます。Centerプロパティを設定しない場合、ユーザーの現在位置が地図の中心点として使用されます(下の例では、Centerプロパティへの設定をコメントアウトをしています)。

private void btnBingMaps_Click(object sender, RoutedEventArgs e)
{
    // SearchTermプロパティに検索用テキストに設定して表示を行う
    var bingMapsTask = new BingMapsTask();
    bingMapsTask.SearchTerm = "Ichikawa, Japan";
    bingMapsTask.ZoomLevel = 10;
    // bingMapsTask.Center = new GeoCoordinate(35.691356, 139.690046);
    bingMapsTask.Show();
}

上記のコードを実行した際のスクリーンショットです。


SearchTermプロパティに表示したい地名を設定して使う

最も簡単な使用例としては、SearchTermプロパティに地図上の位置をマークするための地名等を設定した上で、Showメソッドを呼びます。

ZoomLevelプロパティをあらかじめ指定しておくと、最初にマップが表示されるときに表示されるズームレベルを指定することができます。ユーザーの現在位置が地図の中心点として使用されます。

最も簡単な使用例としては、SearchTermプロパティに地図上の位置をマークするための地名等を設定した上で、Showメソッドを呼びます。

ZoomLevelプロパティをあらかじめ指定しておくと、最初にマップが表示されるときに表示されるズームレベルを指定することができます。ユーザーの現在位置が地図の中心点として使用されます。

C#

using System;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Tasks;

namespace BingMapsTaskTest {
    public partial class MainPage : PhoneApplicationPage {
        // コンストラクター
        public MainPage() {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e) {
            var task = new BingMapsTask();
            try {
                // 大阪を指定
                task.SearchTerm = "Osaka";
                // Mapsアプリ起動時のズーム値を指定
                task.ZoomLevel = 10;
                task.Show();
            } catch (InvalidOperationException ex) {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

VB.NET

Private Sub btnBingMaps_Click(sender As Object, e As RoutedEventArgs)
	' SearchTermプロパティに検索用テキストに設定して表示を行う
	Dim bingMapsTask = New BingMapsTask()
	bingMapsTask.SearchTerm = "Ichikawa, Japan"
	bingMapsTask.ZoomLevel = 10
	bingMapsTask.Show()
End Sub

上記のコードを実行した際のスクリーンショットです。表示言語設定を[English(United States)]にしています。

しかし、SearchTermプロパティを使用しての検索は、2011年12月時点で表示言語設定を日本にしている場合は、「結果がありません」と表示されて利用出来ません。


Centerプロパティに表示したい位置情報を設定して使う

Centerプロパティは表示されるマップの中心点を設定することができます。

必要に応じて、表示されるマップの中心点を設定することができます。Centerプロパティに都庁の座標を設定しています。

中心点は、GeoCoordinateオブジェクトを使用して指定されます。利用するにはプロジェクトにSystem.Deviceアセンブリへの参照を追加します。GeoCoordinate APIにアクセスするには、System.Device.Location名前空間を参照するusingディレクティブを含める必要があります。

C#

using System;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Tasks;
using System.Device.Location;

namespace BingMapsTaskTest {
    public partial class MainPage : PhoneApplicationPage {
        // コンストラクター
        public MainPage() {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e) {
            var task = new BingMapsTask();
            task.Center = new GeoCoordinate(35.691356, 139.690046);
            task.ZoomLevel = 15;
            task.Show();
        }
    }
}

VB.NET

Private Sub btnBingMaps_Click(sender As Object, e As RoutedEventArgs)
	Dim bingMapsTask As New BingMapsTask()
	bingMapsTask.Center = New GeoCoordinate(35.691356, 139.690046)
	bingMapsTask.ZoomLevel = 15
	bingMapsTask.Show()
End Sub

上記のコードを実行した際のスクリーンショットです。


SearchTermプロパティとCenterプロパティを両方とも設定した場合

SearchTermプロパティとCenterプロパティを両方とも設定した場合は、一旦Centerプロパティに指定した位置へ移動してから、SearchTermプロパティの検索結果の場所へ移動するような挙動となりました。

C#

private void btnBingMaps_Click(object sender, RoutedEventArgs e)
{
    // SearchTermプロパティにテキストに設定して、
    // Centerプロパティに地図上で中央になる座標を設定している場合、
    // SearchTermプロパティが優先されて表示される
    BingMapsTask bingMapsTask = new BingMapsTask();
    bingMapsTask.SearchTerm = "Ichikawa, Chiba, Japan";
    bingMapsTask.Center = new GeoCoordinate(35.691356, 139.690046);
    bingMapsTask.Show();
}

VB.NET

Private Sub btnBingMaps_Click(sender As Object, e As RoutedEventArgs)
	' SearchTermプロパティにテキストに設定して、
	' Centerプロパティに地図上で中央になる座標を設定している場合、
	' SearchTermプロパティが優先されて表示される
	Dim bingMapsTask As New BingMapsTask()
	bingMapsTask.SearchTerm = "Ichikawa, Chiba, Japan"
	bingMapsTask.Center = New GeoCoordinate(35.691356, 139.690046)
	bingMapsTask.Show()
End Sub

何も設定せずにShowメソッドを呼ぶとnvalidOperationExceptionが発生する

なお、BingMapsTaskの呼び出し時には、SearchTermプロパティとCenterプロパティにそれぞれ何も設定しなかった場合、InvalidOperationExceptionが発生してしまいます。


C#

private void btnBingMaps_Click(object sender, RoutedEventArgs e)
{
    // SearchTermとCenter、両方のプロパティに何も設定しなかった場合、
    // InvalidOperationExceptionが発生する
    BingMapsTask bingMapsTask = new BingMapsTask();
    bingMapsTask.Show();
}

VB.NET

Private Sub btnBingMaps_Click(sender As Object, e As RoutedEventArgs)
	' SearchTermとCenter、両方のプロパティに何も設定しなかった場合、
	' InvalidOperationExceptionが発生する
	Dim bingMapsTask As New BingMapsTask()
	bingMapsTask.Show()
End Sub

Windows Phone SDK 7.1 Beta2では、SearchTermプロパティに日本語を入力すると文字化けしてしまう現象が発生していました。正式版が出る頃には日本語でも検索出来るようになっていると思われます。

関連記事

今日はMangoで追加になったLauncher&Chooserについて、いくつか詳細とサンプルコードの記事を書いています。興味のある方はご覧ください。