赞
踩

注:添加GMap.NET.Core.dll 和 GMap.NET.WindowsForms.dll文件,引用后使用GMap的控件。
2.1 加载地图
这里直接调用了SuperMap iServer REST服务。调用第三方地图服务参考 http://www.cnblogs.com/luxiaoxun/p/3364107.html
2.2 放大、缩小地图
- private void tsbZoomIn_Click(object sender, EventArgs e)
- {
- this.mapControl1.Zoom += 1;
- }
-
- private void tsbZoomOut_Click(object sender, EventArgs e)
- {
- this.mapControl1.Zoom -= 1;
- }
-
- //定义的地图控件缩放变化后对应的事件
-
- private void mapControl1_OnMapZoomChanged()
- {
- double zoom = this.mapControl1.Zoom - Convert.ToDouble(5);
- this.mapControl2.Zoom = zoom; //设置地图缩放大小
-
- }

2.3 鹰眼
需要2个地图控件,同时缩放、移动,实现联动的效果。

gMapControl1 事件设置代码:
- private bool Mapleft1 = false;
- private void gMapControl1_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- Mapleft1 = true;
- }
- }
-
- private void gMapControl1_MouseUp(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- Mapleft1 = false;
- }
- }
-
- private void gMapControl1_OnPositionChanged(PointLatLng point)
- {
- if (Mapleft1)
- {
- this.gMapControl2.Position = point; //设置小地图中心点
- }
- }
- private void gMapControl1_OnMapZoomChanged()
- {
- double zoom = this.gMapControl1.Zoom - Convert.ToDouble(5);
- this.gMapControl2.Zoom = zoom; //设置地图缩放大小
- }

gMapControl2 事件设置代码:
- private bool Mapleft2 = false;
- private void gMapControl2_MouseMove(object sender, MouseEventArgs e)
- {
- lastPosition1 = this.gMapControl1.FromLocalToLatLng(e.X, e.Y);
- }
-
- private void gMapControl2_MouseUp(object sender, MouseEventArgs e)
- {
- if (e.Button==MouseButtons.Left)
- {
- Mapleft2 = false;
- }
- }
-
- private void gMapControl2_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- this.gMapControl1.Position = lastPosition1; //鼠标单击设置gMapControl1.中心点
- Mapleft2 = true;
- }
- }
-
- private void gMapControl2_OnPositionChanged(PointLatLng point)
- {
- if (Mapleft2)
- {
- this.gMapControl1.Position = point; //设置gMapControl1中心点
- }
- }

2.4 添加点线面
以添加点对象为例:
- IAction _editAddAlarmAction = null;
-
- //添加告警源
- private void tsbAddAlarm_Click_1(object sender, EventArgs e)
- {
- if (_editAddAlarmAction == null)
- {
- _editAddAlarmAction = new AddAlarmAction();
- }
- this.mapControl1.CurrentAction = _editAddAlarmAction;
- ToolCheckChanged((sender as ToolStripItem).Name);
- }
- public class AddAlarmAction : Action
- {
-
- List<Feature> targetFeatures = null;
-
- private GMapControl _gMapControl = null;
- private GMapOverlay markerOverlay = new GMapOverlay("addalarm");
- private bool _start = false;
- List<PointLatLng> _points = null;
- List<Point2D> _point2Ds = new List<Point2D>();
- private string _mapUrl = string.Empty;
- private string _mapName = string.Empty;
- Map _map = null;
-
- public override void OnLoad(GMapControl gMapControl)
- {
- _gMapControl = gMapControl;
- _gMapControl.Overlays.Add(markerOverlay);
- _points = new List<PointLatLng>();
- _start = false;
- this._mapUrl = ((SuperMapProvider)gMapControl.MapProvider).ServiceUrl;
- this._mapName = ((SuperMapProvider)gMapControl.MapProvider).MapName;
- this._map = new Map(this._mapUrl);
- }
- public override void OnMapMouseDown(object sender, MouseEventArgs e)
- {
- PointLatLng currentPoint = this._gMapControl.FromLocalToLatLng(e.X, e.Y);
- double mercatorX, mercatorY;
- Helper.LonLat2Mercator(currentPoint.Lng, currentPoint.Lat, out mercatorX, out mercatorY);
- Point2D point2D = new Point2D(mercatorX, mercatorY);
-
- _point2Ds.Add(point2D);
- _points.Add(currentPoint);
- if (_start)
- {
- GMapMarker marker = new GMapMarkerImage(currentPoint, new Bitmap("C:\\Users\\yaohui\\Desktop\\iClient-for-DotNet-master\\iClient-for-DotNet-master\\Demo\\demo.winform\\Resources\\sign-warning-icon.png"));
- markerOverlay.Markers.Add(marker);
- marker.ToolTipText = "告警源编号:";
- marker.ToolTip.Fill = Brushes.Blue;
- marker.ToolTip.Foreground = Brushes.White;
- marker.ToolTip.Stroke = Pens.Black;
- marker.ToolTip.TextPadding = new Size(20, 20);
- marker.ToolTipMode = MarkerTooltipMode.OnMouseOver;
- }
- _start = true;
-
- }
- public override void OnMapMouseDoubleClick(object sender, MouseEventArgs e)
- {
- if (!_start) return;
- PointLatLng currentPoint = this._gMapControl.FromLocalToLatLng(e.X, e.Y);
- double mercatorX, mercatorY;
- Helper.LonLat2Mercator(currentPoint.Lng, currentPoint.Lat, out mercatorX, out mercatorY);
- Point2D point2D = new Point2D(mercatorX, mercatorY);
- markerOverlay.Markers.Clear();
- _points.Clear();
- _point2Ds.Clear();
- _start = false;
- }
-
- }

