NetTopologySuite将多角形壁球转换为多边形

时间:2018-07-05 18:59:29

标签: .net-core geometry core nettopologysuite geoapi

我正在aspnetcore中使用最新的GeoAPI和NetTopologySuite版本作为core。我正在尝试做的事情应该很简单,但是我似乎无法通过谷歌搜索实验找到合适的方法。甚至说实话,甚至叫它什么,这都会使搜索变得更加困难。

希望有人可以将我踢向正确的方向。

我有一个可能由一个或多个多边形组成的多边形。我想围绕那个多角形的点创建一个缓冲区,该点指向X距离。这基本上是具有同心关注区域的地图叠加层。给定的兴趣点可能落在原始多面体的形状中……或者可能落在第一或第二缓冲区中。如果洋葱的芯中具有随机形状,则Kinda就像洋葱。

第一部分很简单。只需迭代多边形的点,并使用buffer方法将缓冲区应用于每个点:

var bufferZonePoints = new List<IGeometry>();
foreach(var point in multiPolygon.Coordinates)
{
   bufferZonePoints.Add(point.Buffer(x));
}

var bufferZone = this.geometryFactory.CreateMultiPolygon(bufferZonePoints);

很好。但这给了我另一个由数千个点组成的多边形。当我将其用作地图叠加层时,我会按照原始形状的模糊轮廓(就像是呼吸描记器绘图一样)绕着圆圈飓风。我想要的基本上是所有缓冲区圆的外边界,而中心没有所有点。

我尝试在multipolygon上做一个ConvexHull,它一开始看起来是正确的,直到我意识到它正在削除外部的角度,以便获得所有这些点都适合的最小多边形(这是凸包在做之后所有)。但这会导致我覆盖的内容出现问题。某些兴趣点可能在实际缓冲区之外,但如果凸包决定舍入该区域的颠簸区域,则这些兴趣点就在里面。 (我希望这是有道理的。)

基本上,我想做的是将由所有这些缓冲点组成的多面形压缩为由缓冲区所有最外层边界组成的单个多边形。但是中间没有所有的描记器垃圾。我真的不想要一个ConvexHull。我还尝试了Union和GeometryCombiner类,但是这些都没有满足我的要求。

我不知道这是否有助于使泥浆变得更清晰,但是QGIS中有一个设置,当您按下两个圆圈并且圆圈会重叠时,它们合并成一个大块,如肥皂泡,并且它们之间的边界消失了。这就是我想通过代码完成的工作。

这有意义吗?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

继续尝试使用我的地图工具后。看来,联合会确实给了我想要的结果。

我从两个相距很远的多边形开始,以使其清楚可见正在发生的事情,对它们进行了合并,然后又得到了它们组合的外壳。当我添加更多的缓冲点时,羞耻感变得更加明显。

那是我想要的。

尽管如此,还是谢谢!希望这会对别人有所帮助。