大家好,已经很久没有更新了,今天写一篇关于WPF 使用 Gmap.NET 相关的,网上很多Winform的很**,所以我给Wpf进行一些补充。虽然它已经很久没有更新了,但是也只能用这个了。没别的好选择的,毕竟它也没啥可更新的,也可以理解。

  使用它之前请Nuget安装一下GMap.NET.Core、GMap.NET.WindowsPresentation 的库。ok 我们直接开始。

  我们在MainWindows中写上一个WrapPanel 用于存放Gmap的容器。

  <WrapPanel Grid.Row="" Grid.Column="" Grid.RowSpan="" x:Name="mapPanel">

  随后我们在MainWindows构造函数中进行配置,然后给mapPanel中添加了radarMap控件。还有鼠标右击的

public MainWindow()
{
m_viewModel = new ViewModelMain();
InitializeComponent();
radarMap = new GMap.NET.WindowsPresentation.GMapControl();
InitMapControl(radarMap);
this.mapPanel.Children.Add(radarMap);
radarMap.MouseRightButtonUp += RadarMap_MouseRightButtonUp;
this.videoWindows.Child = pictureBox;
DrawWarningArea();
}

  随后在初始化容器中配置一些地图的设置,这里面有一个静态文件,里面也没啥。自己也可以写,我就不把Config写出来了。

 private void InitMapControl(GMap.NET.WindowsPresentation.GMapControl radarMap)
{
//radarMap.Name = "radarMap";
radarMap.Manager.Mode = AccessMode.ServerAndCache;
radarMap.Position = Config.CenterPoint;
radarMap.ShowCenter = false;
radarMap.DragButton = System.Windows.Input.MouseButton.Left;
radarMap.MinZoom = Config.MINZOOM;
radarMap.MaxZoom = Config.MAXZOOM;
radarMap.Zoom = Config.INITZOOM;
radarMap.OnMapZoomChanged += radarMap_OnMapZoomChanged;
}

  这个是鼠标右击添加Marker的,这个就比较恶心了,由于Wpf中没有overlays的概念,所以你就直接添加marker就行。具体看代码,这个里面有个自定义控件。

List<PointLatLng> pointLatlngs = new List<PointLatLng>();
private void RadarMap_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
Point clickPoint = e.GetPosition(radarMap);
PointLatLng point = radarMap.FromLocalToLatLng((int)clickPoint.X, (int)clickPoint.Y);
pointLatlngs.Add(point);
GMapMarker currentMarker = new GMapMarker(point);
{
currentMarker.Shape = new CustomMarker(,currentMarker, "custom position marker");
currentMarker.Offset = new System.Windows.Point(-, -);
currentMarker.ZIndex = int.MaxValue;
radarMap.Markers.Add(currentMarker);
}
}

  具体是写了个控件,要不Wpf没办法渲染上。

<UserControl x:Class="DisplayControlTerminal.Map.CustomMarker"
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:DisplayControlTerminal.Map"
mc:Ignorable="d"
d:DesignHeight="5.75" d:DesignWidth="">
<Image Name="icon" Source="/Resources/bigMarkerGreen.png" VerticalAlignment="Center" HorizontalAlignment="Center" Height="" Margin="1,0,3,3" Width=""/>
</UserControl>

还有那个Circle是在DrawWarningArea里画出来的,调用了里面带参的构造函数,然后里面就不用管了。

private void DrawWarningArea()
{
for (int i = ; i < Config.SCOPE_DIS; i++)
{
GMapMarker it = new GMapMarker(Config.CenterPoint);
it.ZIndex = -;
Circle c = new Circle((i + ).ToString() + "km", (i + ) * );
c.Tag = it;
c.IsHitTestVisible = false;
c.UpdateCircle(radarMap);
it.Shape = c;
radarMap.Markers.Add(it);
Circles.Add(it);
}
GMapMarker crossCenter = new GMapMarker(Config.CenterPoint);
Cross cross = new Cross();
cross.Tag = crossCenter;
cross.SetOffset();
crossCenter.Shape = cross;
//crossCenter.ZIndex = 55;
radarMap.Markers.Add(crossCenter);
//m.Shape = new CustomMarker(this, m, "ceshi");
//m.ZIndex = 55;
//radarMap.Markers.Add(m);
}

  最重要的是如何画轨迹,我第一时间就想到了Pen类,然后根据pointlatlng这个集合我们想办法去搞事情,果不其然,我们只需要让你的硬件设备给你的那 pointLatlngs 集合中添加就行,但如何将经纬度转换成本地坐标 就比较复杂了。

List<PointLatLng> pointLatlngs = new List<PointLatLng>();
private void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = ; i < pointLatlngs.Count; i++)
{
GMapRoute gmRoute = new GMapRoute(new List<PointLatLng>() {
pointLatlngs[i] , pointLatlngs.Count- == i ? pointLatlngs[i] : pointLatlngs[i + ]})
{
Shape = new Line()
{
StrokeThickness = ,
Stroke = System.Windows.Media.Brushes.BlueViolet
}
};
radarMap.Markers.Add(gmRoute);
}
}

