WPF编程--地图控件GMap使用

这篇具有很好参考价值的文章主要介绍了WPF编程--地图控件GMap使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

​编辑

1.环境

2. NuGet导入依赖

3.  添加MapControl类

4. 编辑MainView.xaml.cs

5. 编辑MainView.xaml

6. 启动验证


WPF编程--地图控件GMap使用

源码: https://github.com/liugang198409/WpfDemo/tree/master/GMapDemo 

视频:WPF编程--地图控件GMap_哔哩哔哩_bilibili

1.环境

VVisual Studio 2019 + .NET Framework 4.8.1

2. NuGet导入依赖

导入依赖GMap.NET.Presentation

WPF编程--地图控件GMap使用

3.  添加MapControl类

using GMap.NET;
using GMap.NET.MapProviders;
using GMap.NET.Projections;
using GMap.NET.WindowsPresentation;
using System;

namespace GMapDemo
{
    public class MapControl : GMapControl
    {
        public long ElapsedMilliseconds;
    }

    public abstract class AMapProviderBase : GMapProvider
    {
        public AMapProviderBase()
        {
            MaxZoom = null;
            RefererUrl = "https://www.amap.com/";
        }

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

        GMapProvider[] overlays;

        public override GMapProvider[] Overlays
        {
            get
            {
                if (overlays == null)
                {
                    overlays = new GMapProvider[] { this };
                }
                return overlays;
            }
        }
    }

    public class AMapProvider : AMapProviderBase
    {
        public static readonly AMapProvider Instance;
        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;
            }
        }
        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, num, pos.X, pos.Y, zoom);
            string url = string.Format(UrlFormat, pos.X, pos.Y, zoom);
            Console.WriteLine("url:" + url);
            return url;
        }

        //static readonly string UrlFormat = "http://webrd04.is.autonavi.com/appmaptile?x={0}&y={1}&z={2}&lang=zh_cn&size=1&scale=1&style=7";
        static readonly string UrlFormat = "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={0}&y={1}&z={2}";
    } 

}

4. 编辑MainView.xaml.cs

using GMap.NET;
using System;
using System.Windows;
using System.Windows.Input;

namespace GMapDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Rect rc = SystemParameters.WorkArea; //获取工作区大小
            this.Left = 0; //设置位置
            this.Top = 0;
            this.Width = rc.Width;
            this.Height = rc.Height;
            this.Map_Loaded();//加载地图
        }

        private void Map_Loaded()
        {
            try
            {
                System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("ditu.google.cn");
            }
            catch
            {
                MainMap.Manager.Mode = AccessMode.CacheOnly;
                System.Windows.MessageBox.Show("没有可用的internet连接,正在进入缓存模式!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            MainMap.CacheLocation = Environment.CurrentDirectory + "\\GMapCache\\"; //缓存位置
            MainMap.MapProvider = AMapProvider.Instance; //加载高德地图
            MainMap.MinZoom = 2;  //最小缩放
            MainMap.MaxZoom = 17; //最大缩放
            MainMap.Zoom = 8;     //当前缩放
            MainMap.ShowCenter = false; //不显示中心十字点
            MainMap.DragButton = MouseButton.Left; //右键拖拽地图
            MainMap.Position = new PointLatLng(39.909149, 116.397486); //地图中心位置:北京
            //MainMap.MouseLeftButtonDown += new MouseButtonEventHandler(mapControl_MouseLeftButtonDown);
        }

    }
}

5. 编辑MainView.xaml

<Window x:Class="GMapDemo.MainWindow"
        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:src="clr-namespace:GMapDemo"
        xmlns:local="clr-namespace:GMapDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <src:MapControl Grid.Row="0" x:Name="MainMap" Zoom="13" MaxZoom="24" MinZoom="1"/>
    </Grid>
</Window>

6. 启动验证

WPF编程--地图控件GMap使用文章来源地址https://www.toymoban.com/news/detail-497718.html

