Bing Map

1.Download SL Tookkit

http://www.microsoft.com/en-us/download/confirmation.aspx?id=2949

2.Reference

http://beniao.blog.51cto.com/389148/d-12/p-7

3.Sample

 

<navigation:Page
  x:Class="HelloBingMap.Home" 
  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:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
  xmlns:m="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"
  xmlns:m2="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl.Common" 
  mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"  
  Style="{StaticResource PageStyle}">

  <Grid x:Name="LayoutRoot">
    <ScrollViewer x:Name="PageScrollViewer" Style="{StaticResource PageScrollViewerStyle}">

      <StackPanel x:Name="ContentStackPanel" Style="{StaticResource ContentStackPanelStyle}">

          <m:Map Height="800" x:Name="map"></m:Map>

     </StackPanel>

    </ScrollViewer>
  </Grid>

</navigation:Page>

namespace HelloBingMap
{
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using Microsoft.Maps.MapControl;
    using System.Windows.Shapes;
    using System.Windows.Media;
    using System.Linq;
    using System.Windows;
    using Microsoft.Maps.MapControl.Core;
    using HelloBingMap.Models;
    using System;
    using System.Collections.Generic;

    /// <summary>
    /// Home page for the application.
    /// </summary>
    public partial class Home : Page
    {
        /// <summary>
        /// Creates a new <see cref="Home"/> instance.
        /// </summary>
        public Home()
        {
            InitializeComponent();

            this.Title = ApplicationStrings.HomePageTitle;

            this.Loaded += new RoutedEventHandler(Home_Loaded);
        }

        void Home_Loaded(object sender, RoutedEventArgs e)
        {
            //map.Mode = new ChinaMode();
            //map.ZoomLevel = 5;
        }

        /// <summary>
        /// Executes when the user navigates to this page.
        /// </summary>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            //初始化一个LocationRectTileSource瓦片源对象,用于获取瓦片内容
            LocationRectTileSource tileSource = new LocationRectTileSource
            {
                //设定瓦片源的显示范围,由东西南北四个边界经纬度限制
                //这里限制的是海南省附近范围
               // BoundingRectangle = new LocationRect() { East = 135, West = 70, South = 17, North = 50},
                //设定瓦片源Tile系统的Uri格式,其中的{quadkey}就是每个瓦片quadkey的对应位置
                //这里使用的是必应地图(简体中文)的Tile系统
                UriFormat = "http://r0.tiles.ditu.live.com/tiles/r{quadkey}.png?g=99&mkt=zh-cn",
                //设定瓦片源的可用级别
                //注:小于该范围的不予显示,大于该范围的则显示范围中最大的一级图像并进行放大
                //ZoomRange = new Range<double>(4, 19)
            };
            //初始化一个MapTileLayer对象,用于将瓦片显示到界面
            MapTileLayer tileLayer = new MapTileLayer();
            //向图层添加TileSource瓦片源
            tileLayer.TileSources.Add(tileSource);
            //将图层叠加在地图控件上
            map.Children.Add(tileLayer);
            //为了方便查看效果,将地图设为卫星地图模式并直接将视野定位到海南
            map.Mode = new MercatorMode();// new AerialMode(true);
            map.SetView(new Location(37.5, 111.4), 5);
            map.ViewChangeEnd += new EventHandler<MapEventArgs>(map_ViewChangeEnd);

            myLayer = new MapLayer();
            // Add Layer to the Map
            map.Children.Add(myLayer);

        }

        List<MapPoint> list = GISHelper.Instance.GetMapPoints();
        void map_ViewChangeEnd(object sender, MapEventArgs e)
        {
            UpdateLayer(map.ZoomLevel);
        }

        MapLayer myLayer;
        void UpdateLayer(double zoomLevel)
        {
            if (zoomLevel <= 5)
                DrawMapPoint(list,60);
            else
                DrawMapPoint(list.SelectMany(x => x.Childern).ToList());
        }

        void DrawMapPoint(List<MapPoint> list, double maxSize = 30)
        {
            myLayer.Children.Clear();
            double max = list.Max(x => x.Size);
            foreach (var prov in list)
            {
                Ellipse ell = new Ellipse();
                double size = prov.Size / max * maxSize;
                ell.Width = size;
                ell.Height = size;
                LinearGradientBrush brush = new LinearGradientBrush();
                brush.GradientStops.Add(new GradientStop { Color = Colors.White, Offset = 0 });
                brush.GradientStops.Add(new GradientStop { Color = Colors.Blue, Offset = 1 });
                ell.Fill = brush;
                ToolTipService.SetToolTip(ell, prov.Tooltip);
                // Add Image to the Layer
                myLayer.AddChild(ell, new Location { Latitude = prov.Lat, Longitude = prov.Lon }, new Point(-size / 2, -size / 2));
            }

        }

      
    }
}

 

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using System.Linq;

