首页 > 解决方案 > NetTopologySuite 将多多边形压缩为多边形

问题描述

我在 aspnetcore 工作,使用最新的 GeoAPI 和 NetTopologySuite 版本作为核心。我正在尝试做的事情应该相当简单,但我似乎无法通过谷歌搜索找到正确的方法。或者说实话,这让谷歌搜索变得更加困难。

希望有人能把我踢向正确的方向。

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

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

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

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

没关系。但它给了我另一个由数千个点组成的多面体。当我将它用作地图叠加层时,我会在原始形状的模糊轮廓之后得到一个圆圈的飓风,有点像螺旋图绘图。我想要的基本上是所有缓冲区圆的外边界,没有中心的所有点。

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

基本上,我要做的是将由所有这些缓冲点组成的多多边形并将其压缩成一个由缓冲区的所有最外边界组成的单个多边形。但是中间没有所有的螺旋计垃圾。我真的不想要一个 ConvexHull。我也尝试过 Union 和 GeometryCombiner 类,但这些都不是我想要的。

我不知道这是否有助于使泥浆更清晰,但是 QGIS 中有一个设置,当你向下打两个圆圈并且圆圈会重叠时,它们会像肥皂泡一样组合成一个大斑点,并且它们之间的边界消失了。这就是我试图通过代码做的事情。

那有意义吗?任何人都可以帮忙吗?

标签: .net-coregeometrynettopologysuitegeoapi

解决方案


在继续尝试我的映射工具之后。看来,Union 确实给了我想要的结果。

我从两个相距足够远的多边形开始,以明确发生了什么,对它们进行联合并返回它们组合的外壳。当我向它添加更多缓冲点时,耻辱变得更加明显。

这正是我想要的。

不过还是谢谢!希望这会对其他人有所帮助。


推荐阅读