大家好,已经很久没有更新了,今天写一篇关于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. 通过mockjs来制作假数据

    需用用到的模块为express和mockjs //导入模块开启服务器模块 const express=require('express') //导入假数据模块 const mockjs=require ...

  2. Redis系列一 - 入门篇

    问:项目中为何要选用Redis? 答:传统的关系型数据库(如MySQL)已经不适用所有的场景了,比如美云销抢单活动的库存扣减,APP首页的访问流量高峰等等,都容易把数据库打崩,所以引入了缓存中间件,目 ...

  3. 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...

  4. docker 技术全面整理

    docker 和 vm 虚拟机技术比较像,但又有一些区别. vm 像真机一样有 BIOS ,有硬盘,有网卡,声卡,可以安装操作系统, win7 win10 macOS ubuntu centOS,有好 ...

  5. 利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息

    一.分析网站内容 本次爬取网站为opgg,网址为:” http://www.op.gg/champion/statistics” 由网站界面可以看出,右侧有英雄的详细信息,以Garen为例,胜率为53 ...

  6. MongoDB TTL索引的使用

    目录 一.TTL索引介绍 二.TTL索引运行逻辑 三.TTL索引的限制 四.TTL索引的使用场景 1. 指定具体的过期时间属性 2. 插入一个具体的过期时间 3. TTL属性的修改(collMod) ...

  7. Chrome开发者工具之测试应用

    一.Chrome开发者工具简介 浏览器的开发者工具(DevTools)可以帮助开发人员对网页进行布局,比如HTML+CSS,帮助前端工程师更好的调试脚本(JavaScript.jQuery)之类的,还 ...

  8. mybatis探究之延迟加载和缓存

    mybatis探究之延迟加载和缓存 一.什么是延迟加载 1.延迟加载的概念 在mybatis进行多表查询时,并非所有的查询都需要立即进行.例如在查询带有账户信息的用户信息时,我们们并不需要总是在加载用 ...

  9. codevs1743

    http://codevs.cn/problem/1743/ splay区间翻转. 数字在原序列中的位置保存在splay的data[]中.splay中点的编号为原序列的数字大小. 每次pushdown ...

  10. ALSA driver---DPCM

    https://www.kernel.org/doc/html/v4.11/sound/soc/dpcm.html Description Dynamic PCM allows an ALSA PCM ...