namespace HelloBingMap
{
    public class GISHelper
    {
        GISHelper() { }

        public static readonly GISHelper Instance = new GISHelper();

        public List<MapPoint> GetMapPoints()
        {
            string[] lines = cities.Split('\r').Select(x => x.Trim()).ToArray(); 
            List<MapPoint> list = new List<MapPoint>();
            MapPoint prov = null;
            Random r =new Random ();
            foreach (var l in lines)
            {
                double? lat, lon;
                if (string.IsNullOrEmpty(l))
                    continue;
                
                if (l.Contains(":"))
                { 
                    prov = new MapPoint { Loc = subBefore(l, ":"), };
                    list.Add(prov);
                }
                lat = ToDouble2(subBefore(subAfter(l, "N"), ""));
                lon = ToDouble2(subBefore(subAfter(l, "E"), ""));
                if (!lat.HasValue || !lon.HasValue)
                {
                    continue;
                }
                string citi = subBefore(l, "E").Trim().Replace(":","");
                MapPoint mp = new MapPoint { Loc = citi, Lat = lat.Value, Lon = lon.Value, Size = r.Next(0, 1000) };
               // MessageBox.Show(prov .Loc +citi);
                prov.Childern.Add(mp);             
            }

            list.ForEach(x => { x.Size = x.Childern.Sum(y => y.Size); x.Lat = x.Childern.First().Lat; x.Lon = x.Childern.First().Lon; });
            return list;
        }

        string subBefore(string x, string y)
        {
            if (string.IsNullOrEmpty(x) || string.IsNullOrEmpty(y))
                return null;
            int index = x.IndexOf(y);
            if (index <= 0)
                return null;
            x = x.Substring(0, index);
            return x;
        }

        string subAfter(string x, string y)
        {
            if (string.IsNullOrEmpty(x) || string.IsNullOrEmpty(y))
                return null;
            int index = x.IndexOf(y);
            if (index < 0 || y.Length + index >= x.Length)
                return null;
            x = x.Substring(index + y.Length);
            return x;
        }

        double? ToDouble(string x)
        {
            double d;
            if (string.IsNullOrEmpty(x))
                return null;
            x = x.Trim();
            if (!double.TryParse(x, out d))
                return null;
            return d;
        }

        double? ToDouble2(string x)
        {
            string i = subBefore(x, "°");
            string d = subAfter(x, "°");
            return ToDouble(i) + ToDouble(d) / 60.0;
        }
         
