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);
            }
标签:

3 条评论 于 “GMap.NET开发技巧(七)-地图监控软件入门”

  1. 情何以堪
    2012年11月27日18:02
    1

    好久不见发帖,GMap.net网上的东西不少,都是简单的片面的,真正的重点都没有讲解,需要楼主这样的,我会一直关注的

  2. EncuckyWefcek
    2013年3月24日00:02
    2

    It above my understanding!

  3. 黄四郎
    2013年9月6日16:38
    3

    弱弱的问一下,不论采用哪种地图源,如何限定地图的加载范围,比如只加载中国?? 

Leave a Comment