描述
在不改变基本几何形状的情况下,通过移除相对多余的折点来简化面轮廓。
插图
使用方法
此工具为不同目的采用不同的简化算法。要了解有关这些算法的详细信息,请参阅简化线和简化面的工作原理。
- 保留关键点(道格拉斯-普克)算法(Python 中的 algorithm='POINT_REMOVE')的工作原理是识别并移除相对多余的折点来简化数据并以较小的比例显示。这是此工具中最快的简化算法。这种算法通常用于数据压缩或粗糙的简化。随着容差的增大,生成的面轮廓中有棱角的部分将显著增加。这种算法基于道格拉斯-普克算法:Douglas, David and Peucker, Thomas, "Algorithms for the reduction of the number of points required to represent a digitized line or its caricature," The Canadian Cartographer. 10(2), 112–22 (1973)。
- 保留关键折弯 (Wang-Müller) 算法(Python 中的 algorithm='BEND_SIMPLIFY')的工作原理是识别并消除相对不太重要的折弯来简化数据并以较小的比例显示。这通常比保留关键点(道格拉斯-普克)算法更接近输入几何,但可能需要更多的处理时间。这种算法基于 Wang, Zeshen and Müller, Jean-Claude, "Line Generalization Based on Analysis of Shape Characteristics," Cartography and Geographic Information Systems 25(1), 3–15 (1998) 中定义的算法。
- 保留加权有效面积 (Zhou-Jones) 算法(Python 中的 algorithm='WEIGHTED_AREA')的工作原理是首先识别每个折点有效区域的三角形。随后采用一系列度量对这些三角形进行加权以对比每个面积的平面度、偏度和凸度。通过加权后的面积指导移除相应折点以简化面轮廓,同时尽可能多地保留特性。这种算法基于 Zhou, Sheng and Jones, Christopher B., (2005) "Shape-Aware Line Generalisation with Weighted Effective Area," in Fisher, Peter F. (Ed.), Developments in Spatial Handling: 11th International Symposium on Spatial Handling, 369–80 (2005) 中定义的算法。
- 保留有效面积 (Visvalingam-Whyatt) 算法(Python 中的 algorithm='EFFECTIVE_AREA')可通过识别每个折点的有效三角形面积来指导移除折点以简化面轮廓,同时尽可能多地保留特性。这种算法基于 Visvalingam, M. and Whyatt, J. D., "Line Generalisation by Repeated Elimination of the Smallest Area," Cartographic Information Systems Research Group (CISRG) Discussion Paper 10, The University of Hull (1992) 中定义的算法。
简化容差参数值用于确定简化程度。容差越大,生成的几何越粗糙。容差越小,生成的几何越接近输入几何。MinSimpTol 和 MaxSimpTol 字段将被添加至输出以存储使用过的容差。
- 对于保留关键点(道格拉斯-普克)算法,容差表示每个折点与新创建的线之间的最大允许垂直距离。
- 对于保留关键折弯 (Wang-Müller) 算法,容差是近似于有效折弯的圆的直径。
- 对于保留加权有效面积 (Zhou-Jones) 算法,容差面积是由三个相邻折点定义的有效三角形的面积。三角形越偏离等边三角形,则它的重量越大,被移除的可能性越小。
- 对于保留有效面积 (Visvalingam-Whyatt) 算法,容差面积是由三个相邻折点定义的有效三角形的面积。
任何小于最小面积参数的面都将从输出要素类中移除。对于一组共享公共边的相邻面,最小面积适用于该组面的总面积。使用保留折叠点参数来保留移除的面的记录作为点要素。
多部分 (Multipart) 面可简化为单部分。
使用保留折叠点参数(Python 中的 collapsed_point_option)创建输出点要素类以存储代表被移除的面的点,因为这些面小于最小面积。已派生点输出;将使用与输出要素类参数(Python 中的 out_feature_class)相同的名称和位置,但带有 _Pnt 后缀。输出面要素类包含输入要素类中的所有字段。输出点要素类不包含任何这些字段。
输出面要素类具有正确的拓扑。输入数据中的任何拓扑错误都会在输出面要素类中标记出来。输出要素类包括含有相应输入要素 ID 和输入拓扑错误或差异的两个附加字段:InPoly_FID 和 SimPgnFlag。
SimPgnFlag 字段值如下:
- SimPgnFlag = 0 表示不存在错误。
- SimPgnFlag = 1 表示存在拓扑错误。
- SimPgnFlag = 2 表示已被分区分割的要素,该要素经过简化后现在小于最小面积。该标记可能仅显示在分割要素的一部分上。这些要素将全部保留在输出要素类中。仅在使用制图分区环境设置时才会出现此情况。
旧版本:
在之前版本的工具中,可能会在处理期间生成拓扑错误。为了脚本和模型的兼容性,工具语法中仍然包含处理拓扑错误(Python 中的 error_option)参数,但现在该参数已被忽略并从工具对话框中隐藏。
SimPgnFlag 字段用来标记工具在处理中引入的输出要素类中的拓扑错误。现在该字段标记输入中存在的错误。另外,在拓扑分辨率中,之前版本的工具针对每个要素修改了容差并将这些值存储为 MinSimpTol 和 MaxSimpTol 字段。在当前执行情况下,这些字段中的值将相等并等于简化容差参数中指定的容差。请确保根据这些字段修改现有模型或脚本。
使用输入障碍图层参数来定义不得被简化面交叉的要素。障碍要素可以是点、线或面。
即使未选中传输字段域、子类型和属性规则环境,域和子类型也会被复制到输出。
处理大型数据集可能会超出内存限制。在这种情况下,考虑通过在制图分区环境设置中确定一个相关的面要素类来通过分区处理输入数据。将按顺序处理分区边界定义的数据部分。生成的输出要素类无缝,而且在分区边界一致。有关详细信息,请参阅使用分区概化大型数据集。
语法
arcpy.cartography.SimplifyPolygon(in_features, out_feature_class, algorithm, tolerance, {minimum_area}, {error_option}, {collapsed_point_option}, {in_barriers})
参数 | 说明 | 数据类型 |
in_features | 要简化的输入面要素。 | Feature Layer |
out_feature_class | 简化后的输出面要素类。其中包含输入要素类中的所有字段。输出面要素类具有正确的拓扑。该工具不会引入拓扑错误,但输入数据中的拓扑错误会在输出面要素类中标记出来。 输出要素类包括含有相应输入要素 ID 和输入拓扑错误或差异的两个附加字段:InPoly_FID 和 SimPgnFlag。 SimPgnFlag 值如下:
| Feature Class |
algorithm | 指定面简化算法。
| String |
tolerance | 容差用于确定简化程度。可以选择首选单位;否则,将使用输入单位。MinSimpTol 和 MaxSimpTol 字段将被添加至输出以存储在执行处理时使用过的容差。
| Linear Unit |
minimum_area (可选) | 要保留的面的最小面积。默认值为零,即保留所有面。可以为指定的值选择首选单位;否则,将使用输入单位。 | Areal Unit |
error_option (可选) | 旧版本:这是一个不再使用的旧参数。以前使用该参数来指定如何处理可能在处理过程中引入的拓扑错误。为了脚本和模型的兼容性,工具语法中仍然包含这些参数,但现在这些参数已从工具对话框中隐藏。 | String |
collapsed_point_option (可选) | 指定是否创建输出点要素类以存储任何被移除的面的中心,因为这些面小于 minimum_area 参数。已派生点输出;该点输出将以您在 out_feature_class 参数中指定但是带有 _Pnt 后缀的面输出要素类的名称命名并与其位于相同文件夹中。
| Boolean |
in_barriers [in_barriers,...] (可选) | 包含充当简化中障碍的要素的输入。生成简化面不会接触障碍要素或与其交叉。例如,当简化森林覆盖区域时,生成的简化森林面不会穿过被定义为障碍的道路要素。 | Feature Layer |
派生输出
名称 | 说明 | 数据类型 |
out_point_feature_class | 如果使用保留折叠点参数(Python 中的 collapsed_point_option),则将创建一个输出点要素类,用于存储代表被移除的面的点,因为这些面小于最小面积 | 要素类 |
代码示例
以下 Python 窗口脚本演示了如何在即时模式下使用 SimplifyPolygon 工具。
import arcpy
import arcpy.cartography as CA
arcpy.env.workspace = "C:/data"
CA.SimplifyPolygon("soils.shp", "C:/output/output.gdb/simplified_soils", "POINT_REMOVE", 100)
以下独立脚本演示了如何使用 SimplifyPolygon 工具。
# Name: SimplifyPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake boundaries
# Import system modules
import arcpy
import arcpy.management as DM
import arcpy.cartography as CA
# Set environment settings
arcpy.env.workspace = "C:/data/Portland.gdb/Hydrography"
# Set local variables
inLakeFeatures = "lakes"
eliminatedFeatures = "C:/data/PortlandOutput.gdb/lakes_eliminated"
simplifiedFeatures = "C:/data/PortlandOutput.gdb/lakes_simplified"
smoothedFeatures = "C:/data/PortlandOutput.gdb/lakes_smoothed"
# Eliminate small islands in lake polygons.
DM.EliminatePolygonPart(inLakeFeatures, eliminatedFeatures, 100, "OR", 0, "CONTAINED_ONLY")
# Simplify lake polygons.
CA.SimplifyPolygon(eliminatedFeatures, simplifiedFeatures, "POINT_REMOVE", 50, 200, "#", "KEEP_COLLAPSED_POINTS")
# Smooth lake polygons.
CA.SmoothPolygon(simplifiedFeatures, smoothedFeatures, "PAEK", 100, "FLAG_ERRORS")
许可信息
- Basic: 否
- Standard: 是
- Advanced: 是