到了这里,关于WPF编程--地图控件GMap使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 界面控件DevExpress WPF富文本编辑器,让系统拥有Word功能(二)

    DevExpress WPF控件的富文本编辑器允许开发者将文字处理功能集成到下一个WPF项目中,凭借其全面的文本格式选项、邮件合并以及丰富的终端用户选项集合,可以轻松地提供Microsoft Word功能。 DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用

    2024年02月06日
    浏览(35)
  • 界面控件DevExpress WPF数据编辑器组件,让数据处理更灵活!(二)

    界面控件DevExpress WPF编辑器库可以帮助用户提供直观的用户体验,具有无与伦比的运行时选项和灵活性。WPF数据编辑器提供了全面的掩码和数据验证支持,可以独立使用,也可以作为容器控件(如DevExpress WPF Grid和WPF TreeList)中的单元格编辑器使用。 在上文中(点击这里回顾),

    2024年02月16日
    浏览(37)
  • WPF图形控件使用之-Line线控件使用

    在项目中有的时候可能会用的画虚线或者设置线的流动效果,这个时候可能会使用到线控件。 属性 说明 描述 X1 起始x轴坐标 X1=\\\"10\\\" Y1 起始Y轴坐标 Y1=\\\"10\\\" X2 结束X轴坐标 X2=\\\"100\\\" Y2 结束Y轴坐标 Y2=\\\"100\\\" Stroke 线条颜色 Stroke=\\\"Red\\\" StrokeThickness 线条粗细 StrokeThickness=\\\"2\\\" StrokeDashArray 设置

    2024年02月13日
    浏览(30)
  • WPF中使用WebView2控件

    WebView2 全称 Microsoft Edge WebView2 控件,此控件的作用是在本机桌面应用中嵌入web技术(html,css,javascript),从名字就可以看出来WebView2使用了Edge内核渲染web内容。 通俗来说,WebView2控件是一个UI组件,允许在桌面应用中提供web能力的集成,即俗称的混合开发。 助力程序开发和

    2024年02月03日
    浏览(38)
  • 如何使用 WPF 用户控件关闭父窗口

    How to close parent windows using WPF User Control 如何使用 WPF 用户控件关闭父窗口 【问题描述】 假设有两个WPF窗口:window1和window2。 window1有一个按钮,单击此按钮将打开window2。window2包含一个用户控件。此用户控件有一个用于关闭window2的按钮。 怎样才能实现这个场景呢? 【解决方案

    2024年02月15日
    浏览(35)
  • 如何在WPF中使用Winform控件

            要在WPF中使用WInform组件,必须将WInform组件放在宿主WindowsFormsHost中.  WindowsFormsHost 是WPF的一个控件,它允许在WPF应用程序中托管Windows Forms控件。 要使用 WindowsFormsHost 控件,您需要在WPF项目中添加对 WindowsFormsIntegration 程序集的引用。这是如何做的步骤: 在解决方案

    2024年02月12日
    浏览(35)
  • 初识WPF——AduSkin控件库的使用

    (一)首先,新建一个WPF项目,我这里选用的就是WPF基于.NET Framework去新建项目。 (二)项目创建好之后,就可以开始进行自己的创作了,我自己也摸索着做了几个简单的界面。 但在这其中有发现了一些WPF和Winform的一些区别: 虽然它们都是用C#语言进行编程,但winform 是前后

    2024年02月05日
    浏览(26)
  • WPF 使用MaterialDesign(开源UI控件库)

             MaterialDesign for WPF 是针对WPF设计的 开源UI框架 ,使用该UI框架可以很方便使用各种封装好的绚丽的控件,方便快速设计UI界面。 官网链接:http://materialdesigninxaml.net/ MaterialDesign Github源码链接:https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit 本篇实例链接:htt

    2024年02月14日
    浏览(26)
  • 【WPF应用39】WPF 控件深入解析:SaveFileDialog 的属性与使用方法

    在 Windows Presentation Foundation (WPF) 中,SaveFileDialog 控件是一个非常重要的文件对话框,它允许用户在文件系统中选择一个位置以保存文件。这个控件提供了很多属性,可以自定义文件对话框的显示内容和行为。 本文将详细介绍 SaveFileDialog 控件的属性和功能,如何在 WPF 应用程序

    2024年04月12日
    浏览(35)
  • 手把手一起使用开源WPF控件HandyControl

    首先创建WPF工程 点击工具-NuGet包管理器-管理解决方案的NuGet程序包,如图所示: 直接搜索HandyControl,如图所示: 点击安装: 安装完成: 在App.xaml中加入如下代码: 如图所示: 工具箱中已新增HandyControl,可以开始使用,如图所示: HandyControl: https://github.com/NaBian/HandyControl 希

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包