一. 配置GMap
我们先去官网下载GMap的工程文件: https://archive.codeplex.com/?p=greatmaps
然后我们我们编译GMap.NET.WindowsForms工程, 生成GMap.NET.Core.dll和GMap.NET.WindowsForms.dll
然后添加到我们的工程中.(PS: 这里需要注意我们的工程框架要在3.5以上, 还有特别重要的一点, 我们应用的这两个dll文件都是在GMap.NET.WindowsForms工程下的)
然后在我们的c#工程里新建一个用户控件类, 命名为MapControl
文件继承于GMapControl类
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 cs_var_toHtml
{
public partial class MapControl : GMapControl
{
public MapControl()
{
InitializeComponent();
}
private void MapControl_Load(object sender, EventArgs e)
{
}
}
}
这样我们编译一下这个工程, 然后我们就可以在我们的工具箱 里找到MapControl控件进行使用了.
二.使用GMap.NET进行操作
图标闪动, 自定义图标, 移动图标等: http://www.cnblogs.com/luxiaoxun/p/3475355.html
(1) 初始化(中心位置, 分辨率, 去十字图标)
try
{
System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("ditu.google.cn");
}
catch
{
mapControl1.Manager.Mode = AccessMode.CacheOnly;
MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
mapControl1.CacheLocation = Environment.CurrentDirectory + "\\GMapCache\\"; //缓存位置
mapControl1.MapProvider = GMapProviders.GoogleChinaMap; //google china 地图
mapControl1.MinZoom = 2; //最小比例
mapControl1.MaxZoom = 24; //最大比例
mapControl1.Zoom = 15; //当前比例
mapControl1.ShowCenter = false; //不显示中心十字点
mapControl1.DragButton = System.Windows.Forms.MouseButtons.Left; //左键拖拽地图
mapControl1.Position = new PointLatLng(31.7508319669, 119.9192261696); //地图中心位置:江理工图书馆
mapControl1.Overlays.Add(markersOverlay);
mapControl1.MouseClick += new MouseEventHandler(mapControl_MouseClick);
(2) 鼠标操作
右击标绿点
void mapControl_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);
}
}
(3) 打点方法
//将字符串组LatLngInfo的点打标记,经纬度中用','隔开, 把点的颜色也写成形参
public void SetLableOnMap(string[] LatLngInfo)
{
//创建图层
GMapOverlay gMapOverlay = new GMapOverlay();
//给每个坐标打点
for (int i = 0; i < LatLngInfo.Length; i++)
{
string[] LatLng = LatLngInfo[i].Split(',');
//在坐标点上绘制一绿色点并向图层中添加标签
gMapOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(double.Parse(LatLng[1]), double.Parse(LatLng[0])), GMarkerGoogleType.red));
//方便之后寻找到是第几个GMapMarker
gMapOverlay.Markers[i].Tag = i;
gMapOverlay.Id = "markroad";
}
//向控件中添加图层
mapControl1.Overlays.Add(gMapOverlay);
}
调用:
//------------调用打点函数---------------//
string[] LatLngInfo=new string[2];
LatLngInfo[0] ="12,12"; //第一个经纬度
LatLngInfo[1] = "12,13"; //第二个经纬度
SetLableOnMap(LatLngInfo);
(4) 区域
添加多边形(不准确, 在找原因)
//在地图上画矩阵,知道矩阵上下左右(Lat_top、Lat_bottom、Lng_left、Lng_right)的4个点
GMapOverlay polyOverlay = new GMapOverlay("polygons");
List<PointLatLng> points = new List<PointLatLng>();
//注意添加点的顺序
points.Add(new PointLatLng(Lat_top, Lng_left));
points.Add(new PointLatLng(Lat_bottom, Lng_left));
points.Add(new PointLatLng(Lat_bottom, Lng_right));
points.Add(new PointLatLng(Lat_top, Lng_right));
GMapPolygon polygon = new GMapPolygon(points, "mypolygon");
//颜色
polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
polygon.Stroke = new Pen(Color.Red, 1);
polyOverlay.Polygons.Add(polygon);
gmap.Overlays.Add(polyOverlay);
(5) 路线
(6) 提示
(7)文字标签(看打点方法里也有)
//--------------加一个闪烁点& 文字标签---------------//
public void PointShark(double Lat, double Lng, string label)
{
GMapOverlay gMapOverlay = new GMapOverlay();
PointLatLng point = new PointLatLng(Lat,Lng);
gMapOverlay.Markers.Add(new GMarkerGoogle(point, GMarkerGoogleType.red));
GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
marker.ToolTipText = label; //这是标签
marker.Tag = 1;
marker.ToolTipMode = MarkerTooltipMode.Always;
gMapOverlay.Markers.Add(marker); //这一句话也很关键!!!!, 不然不显示标签
mapControl1.Overlays.Add(gMapOverlay);//添加图层, 只有添加才会显示我们需要的点
}
三. 结果及参考文章
PS上面为写的方法在下面这个博文里又有, 博主有一些列的GMap的博文, 很有帮助