描述
在不改变基本几何形状的情况下,通过移除相对多余的折点来简化面轮廓。
插图
使用
此工具为不同目的采用不同的简化算法:
- 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–122 (1973)。
- BEND_SIMPLIFY 算法的工作原理是识别并消除相对不太重要的折弯来简化数据并以较小的比例显示。这通常比 POINT_REMOVE 算法更接近输入几何,但可能需要更多的处理时间。这种算法基于 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) 中定义的算法。
- WEIGHTED_AREA 算法的工作原理是首先识别每个折点有效区域的三角形。随后采用一系列度量对这些三角形进行加权以对比每个面积的平面度、偏度和凸度。通过加权后的面积指导移除相应折点以简化面轮廓,同时尽可能多地保留特性。这种算法基于 Zhou, Sheng and Jones, Christopher B., "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) 中定义的算法。
- 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 字段将被添加至输出以存储使用过的容差。
- 对于 POINT_REMOVE 算法,容差是每个折点和新创建的线之间的最大允许垂直距离。
- 对于 BEND_SIMPLIFY 算法,容差是近似于有效折弯的圆的直径。
- 对于 WEIGHTED_AREA 算法,容差面积是由三个相邻折点定义的有效三角形的面积。三角形越偏离等边三角形,则它的重量越大,被移除的可能性越小。
- 对于 EFFECTIVE_AREA 算法,容差面积是由三个相邻折点定义的有效三角形的面积。
任何小于最小面积参数的面都将从输出要素类中移除。对于一组共享公共边的相邻面,最小面积适用于该组面的总面积。使用保留折叠点参数来保留移除的面的记录作为点要素。
多部分 (Multipart) 面可简化为单部分。
使用保留折叠点参数(Python 中的 collapsed_point_option)创建输出点要素类以存储代表被移除的面的点,因为这些面小于最小面积。已派生点输出;将使用与输出要素类参数(Python 中的 out_feature_class)相同的名称和位置,但带有 _Pnt 后缀。输出面要素类包含输入要素类中的所有字段。输出点要素类不包含任何这些字段。
输出面要素类具有正确的拓扑。输入数据中的任何拓扑错误都会在输出面要素类中标记出来。输出要素类包括含有相应输入要素 ID 和输入拓扑错误的两个附加字段:InPoly_FID 和 SimPgnFlag。SimPgnFlag 值为 1 表示存在拓扑错误;值为 0(零)表示不存在错误。
使用输入障碍图层参数来定义不得被简化面交叉的要素。障碍要素可以是点、线或面。
处理大型数据集可能会超出内存限制。在这种情况下,考虑通过在制图分区环境设置中确定一个相关的面要素类来通过分区处理输入数据。将按顺序处理分区边界定义的数据部分。生成的输出要素类无缝,而且在分区边界一致。有关详细信息,请参阅使用分区概化大型数据集。
语法
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 值 1 表示存在输入拓扑错误;值 0(零)表示不存在输入错误。 | 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),则将创建一个输出点要素类,用于存储代表被移除的面的点,因为这些面小于最小面积 | 要素类 |
代码示例
SimplifyPolygon 示例(Python 窗口)
以下 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 示例 2(独立脚本)
以下独立脚本演示了如何使用 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: 是