2.5 自定义marker
通过继承gmap的marker类,进行扩展:(这里添加了符号高亮的画笔)
- using GMap.NET.WindowsForms;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
-
-
-
- namespace gmap.demo.winform
- {
- class GMapMarkerImage : GMapMarker
- {
- private Image image;
- public Image Image
- {
- get
- {
- return image;
- }
- set
- {
- image = value;
- if (image != null)
- {
- this.Size = new Size(image.Width, image.Height);
- }
- }
- }
-
- public bool IsHighlight = true;
- public Pen HighlightPen
- {
- set;
- get;
- }
-
- public Pen FlashPen
- {
- set;
- get;
- }
- public Pen OutPen
- {
- get;
- set;
- }
- private Timer flashTimer = new Timer();
-
- private int radius;
- private int flashRadius;
-
- public GMapMarkerImage(GMap.NET.PointLatLng p, Image image)
- : base(p)
- {
- Size = new System.Drawing.Size(image.Width, image.Height);
- Offset = new System.Drawing.Point(-Size.Width / 2, -Size.Height / 2);
- Image = image;
- HighlightPen = new System.Drawing.Pen(Brushes.Red, 2);
- radius = Size.Width >= Size.Height ? Size.Width : Size.Height;
- flashTimer.Interval = 10;
- flashTimer.Tick += new EventHandler(flashTimer_Tick);
- }
-
- void flashTimer_Tick(object sender, EventArgs e)
- {
- if (FlashPen == null)
- {
- FlashPen = new Pen(Brushes.Red, 3);
- flashRadius = radius;
- }
- else
- {
- flashRadius += radius / 4;
- if (flashRadius >= 2 * radius)
- {
- flashRadius = radius;
- FlashPen.Color = Color.FromArgb(255, Color.Red);
- }
- else
- {
- Random rand = new Random();
- int alpha = rand.Next(255);
- FlashPen.Color = Color.FromArgb(alpha, Color.Red);
- }
- }
- }
- //this.Overlay.Control.Refresh();
- //this.mapControl1.Refresh();
-
- public void StartFlash()
- {
- flashTimer.Start();
- }
- public void StopFlash()
- {
- flashTimer.Stop();
- if (FlashPen != null)
- {
- FlashPen.Dispose();
- FlashPen = null;
- }
- }
- //this.mapControl1.Refresh();
-
- public override void OnRender(Graphics g)
- {
- if (image == null)
- return;
-
- Rectangle rect = new Rectangle(LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height);
- g.DrawImage(image, rect);
-
- if (IsMouseOver && IsHighlight)
- {
- g.DrawRectangle(HighlightPen, rect);
- }
-
- if (FlashPen != null)
- {
- g.DrawEllipse(FlashPen,
- new Rectangle(LocalPosition.X - flashRadius / 2 + Size.Width / 2, LocalPosition.Y - flashRadius / 2 + Size.Height / 2, flashRadius, flashRadius));
- }
- }
- //public override void Dispose()
- //{
- // if (HighlightPen != null)
- // {
- // HighlightPen.Dispose();
- // HighlightPen = null;
- // }
- // if (FlashPen != null)
- // {
- // FlashPen.Dispose();
- // FlashPen = null;
- // }
- //}
- }
- }

2.6 截图
- //地图保存为图片
- private void toolStripButton6_Click(object sender, EventArgs e)
- {
- try
- {
- using (SaveFileDialog dialog = new SaveFileDialog())
- {
- dialog.Filter = "PNG (*.png)|*.png";
- dialog.FileName = "GMap.NET image";
- Image image = this.mapControl1.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);
- }
- }

2.7 保存缓存
- //保存缓存
- private void toolStripButton7_Click(object sender, EventArgs e)
- {
- if (this.mapControl1.ShowExportDialog() == true)
- {
- //this.gMapControl1.ShowTileGridLines = true;//显示瓦片,也就是显示方格
- this.mapControl1.ReloadMap();
- }
- }
3、iclient for .net 模拟B/S实现报警闪烁demo展示

4、参考
http://www.cnblogs.com/luxiaoxun/p/3494756.html
http://blog.csdn.net/sunsun1203/article/details/53816464
http://www.cnblogs.com/luxiaoxun/p/3475355.html
http://blog.sina.com.cn/s/blog_819100560101dgng.html
原文链接:https://www.cnblogs.com/yaohuimo/p/6255396.html
感谢博主!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。