目录
导入地图(联网的话可不进行此步骤)
下载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();