2011年6月12日日曜日

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

◆参考
Windows Phone 7でGoogle Map on Bing Map Controlを実現する
http://d.hatena.ne.jp/ch3cooh393/20101129/1291036733
との記事を発見したので、PC上のSilverlgihtでも試してみた。
 うーん、これは良い。
xmlns:mapCtrl=
     “clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl”
 xmlns:gMapEx=“clr-namespace:BingMap”
 

     
         
             
                 
             
         
         
             
                 
            
         
     
 
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 ' ';
         }
     }
 }

0 件のコメント:

コメントを投稿