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>(); } }