一、多边形shp文件结构
从此博客:SHP文件结构
其中记录多边形的shp文件简单概括为这张图(看不清楚可以右键图片-在新标签页中打开,或者下载查看)
二、构造GMapPolygon
//生成一个环
GMapPolygon polygon = new GMapPolygon(points, "");
polygon.Fill = new SolidBrush(Color.FromArgb(55, Color.Orange));
polygon.Stroke = new Pen(Color.Orange, 1);
//添加到图层中
/*
* 之前的操作,构造一个border图层,专门用来储存polygon,添加到控件的图层集合中
GMapOverlay bor=new GMapOverlay();
this.gMapControl1.Overlays.Add(border);
*/
border.Polygons.Add(polygon);
三、关于内环
GMap控件不支持从一个多边形中“挖洞”的操作,在判断一个marker或点是否位于“正常区域”中(位于外环但不位于内环中)时,可以借助GMapPolygon的IsInside方法
private bool is_inside(PointLatLng a)
{
int sum = 0;
try
{
foreach (GMapPolygon polygon in border.Polygons)
{
if (polygon.IsInside(a))
{
sum++;
}
}
}
catch (Exception)
{
return false;
}
return sum == 1 ? true : false;
}
授人以鱼不如授人以渔,我就不给出详细的代码了(这是“我很小气”的一种委婉表达)