最后效果图

WPF使用 Gmap.NET 绘制极坐标运动轨迹的更多相关文章

  1. WPF太阳、地球、月球运动轨迹模拟

    原文:WPF太阳.地球.月球运动轨迹模拟 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/ ...

  2. WPF 使用 Direct2D1 画图 绘制基本图形

    本文来告诉大家如何在 Direct2D1 绘制基本图形,包括线段.矩形.椭圆 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 本文的组 ...

  3. 借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制

    原文:借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制 本文所示例子是借助第三方设计软件,制作复杂的矢量图形,转成与XAML酷似的SVG,再转换成xaml而实现的. 这 ...

  4. WPF中使用amCharts绘制股票K线图

    原文:WPF中使用amCharts绘制股票K线图 本想自己用GDI绘图, 通过数据直接绘制一张蜡柱图, 但觉得这样子的功能比较少, 所以到网上搜索一些能画出K线图的控件. 发现DynamicDataD ...

  5. [原]Wpf应用Path路径绘制圆弧

    1. 移动指令:Move Command(M):M 起始点  或者:m 起始点比如:M 100,240或m 100,240使用大写M时,表示绝对值; 使用小写m时; 表示相对于前一点的值,如果前一点没 ...

  6. 如何在WPF的DiagramControl中绘制一个类型数据关系图的方法

    https://www.devexpress.com/Support/Center/Question/Details/T418156 虽然是在wpf中,但是在win中也可以调用wpf控件,这个太棒了, ...

  7. WPF中在Gmap.net中将Marker动起来

    前一段时间说过一篇绘制极坐标的,这段时间对它进行了改造已经今非昔比了,功能实现了很多,我目的是让Marker动起来,然后还会绘制Route,上篇也就是简单的绘制了Route,没有关于Marker的相关 ...

  8. GMap.Net开发之在WinForm和WPF中使用GMap.Net地图插件

    GMap.NET是什么? 来看看它的官方说明:GMap.NET is great and Powerful, Free, cross platform, open source .NET contro ...

  9. GMap.Net解决方案之在WinForm和WPF中使用GMap.Net地图插件的开发

    在做地理位置相关的开发时,总是面临高额地图引擎费用让大部分用户望而却步,加之地图数据又是天价,那么GMap.NET就是首选了,它本身就是开源免费,服务器可以在本地缓存,以后访问时就可以直接访问. 可以 ...

随机推荐

  1. Levenshtein Distance(编辑距离)算法与使用场景

    前提 已经很久没深入研究过算法相关的东西,毕竟日常少用,就算死记硬背也是没有实施场景导致容易淡忘.最近在做一个脱敏数据和明文数据匹配的需求的时候,用到了一个算法叫Levenshtein Distanc ...

  2. 谈谈集合.Stream Api

    1. 什么是stream API Java8提供的stream API可以让程序员像操作数据库一样操作集合.Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码 ...

  3. 【OO第三次课下讨论】农场主的饲料分配问题

    需求分析与项目设计   本思考题的设计需求是力图找到一个简单且可行的饲料分配方案,由于不涉及到饲料价格或者是营养均衡之类的优化问题,因此在假设总的饲料量必能满足所有动物的热量需求的前提下,我们只需要采 ...

  4. JavaScript入门进阶(二)

    JavaScript进阶入门(二) 转换为数字 使用parseInt() parseInt函数会先查看位置0处的字符,如果该位置不是有效数字,则将返回NaN,如果0处的字符是数字,则将查看位置1处的字 ...

  5. 我要打十个!详解建造者模式(builder pattern)

    前言 "我要打十个",其实是我要打十个野怪! 这十个野怪呢,它们有不同的技能.装备和武器,长得也不一样.这里野怪是一个蛮复杂的对象,由各个不同的部分组成(技能.装备.武器等),不同 ...

  6. 【MVC】使用Jquery缓存数据

    前言 最近接手优化页面加载的任务. 分析其中一个原因是菜单页面ajax异步加载,页面很大,但是除非权限更改或者切换角色,否则每次请求返回数据不变,这个完全可以放在客户浏览器内进行缓存. 分析 粗略一分 ...

  7. 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员点赞的文章!   前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...

  8. 聊聊order by rand()

    总结写在前面: 1. 不建议直接使用order by rand(),原因是执行代价比较大 2. 介绍了内存临时表,对于内存临时表,由于回表不需要访问磁盘,所以往往是用rowid排序,可以减少参与排序字 ...

  9. KEIL编译出现错误“source file is not valid utf-8”

    实际情况是: .h文件一直报错source file is not valid utf-8的错误, 原因就是: 文件中出现了一个中文的“:”导致的.总结就是:如出现此类错误,可能是字符不够标准.

  10. Python科学计算库SymPy初探

    SymPy基础应用 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...