カテゴリー別アーカイブ: Bing Map

Bing Map Controlで、Google Mapの地図データを使用するには

Windows Phone 7でGoogle Map on Bing Map Controlを実現する
http://d.hatena.ne.jp/ch3cooh393/20101129/1291036733
との記事を発見したので、PC上のSilverlgihtでも試してみた。
うーん、これは良い。

XAML
xmlns:mapCtrl=
    “clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl”
xmlns:gMapEx=“clr-namespace:BingMap”

<mapCtrl:Map x:Name=”GoogleMaps” CredentialsProvider=“Bing Map Key”>
    <mapCtrl:Map.Children>
        <mapCtrl:MapTileLayer>
            <mapCtrl:MapTileLayer.TileSources>
                <gMapEx:GoogleTileSource TileSourceType=“Satellite” />
            </mapCtrl:MapTileLayer.TileSources>
        </mapCtrl:MapTileLayer>
        <mapCtrl:MapTileLayer>
            <mapCtrl:MapTileLayer.TileSources>
                <gMapEx:GoogleTileSource TileSourceType=“Street” />
           </mapCtrl:MapTileLayer.TileSources>
        </mapCtrl:MapTileLayer>
    </mapCtrl:Map.Children>
</mapCtrl:Map>

C# Code

using System;
using System.Windows;

using Microsoft.Maps.MapControl;

namespace BingMap
{
    public enum GoogleTileSourceType
    {
        Street,
        Hybrid,
        Satellite,
        Physical,
        PhysicalHybrid,
        StreetOverlay,
        WaterOverlay
    }

    public class GoogleTileSource : TileSource
    {
        public GoogleTileSource()
        {
            UriFormat = @"http://mt{0}.google.com/vt/lyrs={1}&z={2}&x={3}&y={4}";
            TileSourceType = GoogleTileSourceType.Street;
        }
        private int _servernr;
        private char _mapMode;

        private int Server
        {
            get
            {
                return _servernr = (_servernr + 1) % 4;
            }
        }

        private GoogleTileSourceType _tileSourceType;
        public GoogleTileSourceType TileSourceType
        {
            get { return _tileSourceType; }
            set
            {
                _tileSourceType = value;
                _mapMode = TypeToMapMode(value);
            }
        }

        public override Uri GetUri(int x, int y, int zoomLevel)
        {
            if (zoomLevel > 0)
            {
                var url = string.Format(UriFormat, Server, _mapMode, zoomLevel, x, y);
                //System.Diagnostics.Debug.WriteLine(url);
                return new Uri(url);
            }
            return null;
        }

        private static char TypeToMapMode(GoogleTileSourceType tileSourceType)
        {
            switch (tileSourceType)
            {
                case GoogleTileSourceType.Hybrid:
                    return 'y';
                case GoogleTileSourceType.Satellite:
                    return 's';
                case GoogleTileSourceType.Street:
                    return 'm';
                case GoogleTileSourceType.Physical:
                    return 't';
                case GoogleTileSourceType.PhysicalHybrid:
                    return 'p';
                case GoogleTileSourceType.StreetOverlay:
                    return 'h';
                case GoogleTileSourceType.WaterOverlay:
                    return 'r';
            } return ' ';
        }
    }
}

【Bing Map】 日本地図を表示するには

【Bing Map】 日本地図を表示するには

// 事前準備
 1. Bing Maps Silverlight Control SDK のインストール
    http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=2949

 2. Bing Maps Key の取得
    https://www.bingmapsportal.com/
    (1) アカウントの作成「Create an account」
    (2) Bing Maps Key の取得「Create or view keys」

// XAML
// Microsoft.Maps.MapControl.dll 参照設定
// Microsoft.Maps.MapControl.Common.dll 参照設定
xmlns:map="clr-namespace:Microsoft.Maps.MapControl;
    assembly=Microsoft.Maps.MapControl"

<map:Map x:Name="BingMaps" CredentialsProvider="Bing Maps Key" />

// C# Code
// 日本経緯度を指定
Location center = new Location(35, 139);
// 拡大率の設定
BingMaps.SetView(center, 5);

// Bing Map SDK サイト
http://www.microsoft.com/maps/isdk/silverlight/