使用ArcGIS Desktop将多边形划分为特定的尺寸?


26

我在shapefile中有数千个形状不规则的多边形。我希望能够将每个多边形划分为三个区域,并指定这些区域的大小(它们与先前的总面积之和)。子多边形的形状无关紧要,因为这是出于可视化目的。

我该怎么做呢?有没有可以使用的标准算法?


我考虑的一种方法是获取构成多边形的所有点。然后,我将使用一条直线将两个随机连接在一起,分割多边形,然后检查该区域是否在令人满意的公差范围内。如果太小,我会朝一个方向改变点;如果太大,我将改为相反的方向。

Answers:


34

这个问题有许多有效的解决方案。其中之一的工作方式与您的描述有点类似,但是您不必以“随机”位置对多边形进行切片的方式,而是可以通过故意设计的方式来最大程度地减少计算量。

这是基本算法。 它的输入包括任何平面扫描方向,非零区域的多边形P,零与多边形区域之间的目标区域a和非负阈值t(以面积为单位)。其目的是为了分裂P与线垂直于扫掠方向分成两个部分,一个到行的右边,而另一对线的左侧,使得右手区域和目标区域之间的差一个没有大于t

L为垂直于扫描方向的任何定向线。将f(L)定义为在L右侧找到的P的面积减去a。用这些术语,任务是找到f的零。因为f不太可能是可微的,而是连续的,所以请使用二分法,割线法或-我最喜欢的-Brent方法。所有这些都很简单,可以保证融合。使用t作为参数的收敛容限。

而已。让我们考虑一下如何对此进行编码。根本发现是常规的-您可以为其使用通用代码-因此GIS的工作归结为编码f。这样做需要

1.  Splitting the polygon by a line.
2.  Computing the area of the piece(s) to the right of the line.

几乎在任何基于矢量的GIS中都实现了这两种操作。如果不是,则可以用一个很大的矩形代替该线,该矩形代表该线右边的半平面。步骤1变成

1'. Clip the polygon to the rectangle.

这是一个非常基本的操作。

要开始查找根,您需要找到一个保证f的零位于的时间间隔。这很容易:将多边形的包络线(“边界框”)投影到线扫的方向。投影是您想要的间隔。

这个问题历史悠久。我很早以前就为ArcView 3.x实现了该算法,并在旧的ESRI用户论坛中对其进行了多次描述。谷歌

Huber分割多边形site:forums.esri.com

为了便于讨论,提供了代码链接,增强功能和变体(例如将多边形分成所需尺寸的尽可能紧凑的部分)以及栅格数据的算法。

这是美国大陆各州的样子(以相等的面积投影),每个州的底部三分之一都被阴影了。显然,扫掠方向是垂直的。

替代文字


6

有一个现成的工具,称为ET Spatial的“ GeoTools”。哪里有一个名为“ ET其他”的工具。在此工具中,有两种分割多边形的方法。按百分比和面积(几个单位,例如平方米,公顷等)。如图所示,该工具从四个侧面(即NESW)中的任意一个分割多边形。我使用了“从上到下”的方法,即从北到南的方法。

分裂


0

ArcGIS Pro 2.3中有一个名为“ 细分多边形”的新工具。

它允许根据给定数量的零件或所需零件区域来分割/细分多边形。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.