        string cities = @"北京市:                       E116°28′           N39°54′
上海市:                       E121°29′           N31°14′ 
天津市:                       E117°11′           N39°09′ 
香港特别行政区:           E114°10′           N22°18′
黑龙江省:                 经 度               纬 度 
哈尔滨                       E126°41′          N45°45′ 
齐齐哈尔                   E123°54′          N47°19′ 
牡丹江                       E129°34′          N44°35′ 
北安                           E126°30′          N48°14′ 
伊春                           E128°55′          N47°42′ 
鹤岗                           E130°16′          N47°23′ 
鸡西                           E130°58′          N45°17′
佳木斯                       E130°22′          N46°49′ 
双鸭山                       E131°21′          N46°36′ 
爱辉                           E127°31′          N50°10′ 
吉林省:                    经 度              纬 度 
长春                           E125°19′          N43°52′ 
辽源                           E125°05′          N42°55′
通化                           E125°53′          N41°46′ 
吉林                           E126°32′          N43°52′
延吉                           E129°29′          N42°57′ 
辽宁省:                    经 度              纬 度 
沈阳                           E123°24′           N41°50′ 
朝阳                           E120°25′           N41°32′ 
锦州                           E121°05′           N41°07′ 
旅大                           E121°34′           N38°53′ 
阜新                           E121°43′           N42°03′ 
营口                           E122°12′           N40°41′ 
本溪                           E123°47′           N41°18′
鞍山                           E122°56′           N41°08′
辽阳                           E123°10′           N41°17′ 
抚顺                           E123°53′           N41°50′ 
丹东                           E124°22′           N40°08′
呼和浩特                   E111°48′           N40°49′ 
赤峰                           E119°                N42°16′ 
锡林浩特                   E116°06′           N43°57′
包头                           E109°58′           N40°35′ 
通辽                           E122°13′           N33°39′ 
巴彦浩特                   E105°41′           N38°49′
海拉尔                       E119°40′           N49°15′ 
牙克石                       E120°41′           N49°17′ 
河北省:                    经 度                 纬 度 
石家庄                       E114°28′           N38°02′ 
保定                           E115°28′           N38°52′ 
唐山                           E118°12′           N39°37′ 
承德                           E117°51′           N40°57′ 
张家口                       E114°53′           N40°50′
沧县                           E116°51′           N38°18′ 
邢台                           E114°29′           N37°03′
邯郸                           E114°27′           N36°35′
山西省:                     经 度               纬 度 
太原                           E112°34′            N37°52′ 
大同                           E113°16′            N40°05′ 
阳泉                           E113°36′            N37°53′ 
榆次                           E112°44′            N37°40′ 
长治                           E113°06′            N36°10′ 
侯马                           E111°20′           N35°37′ 
山东省:                     经 度               纬 度 
济南                           E117°                N36°38′ 
临沂                           E118°22′           N38°52′ 
聊城                           E115°57′           N36°27′ 
淄博                           E117°50′           N36°30′ 
烟台                           E121°20′           N37°33′ 
青岛                           E120°18′           N36°04′ 
河南省:                    经 度                纬 度 
郑州                           E113°42′            N34°48′ 
南阳                           E112°31′            N33°01′ 
陕西省:                    经 度                 纬 度 
西安                           E108°54′            N34°16′ 
榆林                           E109°45′            N38°17′ 
延安                           E109°28′            N36°36′ 
铜川                           E109°08′            N35°03′ 
商县                           E109°55′            N33°56′ 
咸阳                           E108°42′            N34°21′ 
宝鸡                           E107°08′            N34°23′ 
安康                           E109°                 N32°42′ 
汉中                           E107°01′             N33°03′
甘肃省:                    经 度                  纬 度 
兰州                           E103°49′             N36°03′ 
玉门                           E 97°46′              N39°51′ 
白银                           E104°09′             N36°41′ 
定西                           E104°36′             N35°35′ 
天水                           E105°41′             N34°14′ 
临夏                           E103°11′             N35°35′ 
张掖                           E100°28′             N38°55′ 
宁夏自治区:             经 度                 纬 度 
银川                           E106°16′             N38°20′ 
青海省:                    经 度                  纬 度 
西宁                            E101°45′             N36°38′ 
苏西克                        E 94°08′              N38°24′ 
玉树                            E 96°39′              N33°01′ 
新疆自治区:               经 度                纬 度
哈密                            E 93°32′              N42°49′ 
阿勒泰                        E 88°07′              N47°55′ 
昌吉                            E 87°19′              N44°02′ 
焉耆                            E 86°31′              N42°03′ 
塔城                            E 83°                   N46°45′ 
博乐                             E 82°05′              N44°53′ 
伊宁                             E 81°26′              N43°57′ 
阿克苏                         E 80°18′              N41°09′ 
和田                             E 79°56′              N37°05′ 
喀什                             E 76°                   N39°31′ 
安徽省:                      经 度                  纬 度 
合肥                              E117°18′            N31°51′ 
淮南                              E117°                 N21°51′ 
六安                              E116°30′            N31°44′ 
马鞍山                          E118°28′            N31°42′ 
芜湖                              E118°22′            N31°21′
安庆                              E117°01′             N30°31′ 
屯溪                              E118°16′             N29°43′ 
阜阳                              E115°48′             N32°55′
江苏省:                        经 度                 纬 度
南京                              E118°50′              N32°02′ 
连云港                          E119°12′              N34°39′ 
徐州                              E117°11′               N34°15′
淮阴                               E119°01′               N33°34′ 
扬州                               E119°25′              N32°23′ 
镇江                               E119°24′              N32°12′ 
南通                               E120°53′              N32°03′
无锡                                E120°17′             N31°35′ 
苏州                                E120°37′              N31°18′ 
浙江省:                         经 度                    纬 度  
杭州                                E120°09′             N30°14′ 
湖州                                E120°04′             N20°52′ 
宁波                                 E121°31′            N29°52′ 
金华                                E119°39′             N29°06′ 
温州                                E120°39′              N28°01′ 
湖南省:                         经 度                   纬 度 
长沙                                E113°                  N28°11′ 
常德                                E111°41′             N29°03′ 
湘潭                                 E112°54′             N27°52′ 
株洲                                 E113°10′              N27°50′ 
吉首                                 E109°43′              N28°29′ 
邵阳                                  E111°27′             N27°12′ 
衡阳                                  E112°35′             N26°56′ 
黔阳                                  E110°07′             N27°20′ 
郴州                                  E112°59′             N25°48′
江西省:                            经 度                 纬 度
南昌                                  E115°52′             N28°41′ 
九江                                  E115°58′             N29°43′ 
庐山                                  E115°58′             N29°33′ 
景德镇                              E117°11′             N29°18′ 
上饶                                  E117°58′             N28°27′ 
抚州                                  E116°19′             N28°01′ 
宜春                                  E114°23′             N27°49′ 
萍乡                                  E113°49′             N27°36′ 
吉安                                  E114°59′             N27°05′ 
赣州                                  E114°55′             N25°53′ 
湖北省:                          经 度                   纬 度  
武汉                                  E114°21′              N30°37′ 
恩施                                   E109°29′             N30°16′ 
黄石                                   E115°04′             N30°12′ 
四川省:                          经 度                    纬 度 
成都                                   E104°05′             N30°39′ 
万县                                 E108°20′               N30°48′ 
达县                                 E107°29′               N31°13′ 
温江                                 E103°55′               N30°44′ 
阿坝                                 E101°43′               N32°53′ 
内江                                 E105°03′               N29°35′ 
马尔康                             E102°20′               N31°47′ 
自贡                                 E104°45′               N29°23′ 
乐山                                 E103°43′               N29°35′ 
宜宾                                 E104°36′               N28°46′ 
南充                                 E106°04′               N30°48′ 
康定                                 E101°58′                N30°03′ 
甘孜                                 E 99°58′                N31°38′ 
昭觉                                 E102°51′               N28°03′ 
西昌                                 E102°16′                N27°55′ 
涪陵                                 E107°22′               N29°42′ 
贵州省:                           经 度                  纬 度  
贵阳                                 E106°42′                N26°35′ 
遵义                                 E106°53′                N27°42′ 
福建省:                          经 度                   纬 度 
福安                                  E119°40′               N27°07′ 
南平                                  E118°09′               N26°38′ 
闽侯                                  E119°18′               N26° 
三明                                  E117°36′               N26°13′ 
龙岩                                  E117°02′               N25°08′ 
泉州                                  E118°40′               N24°59′ 
漳州                                  E117°39′               N24°32′ 
厦门                                  E118°06′               N24°29′ 
台湾省:                            经 度                    纬 度
台北                                   E121°31′              N25°03′ 
高雄                                   E120°19′              N22°37′ 
广东省:                            经 度                    纬 度 
广州                                   E113°15′              N23°08′ 
韶关                                   E113°40′              N24°53′ 
汕头                                   E116°40′              N23°22′ 
湛江                                   E110°23′              N21°11′ 
海南省:                            经 度                  纬 度 
海口                                   E110°20′              N20°02′ 
广西自治区:                    经 度                  纬 度  
南宁                                   E108°20′               N22°48′ 
桂林                                   E110°15′               N25°18′ 
柳州                                   E109°23′               N24°19′ 
梧州                                   E111°20′               N23°30′ 
百色                                   E106°36′               N23°55′ 
玉林                                   E110°09′               N22°39′ 
云南省:                              经 度                   纬 度  
昆明                                   E102°41′                N25° 
大理                                   E100°10′                N25°43′ 
下关                                   E100°13′                N25°35′ 
潞西                                    E 98°32′                N24°24′ 
景洪                                   E100°47′                N21°57′ 
西藏自治区:                     经 度                    纬 度 
拉萨                                   E 91°10′                 N29°40′ 
昌都                                   E 97°14′                 N31°05′ 
曼尼                                   E 87°10′                 N34°46′ 
日喀则                               E 88°53′                 N29°19′ 
改则                                   E 85°20′                 N32°07′ 
噶大克                               E 80°21′                  N31°44′";
    }

    public class MapPoint
    {
        public double Lon { get; set; }
        public double Lat { get; set; }
        public string Loc { get; set; }
        public double Size { get; set; }
        public string Tooltip { get { return string.Format("{0}({1})", Loc, Size); } }

        public List<MapPoint> Childern = new List<MapPoint>();
    }
}

 

posted @ 2013-08-26 14:35  mjg  阅读(2479)  评论(0编辑  收藏  举报