詳解WPF如何使用必應(yīng)地圖控件
如何使用必應(yīng)地圖 WPF 控件
- 框架使用
.NET40
; Visual Studio 2019
;Bing Maps WPF
控件需要.NET Framework 4.0
和Windows SDK
。這兩個組件都隨Microsoft Visual Studio VisualC#
或Visual Basic Express Edition
一起安裝。- 下面演示如何使用。
- 引用
Microsoft.Maps.MapControl.WPF.dll
也可以在nuget上找到。 - 添加命名空間。
- 新建
AMapTitleLayer.cs
繼承圖層MapTileLayer
實現(xiàn)加載高德地圖瓦片.
1)新建 AMapTitleLayer.cs
代碼如下:
using Microsoft.Maps.MapControl.WPF; using System; namespace WPFDevelopers.Samples.ExampleViews { public class AMapTitleLayer : MapTileLayer { public AMapTitleLayer() { TileSource = new AMapTileSource(); } public string UriFormat { get { return TileSource.UriFormat; } set { TileSource.UriFormat = value; } } } public class AMapTileSource : TileSource { public override Uri GetUri(int x, int y, int zoomLevel) { string url = string.Format("http://wprd01.is.autonavi.com/appmaptile?x={0}&y={1}&z={2}&lang=zh_cn&size=1&scl=1&style=7", x, y, zoomLevel); return new Uri(url, UriKind.Absolute); } } }
2)新建PushpinModel.cs
代碼如下:
using?Microsoft.Maps.MapControl.WPF; namespace?WPFDevelopers.Samples.ExampleViews { ????public?class?PushpinModel ????{ ????????public?Location?Location?{?get;?set;?} ????????public?int?ID?{?get;?set;?} ????????public?string?Title?{?get;?set;?} ????} }
3)新建 BingAMapExample.xaml
代碼如下:
<UserControl?x:Class="WPFDevelopers.Samples.ExampleViews.BingAMapExample" ?????????????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ?????????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ?????????????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"? ?????????????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"? ?????????????xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews" ?????????????xmlns:map="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF" ?????????????xmlns:mapOverlays="clr-namespace:Microsoft.Maps.MapControl.WPF.Overlays;assembly=Microsoft.Maps.MapControl.WPF" ?????????????mc:Ignorable="d"? ?????????????d:DesignHeight="450"?d:DesignWidth="800"> ????<UserControl.Resources> ????????<LinearGradientBrush?x:Key="MainColor"?EndPoint="0.5,1"?StartPoint="0.5,0"> ????????????<GradientStop?Color="#FF020621"?Offset="0"/> ????????????<GradientStop?Color="#FF364BD8"?Offset="1"/> ????????????<GradientStop?Color="#FF5A6BD8"?Offset="0.499"/> ????????</LinearGradientBrush> ????????<ControlTemplate?x:Key="CarTemplate"?TargetType="map:Pushpin"> ????????????<Grid?ToolTip="物資車輛"> ????????????????<Ellipse?Width="35"?Height="35"?Fill="White"?StrokeThickness="3"?Stroke="Red"/> ????????????????<Image?Source="pack://application:,,,/WPFDevelopers.Samples;component/Images/AMap/Car2.png"?Width="25"?Height="25"/> ????????????</Grid> ????????</ControlTemplate> ????????<SineEase?x:Key="SineOut"?EasingMode="EaseOut"?/> ????????<Storyboard?x:Key="AnimateRound"?RepeatBehavior="Forever"> ????????????<DoubleAnimation?Storyboard.TargetProperty="ScaleX"?Storyboard.TargetName="Scale" ?????????????????????????????Duration="0:0:01"?To="2"? ?????????????????????????????EasingFunction="{StaticResource?SineEaseOut}"?/> ????????????<DoubleAnimation?Storyboard.TargetProperty="ScaleY"?Storyboard.TargetName="Scale" ?????????????????????????????Duration="0:0:01"?To="2"? ?????????????????????????????EasingFunction="{StaticResource?SineEaseOut}"?/> ????????????<DoubleAnimation?Storyboard.TargetProperty="Opacity"?? ?????????????????????????????Duration="0:0:01"?To="0"? ?????????????????????????????EasingFunction="{StaticResource?SineEaseOut}"?/> ????????</Storyboard> ????????<Style?x:Key="alarmStyle"?TargetType="map:Pushpin"> ????????????<Setter?Property="PositionOrigin"?Value="Center"/> ????????????<Setter?Property="Width"?Value="60"/> ????????????<Setter?Property="Height"?Value="60"/> ????????????<Setter?Property="Template"> ????????????????<Setter.Value> ????????????????????<ControlTemplate?TargetType="map:Pushpin"> ????????????????????????<Grid> ????????????????????????????<Ellipse?Height="40"?Width="40"?Fill="Red"?RenderTransformOrigin="0.5,0.5"> ????????????????????????????????<Ellipse.OpacityMask> ????????????????????????????????????<RadialGradientBrush> ????????????????????????????????????????<GradientStop?Offset="0"?Color="Transparent"?/> ????????????????????????????????????????<GradientStop?Offset="1"?Color="Black"?/> ????????????????????????????????????</RadialGradientBrush> ????????????????????????????????</Ellipse.OpacityMask> ????????????????????????????????<Ellipse.RenderTransform> ????????????????????????????????????<ScaleTransform?x:Name="Scale"/> ????????????????????????????????</Ellipse.RenderTransform> ????????????????????????????????<Ellipse.Triggers> ????????????????????????????????????<EventTrigger?RoutedEvent="Loaded"> ????????????????????????????????????????<BeginStoryboard?Storyboard="{StaticResource?AnimateRound}"> ????????????????????????????????????????</BeginStoryboard> ????????????????????????????????????</EventTrigger> ????????????????????????????????</Ellipse.Triggers> ????????????????????????????</Ellipse> ????????????????????????????<Viewbox?Width="30"?Height="30"? ?????????????????????????????????????VerticalAlignment="Top"? ?????????????????????????????????????HorizontalAlignment="Center" ?????????????????????????????????????Margin="20,0,0,0"> ????????????????????????????????<Path?Data="{StaticResource?PathFlag}"?Fill="Orange"/> ????????????????????????????</Viewbox> ????????????????????????</Grid> ????????????????????</ControlTemplate> ????????????????</Setter.Value> ????????????</Setter> ????????</Style> ????</UserControl.Resources> ????<Grid> ????????<map:Map?x:Name="map"?ZoomLevel="5"?Center="39.9132801985722,116.392009995601" ??????????????????CredentialsProvider="AgXB7m7fVYxKpjEZV9rGdrRPvLgawYhi4Wvw99kk4RDspoalC3B_vQ8GKJAoxrve"> ????????????<map:Map.Mode> ????????????????<map:MercatorMode/> ????????????</map:Map.Mode> ????????????<local:AMapTitleLayer/> ????????????<map:MapItemsControl?ItemsSource="{Binding?PushpinArray,RelativeSource={RelativeSource?AncestorType=local:BingAMapExample}}"> ????????????????<map:MapItemsControl.ItemTemplate> ????????????????????<DataTemplate> ????????????????????????<map:Pushpin?Location="{Binding?Location}"?Cursor="Hand"? ?????????????????????????????????????MouseDown="Pushpin_MouseDown" ?????????????????????????????????????ToolTip="{Binding?Title}" ?????????????????????????????????????????Background="Red"> ????????????????????????????<TextBlock?Text="{Binding?ID}"/> ????????????????????????</map:Pushpin> ????????????????????</DataTemplate> ????????????????</map:MapItemsControl.ItemTemplate> ????????????</map:MapItemsControl> ????????????<map:Pushpin?Location="36.6797276003243,118.495410536117"?Style="{StaticResource?alarmStyle}"/> ????????????<Canvas?Width="50"?Height="80"? ??????????????map:MapLayer.Position="31.9121578992881,107.233555852083"? ??????????????map:MapLayer.PositionOrigin="BottomCenter"?Opacity="0.7"> ????????????????<Path?Data="M?0,0?L?50,0?50,50?25,80?0,50?0,0"?Fill="ForestGreen"?Stroke="Wheat"?StrokeThickness="2"?/> ????????????????<TextBlock?FontSize="10"?Foreground="White"?Padding="10"?TextAlignment="Center"> ????????????????????????這里是?<LineBreak?/> ????????????????????????四川?<LineBreak?/> ????????????????????????通江縣?<LineBreak?/> ????????????????</TextBlock> ????????????</Canvas> ????????????<map:MapLayer?x:Name="CarLayer"/> ????????</map:Map> ????????<DockPanel> ????????????<Grid?DockPanel.Dock="Top"> ????????????????<Path?Data="M75.811064,0?L275.81107,0?275.81107,39.999999?267.12714,39.999999?267.12798,40.000499?67.127973,40.000499?0,0.00050140842?75.811064,0.00050140842?z" ??????????????Width="200"?Height="30"?Stretch="Fill"?Opacity=".8"?Stroke="#FFCCFEFF"?StrokeThickness="1.5"?Fill="{StaticResource?MainColor}"> ????????????????????<Path.RenderTransform> ????????????????????????<SkewTransform?AngleX="-40"/> ????????????????????</Path.RenderTransform> ????????????????</Path> ????????????????<TextBlock?Text="預(yù)警指揮平臺"?Foreground="White"? ???????????????????????????VerticalAlignment="Center"?HorizontalAlignment="Center" ???????????????????????????FontSize="16"?FontWeight="Black"/> ????????????</Grid> ????????????<Grid?DockPanel.Dock="Left"?Width="200" ??????????????????HorizontalAlignment="Left"?> ????????????????<Grid.RowDefinitions> ????????????????????<RowDefinition?Height="Auto"/> ????????????????????<RowDefinition/> ????????????????????<RowDefinition?Height="Auto"/> ????????????????</Grid.RowDefinitions> ????????????????<Rectangle?Grid.RowSpan="3"?Fill="#FF364BD8"?Opacity=".8"?Stroke="#FFCCFEFF"?StrokeThickness="1.5"/> ????????????????<TextBlock?Text="數(shù)據(jù)信息"?FontSize="16"?Foreground="White"?Margin="10,10,0,0"/> ????????????????<ItemsControl?ItemsSource="{Binding?PushpinArray,RelativeSource={RelativeSource?AncestorType=local:BingAMapExample}}" ??????????????????????????????Margin="4,10"?Grid.Row="1"> ????????????????????<ItemsControl.ItemTemplate> ????????????????????????<DataTemplate> ????????????????????????????<Grid?Margin="4"?x:Name="PART_Grid" ??????????????????????????????????MouseLeftButtonDown="PART_Grid_MouseLeftButtonDown" ??????????????????????????????????Tag="{Binding?ID}"> ????????????????????????????????<Grid.Resources> ????????????????????????????????????<Style?TargetType="TextBlock"> ????????????????????????????????????????<Setter?Property="Foreground"?Value="White"/> ????????????????????????????????????????<Setter?Property="FontSize"?Value="16"/> ????????????????????????????????????</Style> ????????????????????????????????</Grid.Resources> ????????????????????????????????<Grid.ColumnDefinitions> ????????????????????????????????????<ColumnDefinition?Width="Auto"/> ????????????????????????????????????<ColumnDefinition/> ????????????????????????????????</Grid.ColumnDefinitions> ????????????????????????????????<Ellipse?Width="20"?Height="20"?Fill="OrangeRed"/> ????????????????????????????????<TextBlock?Text="{Binding?ID}"?HorizontalAlignment="Center"/> ????????????????????????????????<TextBlock?Margin="4,0"?Grid.Column="1"?Text="{Binding?Title}"/> ????????????????????????????</Grid> ????????????????????????????<DataTemplate.Triggers> ????????????????????????????????<Trigger?Property="IsMouseOver"?Value="True"> ????????????????????????????????????<Setter?Property="Background"?TargetName="PART_Grid"?Value="#FF020621"/> ????????????????????????????????</Trigger> ????????????????????????????</DataTemplate.Triggers> ????????????????????????</DataTemplate> ????????????????????</ItemsControl.ItemTemplate> ????????????????</ItemsControl> ????????????????<Button?Content="物資軌跡"?Click="BtnCar_Click"?Grid.Row="2"?Height="40"?Style="{StaticResource?PrimaryButton}"/> ????????????</Grid> ????????</DockPanel> ????</Grid> </UserControl>
4)新建 BingAMapExample.xaml.cs
邏輯代碼如下:
點擊左側(cè)列表的point
點地圖定位到并放大層級到16級。
using?Microsoft.Maps.MapControl.WPF; using?System; using?System.Collections; using?System.Collections.Generic; using?System.Linq; using?System.Windows; using?System.Windows.Controls; using?System.Windows.Input; using?System.Windows.Media; using?System.Windows.Threading; namespace?WPFDevelopers.Samples.ExampleViews { ????///?<summary> ????///?BingAMapExample.xaml?的交互邏輯 ????///?</summary> ????public?partial?class?BingAMapExample?:?UserControl ????{ ????????private?LocationCollection?_polyLocations; ????????private?MapPolyline?mapPolyline; ????????private?Pushpin?carPushpin; ????????private?DispatcherTimer?dispatcherTimer; ????????private?List<Location>?locations; ????????public?IEnumerable?PushpinArray ????????{ ????????????get?{?return?(IEnumerable)GetValue(PushpinArrayProperty);?} ????????????set?{?SetValue(PushpinArrayProperty,?value);?} ????????} ????????public?static?readonly?DependencyProperty?PushpinArrayProperty?= ????????????DependencyProperty.Register("PushpinArray",?typeof(IEnumerable),?typeof(BingAMapExample),?new?PropertyMetadata(null)); ????????public?BingAMapExample() ????????{ ????????????InitializeComponent(); ????????????var?pushpins?=?new?List<PushpinModel>(); ????????????pushpins.Add(new?PushpinModel?{?ID?=?1,?Location?=?new?Location(39.8151940395589,?116.411970893135),?Title?=?"和義東里社區(qū)"?}); ????????????pushpins.Add(new?PushpinModel?{?ID?=?2,?Location?=?new?Location(39.9094878843105,?116.33299936282),?Title?=?"中國水科院南小區(qū)"?}); ????????????pushpins.Add(new?PushpinModel?{?ID?=?3,?Location?=?new?Location(39.9219204792284,?116.203500574855),?Title?=?"石景山山姆會員超市"?}); ????????????pushpins.Add(new?PushpinModel?{?ID?=?4,?Location?=?new?Location(39.9081417418219,?116.331244439925),?Title?=?"茂林居小區(qū)"?}); ????????????PushpinArray?=?pushpins; ????????????_polyLocations?=?new?LocationCollection(); ?????????? ????????????_polyLocations.Add(new?Location(39.9082973053021,?116.63105019548)); ????????????_polyLocations.Add(new?Location(31.9121578992881,?107.233555852083)); ????????????mapPolyline?=?new?MapPolyline ????????????{ ????????????????Stroke?=?Brushes.Green, ????????????????StrokeThickness?=?2, ????????????????Locations?=?_polyLocations, ????????????}; ????????????CarLayer.Children.Add(mapPolyline); ????????????carPushpin?=?new?Pushpin ????????????{ ????????????????Template?=?this.Resources["CarTemplate"]?as?ControlTemplate, ????????????????Location?=?new?Location(31.9121578992881,?107.233555852083), ????????????????PositionOrigin?=?PositionOrigin.Center, ????????????}; ????????????CarLayer.Children.Add(carPushpin); ????????????dispatcherTimer?=?new?DispatcherTimer(); ????????????dispatcherTimer.Interval?=?TimeSpan.FromSeconds(1.5); ????????????dispatcherTimer.Tick?+=?DispatcherTimer_Tick; ????????} ????????int?index?=?0; ????????private?void?DispatcherTimer_Tick(object?sender,?EventArgs?e) ????????{ ????????????if?(index?<?0) ????????????{ ????????????????index?=?locations.Count?-?1; ????????????????dispatcherTimer.Stop(); ????????????????return; ????????????} ????????????carPushpin.Location?=?locations[index]; ????????????index--; ????????} ????????private?void?BtnCar_Click(object?sender,?RoutedEventArgs?e) ????????{ ????????????locations?=?new?List<Location>(); ????????????locations.Add(new?Location(39.9082973053021,?116.63105019548)); ????????????locations.Add(new?Location(39.0654365763652,?115.513103745601)); ????????????locations.Add(new?Location(38.5861378332358,?114.897869370601)); ????????????locations.Add(new?Location(38.0690298850334,?114.238689683101)); ????????????locations.Add(new?Location(37.4436424646135,?113.491619370601)); ????????????locations.Add(new?Location(36.8833163124675,?112.832439683101)); ????????????locations.Add(new?Location(36.6015984304246,?112.480877183101)); ????????????locations.Add(new?Location(36.2125510101126,?112.041424058101)); ????????????locations.Add(new?Location(35.6074752751952,?111.426189683101)); ????????????locations.Add(new?Location(34.9977887035825,?110.591228745601)); ????????????locations.Add(new?Location(34.456028305434,?109.932049058101)); ????????????locations.Add(new?Location(33.9836399832877,?109.580486558101)); ????????????locations.Add(new?Location(33.5086116028286,?108.965252183101)); ????????????locations.Add(new?Location(33.1046158275268,?108.525799058101)); ????????????locations.Add(new?Location(32.6617655474571,?108.042400620601)); ????????????locations.Add(new?Location(32.179523137361,?107.515056870601)); ????????????locations.Add(new?Location(31.9121578992881,?107.233555852083)); ????????????index?=?locations.Count?-?1; ????????????dispatcherTimer.Start(); ????????} ????????private?void?Map_MouseDown(object?sender,?MouseButtonEventArgs?e) ????????{ ????????????Point?mousePosition?=?e.GetPosition(this); ????????????Location?pinLocation?=?this.map.ViewportPointToLocation(mousePosition); ????????} ????????private?void?Pushpin_MouseDown(object?sender,?MouseButtonEventArgs?e) ????????{ ????????????var?model?=?sender?as?Pushpin; ????????????map.Center?=?model.Location; ????????????map.ZoomLevel?=?16; ????????} ????????private?void?PART_Grid_MouseLeftButtonDown(object?sender,?MouseButtonEventArgs?e) ????????{ ????????????var?grid?=?sender?as?Grid; ????????????var?model?=?PushpinArray.OfType<PushpinModel>().FirstOrDefault(x?=>?x.ID.Equals(grid.Tag)); ????????????map.Center?=?model.Location; ????????????map.ZoomLevel?=?16; ????????} ????} }
效果
到此這篇關(guān)于詳解WPF如何使用必應(yīng)地圖控件的文章就介紹到這了,更多相關(guān)WPF必應(yīng)地圖控件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity3D Shader實現(xiàn)動態(tài)星空
這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實現(xiàn)動態(tài)星空,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04C#匿名方法與Delegate類型轉(zhuǎn)換錯誤分析
這篇文章主要介紹了C#匿名方法與Delegate類型轉(zhuǎn)換錯誤,較為詳細(xì)的分析了C#匿名方法的用法及Delegate類型轉(zhuǎn)換錯誤問題解決方法,具有一定的實用價值,需要的朋友可以參考下2014-11-11C#基于Socket套接字的網(wǎng)絡(luò)通信封裝
這篇文章主要為大家詳細(xì)介紹了C#基于Socket套接字的網(wǎng)絡(luò)通信封裝本文實例為大家分享了Java實現(xiàn)圖片旋轉(zhuǎn)的具體代碼,供大家參考,具體內(nèi)容如下2021-11-11C#探秘系列(四)——GetHashCode,ExpandoObject
這篇繼續(xù)分享下GetHashCode和ExpandoObject這兩個比較好玩的方法。2014-05-05c#不使用系統(tǒng)api實現(xiàn)可以指定區(qū)域屏幕截屏功能
這篇文章主要介紹了不使用系統(tǒng)API通過純c#實現(xiàn)屏幕指定區(qū)域截屏功能,截屏后還可以保存圖象文件,大家參考使用吧2014-01-01