c#导入地图(一)--地图Gmap的使用

导入地图(联网的话可不进行此步骤)

下载GMap及离线地图

内容包含GMap源码以及地图下载器(用于生成GMDB格式离线地图文件)

下载地址:https://archive.codeplex.com/?p=greatmaps(地址无法找到),我翻资源找到了(链接:https://pan.baidu.com/s/1AFGzkobdj_cIBfEYtC1lQA?pwd=bbj0
提取码:bbj0)
或者私信告诉我邮箱,给你们发。
打开工程:
在这里插入图片描述
VS打开报警告没关系,直接继续
运行软件:
在这里插入图片描述
找到合适的地图,很多地图是无法显示的,我用的这个地图:
在这里插入图片描述

按住alt,鼠标左键框选需要下载的地图,进行地图下载:
在这里插入图片描述
如下,选择“是”就会下载对应Zoom的地图内容,下载完成后就会弹出新一轮的细化,选择下载的Zoom越多,地图占用存储空间越大,看个人需求,我是下载到10,会比较慢。
在这里插入图片描述
不需要细化之后就点击否。进行导出gmdb文件:
在这里插入图片描述

开始开发

新建winform工程

在这里插入图片描述

添加程序包

建立WindowsForms工程后,右键工程->管理NuGet包->下载安装GMap.NET.WindowsForms
在这里插入图片描述

在这里插入图片描述
成功后可以看到工具箱多了控件:
在这里插入图片描述

导入地图

拖动控件GMapControl到窗体,并将之前生成的地图文件放到自己定义的目录下。
输入代码

string mapPath = Application.StartupPath + "\\ChinaMap1To10.gmdb";//地图路径
GMap.NET.GMaps.Instance.ImportFromGMDB(mapPath);//如果使用内部包,直接不要前面这两句
gMapControl1.Manager.Mode = AccessMode.ServerAndCache;
gMapControl1.MapProvider = GMapProviders.OpenCycleMap;
gMapControl1.MinZoom = 4;      //最小比例
gMapControl1.MaxZoom = 18;     //最大比例
gMapControl1.Zoom = 10;        //当前比例
gMapControl1.ShowCenter = false;//不显示中心十字标记
this.gMapControl1.DragButton = System.Windows.Forms.MouseButtons.Left;//左键拖拽地图
gMapControl1.MouseWheelZoomType = MouseWheelZoomType.MousePositionAndCenter;//鼠标缩放模式
gMapControl1.Position = new PointLatLng(28.21,113);//地图中心坐标,(纬度,经度)

ps:直接使用内部地图包比较推荐,感觉demo的作用更像是让你学习怎么使用Gmap,而不是用来下载地图包。

鼠标移动获取经纬度

添加MouseMove事件

private void gMapControl1_MouseMove(object sender, MouseEventArgs e)
{
     PointLatLng point = gMapControl1.FromLocalToLatLng(e.Location.X, e.Location.Y);//获取鼠标位置(FromLocalToLatLng是将数值转换成坐标  )
     label1.Text = point.Lat.ToString("0.000000");
     label2.Text = point.Lng.ToString("0.000000");
 }

在地图上添加标记

在这里插入图片描述
代码:

public GMapOverlay marker_Overlay;
marker_Overlay = new GMapOverlay("marker_Overlay"); //创建一个名为“marker_Overlay”的图层
gMapControl1.Overlays.Add(marker_Overlay);
DrawMarker(marker_Overlay,new PointLatLng(28.221, 113.55377));
public void DrawMarker(GMapOverlay overlay, PointLatLng point)
{
     //创建标记,并设置位置及样式
     GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.blue_small);
     //将标记添加到图层
     overlay.Markers.Add(marker);
     //将图层添加到地图
     this.gMapControl1.Overlays.Add(overlay);

     //鼠标标记点提示框ToolTip
     marker.ToolTip = new GMapToolTip(marker);
     //Brush tooltipBackColor = new SolidBrush(Color.Transparent);//颜色获取,可用于填充背景
     marker.ToolTipText = "坐标("+ point.Lng +","+ point.Lat + ")";
     marker.ToolTip.Font = new Font("微软雅黑", 11);
     marker.ToolTip.Fill = new SolidBrush(Color.FromArgb(100, Color.Black));
     marker.ToolTip.Foreground = Brushes.White;
     marker.ToolTip.TextPadding = new Size(20, 20);
     //marker.ToolTipMode= MarkerTooltipMode.Always;//标注一直显示
     marker.ToolTip.Offset = new System.Drawing.Point(marker.Offset.X - (int)((float)marker.ToolTipText.Length / 2) * 15, marker.Offset.Y + 28);//显示位置

}

在地图上添加连线

在这里插入图片描述

//起点水滴标记
PointLatLng start = new PointLatLng(28.3, 112.5337);  //路径起点
DrawMarker(marker_Overlay, start);      //是添加标记的函数

//终点水滴标记
PointLatLng end = new PointLatLng(28.81, 113.557);   //路径终点
DrawMarker(marker_Overlay, end);//是添加标记的函数

//根据起止点start、end和当前的zoom查找路径
List<PointLatLng> points = new List<PointLatLng>() { start, end };
GMapRoute route = new GMapRoute(points,"");
route.Stroke = new Pen(Color.Red, 3); // 折线颜色,线宽
marker_Overlay.Routes.Add(route);

在地图上添加多边形

在这里插入图片描述

GMapOverlay polygon_Overlay = new GMapOverlay("polygon_Overlay"); 
this.gMapControl1.Overlays.Add(polygon_Overlay);
// 多边形的顶点
List<PointLatLng> points = new List<PointLatLng>();
points.Add(new PointLatLng(28, 113));
points.Add(new PointLatLng(28.1, 112.99));
points.Add(new PointLatLng(28.3, 113.66));
points.Add(new PointLatLng(28.1, 113.88));

GMapPolygon polygon = new GMapPolygon(points, "");
polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
polygon.Stroke = new Pen(Color.Red, 1);
polygon_Overlay.Polygons.Add(polygon);

在地图上添加图片

在这里插入图片描述

GMapOverlay img_Overlay = new GMapOverlay("polygon_Overlay"); 
this.gMapControl1.Overlays.Add(img_Overlay);

Bitmap bitmap = Bitmap.FromFile(@"E:\yuanyuxin\工作文档\升级压裂软件系统\警告.png") as Bitmap;

//创建标记,并设置位置及样式
GMapMarker marker = new GMarkerGoogle(new PointLatLng(28, 113), bitmap);
//将标记添加到图层
img_Overlay.Markers.Add(marker);
//将图层添加到地图
this.gMapControl1.Overlays.Add(img_Overlay);

//鼠标标记点提示框ToolTip
marker.ToolTipText = "报警信息";
marker.ToolTip.Fill = new SolidBrush(Color.FromArgb(100, Color.Black));
marker.ToolTip.Foreground = Brushes.White;
marker.ToolTip.TextPadding = new Size(20, 20);

在地图上清除图层

overlay.Markers.Clear();
  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yyuanyuxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值