上一篇介绍了在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

GMap.Net开发之在地图上添加多边形的更多相关文章

  1. google maps js v3 api教程(2) -- 在地图上添加标记

    原文链接 google maps javascript官方文档:https://developers.google.com/maps/documentation/javascript/ 我们在创建地图 ...

  2. 在地图上添加POI

    使用Tangram的Marker, 可以在地图上做各种标记, 效果图: Tangram是通过Marker在地图上添加标记的,Marker分Point, Polyline和Polygon三种, 分别对应 ...

  3. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

    原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------ ...

  4. 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注

    原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo, ...

  5. 微信小程序--地图上添加图片

    如何在微信小程序地图添加上,添加图片? 在微信小程序中,地图的层级最高,所以我们没有办法,通过定位,在地图上添加图片等信息; 处理办法: 添加控件:controls; 其中有个属性position,进 ...

  6. 利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(四)在地图上添加FrameworkElement 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUw ...

  7. Google Map API v2 (三)----- 地图上添加标记(Marker),标记info窗口,即指定经纬度获取地址字符串

    接上篇 http://www.cnblogs.com/inkheart0124/p/3536322.html 1,在地图上打个标记 private MarkerOptions mMarkOption; ...

  8. ArcGIS 在地图上添加标注

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. iOS开发之在地图上绘制出你运行的轨迹

    首先我们看下如何在地图上绘制曲线.在Map Kit中提供了一个叫MKPolyline的类,我们可以利用它来绘制曲线,先看个简单的例子. 使用下面代码从一个文件中读取出经纬度,然后创建一个路径:MKPo ...

随机推荐

  1. BZOJ 1511: [POI2006]OKR-Periods of Words

    Description 求一个最长周期. Sol KMP. 一个点的最短周期就是 \(i-next[i]\) 此外 \(i-next[next[i]],i-next[next[next[i]]]\) ...

  2. Http Request

    function getSend($url,$param) { $ch = curl_init($url."?".$param); curl_setopt($ch,CURLOPT_ ...

  3. Python类的特点 (3) :静态方法与类方法

    Python中的方法有4种: 1)模块中的全局方法,不属于任何类,用"模块名.方法名"形式调用. 2)类中定义的实例方法,也被称为绑定方法(Bound method),这种方法的第 ...

  4. HDFS原理介绍

    HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Googl ...

  5. POJ 3009

    http://poj.org/problem?id=3009 一个搜索的题目: 大意就是一个冰球,在冰面上滑动,你打击一次,就沿一个反向滑动,知道碰到墙就会停下,而墙则会破碎. 求从起点到终点的最短的 ...

  6. wxpython 基本的控件 (文本)

    wxPython 工具包提供了多种不同的窗口部件,包括了本章所提到的基本控件.我们涉及静态文本.可编辑的文本.按钮.微调.滑块.复选框.单选按钮.选择器.列表框.组合框和标尺.对于每种窗口部件,我们将 ...

  7. 不知道数据库中表的列类型的前提下,使用JDBC正确的取出数据

    概要: 使用jdbc 如果在不知道表结构的情况下,如何读出表信息? 使用ResultSetMetaData; 然后使用getColumnType 获取column 类型 使用getColumnName ...

  8. HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场

    题目:传送门. 题意:T组数据,每组给定一个n一个m,在给定两个长度为n的数组a和b,再给定m次操作,每次给定l和r,每次可以把[l,r]的数进行任意调换位置,问能否在转换后使得a数组变成b数组. 题 ...

  9. yii php 图片上传与生成缩略图

    今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图              ($pic_action_url = $this->createAbsoluteUrl('h ...

  10. Qt 获取Mac地址

    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces(); foreach(QNetworkInterface ...