首页 > 其他分享 >关于Gmap.Net在WPF中的运用笔记(一)初步加载高德地图

关于Gmap.Net在WPF中的运用笔记(一)初步加载高德地图

时间:2024-10-16 14:48:57浏览次数:7  
标签:mapControl 地图 高德 using Net Gmap public

一、前言
最近公司需要开发一个车辆在途轨迹追踪的软件,结合现有系统和技术体系,最终敲定使用WPF+Gmap.Net来实现,这里将一些坑踩一下,做个笔记记录一下。
二、项目搭建
本项目基于.Net6.0+Gmap.Net.Core+Gmap.Net.WinPresentation,前面是用到的框架版本,后面则是需要用到的地图包,可通过visual studio编辑器的包管理下载

三、Gmap.Net简介
‌GMap.NET is great and Powerful, Free, cross platform, open source .NET control. Enable use routing, geocoding, directions and maps from Coogle, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yendux, Mapy.cz, Maps.lt, iKarte.lv, NearMap, OviMap, CloudMade, WikiMapia, MapQuest in Windows Forms & Presentation, supports caching and runs on windows mobile!
GMap.NET是一个强大、免费、跨平台、开源的.NET控件,它在Windows Forms 和WPF环境中能够使用来自Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等地图,并可以实现寻找路径、地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中。
项目主页:https://greatmaps.codeplex.com/
需要说明的是本笔记只讲述Gmap.Net在WPF中的一些粗浅运用,不涉及Winform相关知识。
四、WPF中使用Gmap.Net
第一步,创建地图控件,地图供应商(本文将使用高德地图来进行演示),正确的显示地图
创建地图控件类MapControl,继承Gmap提供的地图类

点击查看代码
using GMap.NET.MapProviders;
using GMap.NET.Projections;
using GMap.NET;
using GMap.NET.WindowsPresentation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;

namespace WisdomTrack.Views
{
    public class MapControl:GMapControl
    {
    }
}

在窗体的Xaml引用这个地图控件

点击查看代码
<Window x:Class="WisdomTrack.Views.RouteWindow"
        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:local="clr-namespace:WisdomTrack.Views"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="RouteWindow" Height="600" Width="1200"
    <Grid>
            <local:MapControl x:Name="mapControl"> </local:MapControl>
    </Grid>
</Window>
现在,需要给地图添加供应商,以高德地图为例,在Gmap.Net中,存在供应商类GMapProvider,我们需要先继承它 先继承实现一个基类地图供应商
点击查看代码
public abstract class MapProviderBase : GMapProvider
{
    public MapProviderBase()
    {
    }

    public override PureProjection Projection
    {
        get { return MercatorProjection.Instance; }
    }

    GMapProvider[] overlays;
    public override GMapProvider[] Overlays
    {
        get
        {
            if (overlays == null)
            {
                overlays = new GMapProvider[] { this };
            }
            return overlays;
        }
    }
}
需要注意的是,在WPF的Gmap.Net中,是没有图层这一概念的,所有东西都是通过设置Zindex来决定显示,数字越大,越在上层 接下来,生成高德地图的供应商类
点击查看代码
/// <summary>
/// 高德地图
/// </summary>
public class AMapProvider : MapProviderBase
{
    public static readonly AMapProvider Instance;
    static readonly string UrlFormat = "yourSDK";

    readonly Guid id = new Guid("EF3DD303-3F74-4938-BF40-232D0595EE88");
    public override Guid Id
    {
        get { return id; }
    }

    readonly string name = "AMap";
    public override string Name
    {
        get
        {
            return name;
        }
    }

    private AMapProvider()
    {

    }
    static AMapProvider()
    {
        Instance = new AMapProvider();
    }

    //根据坐标和缩放,获取对应的图片。
    public override PureImage GetTileImage(GPoint pos, int zoom)
    {
        string url = MakeTileImageUrl(pos, zoom, LanguageStr);
        return GetTileImageUsingHttp(url);
    }

