GMap.Net开发之在地图上添加多边形

12 篇文章 0 订阅
7 篇文章 0 订阅

转自:http://www.cnblogs.com/luxiaoxun/p/3485560.html

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

复制代码
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(50, Color.Red));
polygon.Stroke = new Pen(Color.Red, 1);
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(50, Color.Red));
                        drawingPolygon.Stroke = new Pen(Color.Blue, 2);
                        drawingPolygon.IsHitTestVisible = true;
                        polygons.Polygons.Add(drawingPolygon);
                    }
                    else
                    {
                        drawingPolygon.Points.Clear();
                        drawingPolygon.Points.AddRange(drawingPoints);
                        if (polygons.Polygons.Count == 0)
                        {
                            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来画。

效果图如下:

 

 

 

作者: 阿凡卢
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值