上一篇介绍了在GMap上添加自定义标签(GMapMarker),这篇介绍在GMap上添加多边形(GMapPolyogn),并且介绍如何在地图上画任意的多边形。

如果已经知道了多边形的各个点的位置,就可以通过如下方式在地图上添加多边形:

GMapOverlay polyOverlay = new GMapOverlay("polygons");
List points = new List();
points.Add(new PointLatLng(-25.969562,32.585789));
points.Add(new PointLatLng(-25.966205,32.588171));
points.Add(new PointLatLng(-25.968134,32.591647));
points.Add(new PointLatLng(-25.971684,32.589759));
GMapPolygon polygon = new GMapPolygon(points, "mypolygon");
polygon.Fill = new SolidBrush(Color.FromArgb(, Color.Red));
polygon.Stroke = new Pen(Color.Red, );
polyOverlay.Polygons.Add(polygon);
gmap.Overlays.Add(polyOverlay);

如果需要手动在地图上画多边形,可以通过在地图上记录每个点击的位置,每次点击更新正在画的多边形就可以了,实现方式如下:

先定义一些变量:

        private GMapOverlay polygons = new GMapOverlay("polygon"); //放置polygon的图层
private GMapPolygon drawingPolygon = null; //正在画的polygon
private List<PointLatLng> drawingPoints = new List<PointLatLng>(); //多边形的点集
private GMapPolygon currentPolygon; mapControl.Overlays.add(polygons);

在点击mousedown事件中更新多边形的点集(即更新多边形的形状):

        void mapControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
isLeftButtonDown = true; if (checkBoxDrawPolygon.Checked)
{
drawingPoints.Add(mapControl.FromLocalToLatLng(e.X, e.Y));
if (drawingPolygon == null)
{
drawingPolygon = new GMapPolygon(drawingPoints, "my polygon");
drawingPolygon.Fill = new SolidBrush(Color.FromArgb(, Color.Red));
drawingPolygon.Stroke = new Pen(Color.Blue, );
drawingPolygon.IsHitTestVisible = true;
polygons.Polygons.Add(drawingPolygon);
}
else
{
drawingPolygon.Points.Clear();
drawingPolygon.Points.AddRange(drawingPoints);
if (polygons.Polygons.Count == )
{
polygons.Polygons.Add(drawingPolygon);
}
else
{
mapControl.UpdatePolygonLocalPosition(drawingPolygon);
}
}
//mapControl.Refresh();
}
}
}

在双击事件中将当前正在画的多边形加到保存多边形的GMapOverlay中:

        void mapControl_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (checkBoxDrawPolygon.Checked && drawingPolygon != null)
{
polygons.Polygons.Add(drawingPolygon);
drawingPolygon = null;
drawingPoints.Clear();
}
}

在OnPolygonEnter和OnPolygonLeave中改变多边形的轮廓颜色:

        void mapControl_OnPolygonLeave(GMapPolygon item)
{
currentPolygon = null;
item.Stroke.Color = Color.MidnightBlue;
} void mapControl_OnPolygonEnter(GMapPolygon item)
{
currentPolygon = item;
item.Stroke.Color = Color.Red;
}

采用同样的方法,可以在地图上画矩形、圆形等图形,画矩形和圆形的时候要随鼠标移动改变图形的大小,需要在MouseMove事件中改变正在画的图形的大小。

由于圆形没法用点集组成(无穷个点组成),可以采用GMapMarker来画。

效果图如下:

项目地址:https://github.com/luxiaoxun/MapDownloader

最新文章

  1. AutoBundle in asp.net mvc 5
  2. AWT编程学习01(未完成)
  3. solr:快速开始
  4. 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
  5. mac上一键配置和安装adb驱动或者环境
  6. SSIS 关于并发的两个设置
  7. 每日一九度之题目1016:火星A+B
  8. CODE:BLOCK中的CreateProcess: No such file or directory
  9. gcc和g++的区别
  10. codeforces 652D . Nested Segments 线段树
  11. iOS 5个Xcode开发调试技巧
  12. CSS 弹性容器
  13. Css之 间距初始化
  14. java 使用jdbc连接Greenplum数据库和Postgresql数据库
  15. 教你一招:笔记本安装mint18时,安装界面显示不全
  16. Android的ListView分页功能(上滑加载更多)
  17. [Ubuntu] 如何设置静态 IP 和 DNS
  18. Bi-shoe and Phi-shoe(欧拉函数/素筛)题解
  19. JDK1.7之后switch支持string
  20. Kubernetes 1.6新特性

热门文章

  1. BZOJ 3364: [Usaco2004 Feb]Distance Queries 距离咨询
  2. uploadify 一款优秀的上传插件
  3. centos rpmforge repo
  4. 一次Android脱壳training
  5. Python sorted函数对列表排序
  6. 2017/1/7 学习笔记 jar包,maven
  7. ACM/ICPC 之 双向链表_构造列表-模拟祖玛 (TSH OJ-Zuma(祖玛))
  8. 请确认 &lt;Import&gt; 声明中的路径正确,且磁盘上存在该文件。
  9. 2076 Problem F Quick Brown Fox
  10. 两个oracle之间建立db link