当前位置:   article > 正文

c#导入地图(一)--地图Gmap的使用_c#中如何嵌入地图

c#中如何嵌入地图

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

下载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);//地图中心坐标,(纬度,经度)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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");
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在地图上添加标记

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

public GMapOverlay marker_Overlay;
  • 1
marker_Overlay = new GMapOverlay("marker_Overlay"); //创建一个名为“marker_Overlay”的图层
gMapControl1.Overlays.Add(marker_Overlay);
DrawMarker(marker_Overlay,new PointLatLng(28.221, 113.55377));
  • 1
  • 2
  • 3
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);//显示位置

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在地图上添加连线

在这里插入图片描述

//起点水滴标记
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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在地图上添加多边形

在这里插入图片描述

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在地图上添加图片

在这里插入图片描述

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在地图上清除图层

overlay.Markers.Clear();
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40416
推荐阅读
相关标签
  

闽ICP备14008679号