GMap.NET开发技巧(七)-地图监控软件入门
2012年11月18日
分类: GPS系统
本章目的主要介绍GMap.NET在实际开发应用当中基本用法,并介绍相关的代码操作:
首先,使用初始化一些变量和事件,初始化代码如下所示:
基本参数介绍:
this.gMapControl1.Zoom 是地图缩放大小
this.gMapControl1.MapType = MapType.GoogleMapChina;地图加载类型
//初始化地图
this.gMapControl1.Manager.Mode = AccessMode.ServerAndCache;
//加载地图
this.gMapControl1.MapType = MapType.GoogleMapChina;
this.gMapControl1.MaxZoom = 18;
this.gMapControl1.MinZoom = 8;
this.gMapControl1.Zoom = 13;
//下面是主要是手动加载GMap.NET控件所以的时间方法
this.gMapControl1.MouseMove += new MouseEventHandler(gMapControl1_MouseMove);
this.gMapControl1.DoubleClick += new EventHandler(gMapControl1_DoubleClick);
this.gMapControl1.MouseDown += new MouseEventHandler(this.MainMap_MouseDown);
this.gMapControl1.MouseUp += new MouseEventHandler(this.MainMap_MouseUp);
this.gMapControl1.OnCurrentPositionChanged += new CurrentPositionChanged(this.MainMap_OnCurrentPositionChanged);
this.gMapControl1.OnTileLoadStart += new TileLoadStart(this.MainMap_OnTileLoadStart);
this.gMapControl1.OnTileLoadComplete += new TileLoadComplete(this.MainMap_OnTileLoadComplete);
this.gMapControl1.OnMarkerClick += new MarkerClick(this.MainMap_OnMarkerClick);
this.gMapControl1.OnMapZoomChanged += new MapZoomChanged(this.MainMap_OnMapZoomChanged);
this.gMapControl1.OnMapTypeChanged += new MapTypeChanged(this.MainMap_OnMapTypeChanged);
当需要在地图中,生产坐标点或是绘制线路时,就需要生成GMapOverlay图层,初始化图层代码如下所示:
基本参数介绍:

GMapOverlay 是图层类,当需要在地图中设置坐标点绘制线路时,需要生成图层类。
//路线图层 GMapOverlay routes = new GMapOverlay(this.gMapControl1, "routes"); this.gMapControl1.Overlays.Add(this.routes); //标注图层 GMapOverlay marked= new GMapOverlay(this.gMapControl1, "marked"); this.gMapControl1.Overlays.Add(this.marked);
初始化图层完成后,需要实例化图层里和路线类,代码如下所示:
基本参数介绍:
GMapMarkerGoogleRed 实例化标准图层,为红色图标。
GMapMarkerCross 实例化标准图层,为绿色图标。
MapRoute 实例化线路类
GMapRoute 实例化线路图层类,控制线路图层类参数
//实例化图层类 GMapMarkerGoogleRed currentMarker = new GMapMarkerGoogleRed(this.gMapControl1.CurrentPosition); //添加到Marked标注图层 Marked.Markers.Add(this.currentMarker); GMapMarkerCross center = new GMapMarkerCross(this.gMapControl1.CurrentPosition); Marked.Markers.Add(this.center); //简单介绍需要绘制路线时,需要MapRoute 设置开始点和结束点 MapRoute route = Singleton<GMaps>.Instance.GetRouteBetweenPoints(this.start, this.end, false, (int)this.gMapControl1.Zoom); GMapRoute item = new GMapRoute(route.Points, route.Name); //参数:坐标点数组,名称 item.Color = Color.Blue; this.routes.Routes.Add(item); //添加到路线图层中
注意:添加标注图层用 Markers 添加路线用 Routes
GMap.NET提供了各种鼠标的操作事件,我们重载即可实现特殊的控制处理了:
private void gMapControl1_DoubleClick(object sender, EventArgs e)
{
this.gMapControl1.Zoom += 1; //地图显示大小
this.gMapControl1.CurrentPosition = lastPosition; //地图中心点
}
private void gMapControl1_MouseMove(object sender, MouseEventArgs e)
{
//获取鼠标移动点,需要转换成PointLatLng 格式
PointLatLng latLng = this.gMapControl1.FromLocalToLatLng(e.X, e.Y);
this.tsslPosition.Text = string.Format("经度:{0}, 纬度:{1} ", latLng.Lng, latLng.Lat);
}
private void MainMap_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.isMouseDown = true;
lastPosition = this.gMapControl1.FromLocalToLatLng(e.X, e.Y);
}
}
private void MainMap_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.isMouseDown = false;
}
}
下面介绍一下,如果保存截图的操作如下所示:
try
{
using (SaveFileDialog dialog = new SaveFileDialog())
{
dialog.Filter = "PNG (*.png)|*.png";
dialog.FileName = "GMap.NET image";
Image image = this.gMapControl1.ToImage();
if (image != null)
{
using (image)
{
if (dialog.ShowDialog() == DialogResult.OK)
{
string fileName = dialog.FileName;
if (!fileName.EndsWith(".png", StringComparison.OrdinalIgnoreCase))
{
fileName += ".png";
}
image.Save(fileName);
MessageBox.Show("图片已保存: " + dialog.FileName, "GMap.NET", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}
}
}
catch (Exception exception)
{
MessageBox.Show("图片保存失败: " + exception.Message, "GMap.NET", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
(13965)

好久不见发帖,GMap.net网上的东西不少,都是简单的片面的,真正的重点都没有讲解,需要楼主这样的,我会一直关注的
It above my understanding!
弱弱的问一下,不论采用哪种地图源,如何限定地图的加载范围,比如只加载中国??