大家好,已经很久没有更新了,今天写一篇关于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. Let’s Encrypt https证书安装

    我的博客: https://www.seyana.life/post/15 现在已经有很多的免费ssl证书提供商,国内的也有, 不过国内政策要求还要把key给他们, 我们还是用Let's Encryp ...

  2. Adobe Premiere Pro 2020破解教程

    首先官网下载Adobe Creative Cloud,安装完之后使用它继续安装Pr.注意在安装之前,点击文件→首选项,先设置一下你的安装路径,没有设置则默认安装在C盘. 接着下载网上良心博主推荐的破解 ...

  3. Layabox enabled 脚本禁用 坑

    从unity入坑到Layabox,真的是一路踩坑啊,今天这个坑叫做 脚本禁用 enabled 问题一: 首先看官方文档 https://ldc2.layabox.com/doc/?nav=zh-ts- ...

  4. 超级干货:动态防御WAF技术原理及编程实战!

    本文带给大家的内容是动态防御WAF的技术原理及编程实战. 将通过介绍ShareWAF的核心技术点,向大家展示动态防御的优势.实现思路,并以编程实战的方式向大家展示如何在WAF产品开发过程中应用动态防御 ...

  5. 内网渗透之权限维持 - MSF

    年初九 天公生 0x034 MSF(美少妇) 启动msf msfconsole 先启动msf依赖的postgresql数据库 初始化数据库 msfdb init (要用普通用户) msf路径 /usr ...

  6. 「从零单排HBase 05」核心特性region split

    HBase拥有出色的扩展性,其中最依赖的就是region的自动split机制. 1.split触发时机与策略 前面我们已经知道了,数据写入过程中,需要先写memstore,然后memstore满了以后 ...

  7. 《JavaScript 模式》读书笔记(2)— 基本技巧2

    前一篇,简单介绍了一些js代码的基本技巧.那么这篇文章,我们继续后续的内容. 一.for循环 for循环经常用在遍历数组或者类数组对象,如引数(arguments)和HTML容器(HTMLCollti ...

  8. 【opencv系列02】OpenCV4.X图像读取与显示

    一.读取图片 opencv中采用imread() 函数读取图像 imread(filename, flags=None)     filename 图片的路径     flags 图像读取方式 ● c ...

  9. Natas21 Writeup(共用session、session注入)

    Natas21: 第一个网页 第二个网页 提示http://natas21.natas.labs.overthewire.org/页面和http://natas21-experimenter.nata ...

  10. Flutter 使用阿里巴巴icon库

    在Flutter默认创建的项目中可以使用系统Material图标,在pubspec.yaml文件中使用图标设置如下: flutter: uses-material-design: true 系统图标如 ...