    string MakeTileImageUrl(GPoint pos, int zoom, string language)
    {
        string url = string.Format(UrlFormat, pos.X, pos.Y, zoom);
        Console.WriteLine("url:" + url);
        return url;
    }

}
添加完后,在窗体的后台代码中,设置地图
点击查看代码
/// <summary>
/// 地图初始化加载
/// </summary>
private void MapLoad()
{
    mapControl.MapProvider = AMapProvider.Instance; //高德 china 地图
    mapControl.Manager.Mode = AccessMode.ServerAndCache;
    mapControl.MinZoom = 2;  //最小缩放
    mapControl.MaxZoom = 18; //最大缩放
    mapControl.Zoom = 10;     //当前缩放
    mapControl.ShowCenter = false; //不显示中心十字点
    mapControl.DragButton = MouseButton.Right; //右键拖拽地图
    mapControl.Position = new PointLatLng(30.66, 104.07); //地图中心位置:南京(纬度,经度)
}
现在,运行应该就可以正确的加载地图了。 ![](/i/l/?n=24&i=blog/1623045/202410/1623045-20241016145226128-1155885675.png) 地图供应商的切换也很简单,只需要设置mapControl.MapProvider即可。 第一部分就到这里,下一篇将介绍如何在地图上添加标注,自定义标注,以及常见图形的绘制

标签:mapControl,地图,高德,using,Net,Gmap,public
From: https://www.cnblogs.com/zhouxiao123/p/18469933

相关文章

  • 我被 .NET8 JIT 的一个BUG反复折磨了半年之久
    很久很久没有写过博客了,正好最近园子又挣得一线生机,必须得凑个热闹水一篇.事情是这样的,在今年的早些时候,把公司的一部分api服务器的.net版本从6升级到了8,毕竟6马上就是EOL了(.NET6TLS到2024年11月12日).没成想在升级完的3个月后竟然触发了一个.NET8runtimeJIT的B......
  • (系列七).net8 Aop切面编程
    说明  该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。   该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。   说明:OverallAuth2.0是一个简单、易懂、功能强大的权限+可视化流程管理系统。友情提醒:本篇文章是属于系......
  • Netflow配置开启
    router:ipflow-exportsourcelo1ipflow-exportversion5ipflow-exportdestination172.29.8.569996interfaceg0/0/0ipflowingressipflowegressinterfaceg0/0/1ipflowingressipflowegressASA:flow-exportdestinationDMZ172.29.12.1209996access-list......
  • 神经网络之卷积篇:详解残差网络为什么有用?(Why ResNets work?)
    详解残差网络为什么有用?为什么ResNets能有如此好的表现,来看个例子,它解释了其中的原因,至少可以说明,如何构建更深层次的ResNets网络的同时还不降低它们在训练集上的效率。通常来讲,网络在训练集上表现好,才能在Hold-Out交叉验证集或dev集和测试集上有好的表现,所以至少在训练集上训练......
  • R语言使用caret包构建神经网络模型(Neural Network )构建回归模型实战、通过method参数
    R语言使用caret包构建神经网络模型(NeuralNetwork )构建回归模型实战、通过method参数指定算法名称目录R语言使用caret包构建神经网络模型(NeuralNetwork )构建回归模型、通过method参数指定算法名称 #导入包和库#仿真数据#R语言使用caret包构建随机森林模型(randomfore......
  • 【K8s】专题十四(2):Kubernetes 安全机制之 Security Context
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口| 精选文章 | Kubernetes |Docker |Linux |羊毛资源 | 工具推荐 |往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决......
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)3.5-3.
    目录第四门课卷积神经网络(ConvolutionalNeuralNetworks)第三周目标检测(Objectdetection)3.5BoundingBox预测(Boundingboxpredictions)3.6交并比(Intersectionoverunion)第四门课卷积神经网络(ConvolutionalNeuralNetworks)第三周目标检测(Objectdetection......
  • 自然语言处理之语音识别:Convolutional Neural Networks (CNN):深度学习与神经网络基础
    自然语言处理之语音识别:ConvolutionalNeuralNetworks(CNN):深度学习与神经网络基础深度学习与神经网络基础subdir1.1:神经网络的基本概念神经网络是一种模仿人脑神经元结构的计算模型,用于处理复杂的数据模式识别和预测问题。它由输入层、隐藏层和输出层组成,每一层......
  • 自然语言处理之语音识别:Convolutional Neural Networks(CNN):语音识别导论
    自然语言处理之语音识别:ConvolutionalNeuralNetworks(CNN):语音识别导论自然语言处理与语音识别基础自然语言处理概览自然语言处理(NLP)是人工智能领域的一个重要分支,它关注如何使计算机能够理解、解释和生成人类语言。NLP技术广泛应用于文本分类、情感分析、机器翻译、......
  • 自然语言处理之语音识别:Convolutional Neural Networks(CNN)与迁移学习_
    自然语言处理之语音识别:ConvolutionalNeuralNetworks(CNN)与迁移学习自然语言处理与语音识别基础自然语言处理概览自然语言处理(NLP)是人工智能领域的一个重要分支,它关注如何使计算机能够理解、解释和生成人类语言。NLP技术广泛应用于文本分类、情感分析、机器翻译、问......