GMap.NET是一个强大、免费、跨平台、开源的.NET控件,它在Windows Forms 和WPF环境中能够使用来自Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等地图,并可以实现寻找路径、地理编码以及地图展示功能,并支持缓存和运行在Mobile环境中。
现在我们来谈谈GMap的加载。
1、下载dll文件。
GMap主页
其中有三类dll,一定要下载的是.core其余连个根据项目的开发需要下载,因为我使用的是winfrom开发,所以下载的是前两个。
GMap.Net.Core:核心DLL
GMap.Net.WindowsForms:WinForm中使用的DLL
GMap.NET.WindowsPresentation:WPF中使用的DLL
2、添加对dll的引用
新建项目后再项目的引用中添加关于GMap的引用
3、将GMap添加到工具箱
GMap说到底是个控件,要对她方便的使用,工具箱是必不可少的
首先在工具箱中打开选择项
选择.NET Framework组件,筛选或自己找到GMapControl控件选择添加。
如果没有,就打开浏览,添加该组件。
4、从工具箱中使用
到现在,我们终于可以在工具箱中找到我们的GMapControl控件了。
现在我们来谈谈GMap的基本实现
1、我们新建一个MapControl的用户控件,让他继承自GMapControl(这样他就自动获取了GMap控件,不用自己添加了),代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using GMap.NET.WindowsForms;
namespace GMap
{
public partial class MapControl : GMapControl
{
public MapControl()
{
InitializeComponent();
}
}
}
2、编译项目,这样我们在工具箱中就可以找到我们自己的用户控件。
3、在主窗体中添加MapControl控件。
4、在主窗体中添加代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using GMap.NET;
using GMap.NET.WindowsForms;
using GMap.NET.MapProviders;
using GMap.NET.WindowsForms.Markers;
namespace GMap
{
public partial class MapFrom : Form
{
private GMapOverlay markersOverlay = new GMapOverlay("markers");//放置marker的图层
public MapFrom()
{
InitializeComponent();
try
{
System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("ditu.google.cn");
}
catch
{
mapControl1.Manager.Mode = AccessMode.CacheOnly;
MessageBox.Show("no internet connection avaible avaible ,goning to CacheOnly mode", "GMap.NET Demo", MessageBoxButtons.OK);
}
mapControl1.CacheLocation = Environment.CurrentDirectory + "\\GMApCache\\";//缓存位置
mapControl1.MapProvider = GMapProviders.GoogleChinaMap;//googlechina地图
mapControl1.MinZoom = 2;//最小比例
mapControl1.MaxZoom = 24;//最大比例
mapControl1.Zoom = 10;//当前比例
mapControl1.ShowCenter = false;//不显示中心十字点
mapControl1.DragButton = System.Windows.Forms.MouseButtons.Left;//左键控制拖拽地图
mapControl1.Position = new PointLatLng(32.064, 118.704);//中心位置南京
mapControl1.Overlays.Add(markersOverlay);
mapControl1.MouseClick += new MouseEventHandler(mapControl1_MouseClick);
}
private void mapControl1_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button==System.Windows.Forms.MouseButtons.Right)
{
PointLatLng point = mapControl1.FromLocalToLatLng(e.X, e.Y);
GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
markersOverlay.Markers.Add(marker);
MessageBox.Show(point.ToString());
}
}
}
}
这里有一些关键属性需要解释一下:
MapProvider 确定地图提供者,经过测试,goolechina比较优秀,其他的无法加载地图。
MinZoom 控制地图最小比例。
MaxZoom 控制地图最大比例。
Zoom 控制当前比例
mapControl1.DragButton = System.Windows.Forms.MouseButtons.Left;这句解释一下,因为GMap的操作中默认是右键拖动的,但是不符合一般的用户习惯,所以在这里设置为左键拖动。
Position 控制初始中心位置
当然还有图层marker的概念,下次在写。
好了,现在可以编译运行一下这个GMap的小程序,它是一个缩放为10,中心为南京,没有红叉叉,右键显示经纬度的小东西。
导读:直方图和柱状图都是数据分析中非常常见、常用的图表,由于两作者:屈希峰,资深Python工程师,知乎多个专栏作者来源:大数据DT(ID:hzdashuju)01 概述直方图(Histogram),形状类似柱状图却有着与柱状图完全不同的含义。直方图牵涉统计学概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。在平面直角坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频...
原文地址作者:Ross Bulat注:本文并非直译一份用Typescript开发react和redux应用的指南typescript在增强react应用的稳定性,可读性以及易管理性方面一直都处在非常重要的位置上,typescript为React和其他javascript前端框架逐步引入了更多的支持;从3.0版本和3.1版本之后显著增强了许多功能。在过去,typescript集成到react...
软件Help->About信息,软件下载地址:https://fte.com/support/download.aspx?demo=Sodera&iid=CS&Product=18.11.17745.25071https://fte.com/support/WPS-download.aspx?demo=Sodera&iid=CS地址下的这个位置:支持完整的蓝牙5.2支持请使用网站上提供的无线协议套件软件或从上面的链接。...
由于Google的Android Scripting项目SL4A,开发者可以使用脚本语言来开发Android应用,比如Python、Perl、JRuby、Lua、shell等,都可在Android上执行。不过使用它并不能帮助创建一个易安装、自包含可执行二进制文件的Python应用。因此,一个新的旨在让在Android系统上发布Python更加容易的项目——Python for Android推出了...
VB NET JSON解析这几天在做MQTT消息订阅的应用,消息公司采用JSON数据格式,于是意识兴起,自己写了一个JSON解析类,代码大部分参考JAVA的JSON解析类完成,类的命名都与JAVA的解析类完全已有,里面的方法也几乎一样,仅有少量差异。可能在一些转义符上会有点问题,这个我没有完整验证,如果右问题修改一下转义符的地方就可以了,其它都做过验证了,应该没啥大问题。完整代码如下:JSON 类,与JAVA的JSON基本一样Public Class JSON ''' <summary&
时间 时间教会了我们很多东西有些曾经我们认为没有的后来发现它确确实实存在过有一些我们深信不疑的 后来却明白根本就没有比如……爱情目录项目地址编译问题效果图功能介绍DownloadManagerUpdateConfiguration使用步骤Demo下载体验结语编译问题因为适配了Android O的通知栏,所以依赖的v7包版本比较高appcompa
matlab 调用 python 程序1.将 matlab 与 python 关联pyversion执行命令 pyversion filepath其中 filepath 为 python 程序所用的解释器的绝对路径,如 D:\Anaconda3\python.exe详见pyversion官方文档2.调用python程序 cd 'E:\python_project\visual_...
本文针对关系型数据库的一般语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。一、基本概念数据库术语数据库(database)- 保存有组织的数据的容器(通常是一个文件或一组文件...
51单片机C语言延时函数怎么定义C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。定义一个延时xms毫秒的延时函数void ..._1671465600
最近在学习前端,虽说前端入门简单,但是要学深入是真的不容易。学前端,最基础的就是三剑客,html,css,javascrpit了而js更是重点中的重点,javascript虽然和java名字很像,但是和java是完全不一样啊。习惯了c和java的我对于js的变量提升,闭包,原型都是一脸懵逼啊..好了现在写正事,仔细探讨一下js中的==,!==,===,!===1.==和
首先要登陆 ssh然后登陆数据库#mysql -uroot -p密码默认情况下,mysql安装好之后,会存在匿名用户,也可以叫空用户,输入mysql之后直接回车便可进入mysql。该匿名用户具有一定的权限,通过SHOW DATABASES;可以查看到information_schema数据库。删除语句很简单,用具有对应用户权限的用户登录,比如root。可以先查询一下空用户: SELECTuser,host,passwordFROMmysql.user; ...
广告关闭腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元!它使您可以跟os一样调用相关方法,这对从python内部进行自动化工作流和任务很有用。 importshsh.pwd()sh.mkdir(new_folder)sh.touch(new_file.txt)sh.whoami()sh.echo(this isgreat! uid生成通用唯...