摘要
在不改变基本几何形状的情况下,通过移除相对多余的折点来简化面轮廓。
插图
用法
此工具针对不同目的采用不同的简化算法:
- 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., (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 中定义的算法。
简化容差参数值用于确定简化程度。容差越大,生成的几何越粗糙。容差越小,生成的几何越接近输入几何。MinSimpTol 和 MaxSimpTol 字段将被添加至输出以存储使用过的容差。
- 对于 POINT_REMOVE 算法,容差表示每个折点与新创建的线之间的最大允许垂直距离。
- 对于 BEND_SIMPLIFY 算法,容差表示近似于有效折弯的圆的直径。
- 对于 WEIGHTED_AREA 算法,容差的平方表示由三个相邻折点定义的有效三角形的面积。
任何小于最小面积参数的面都将从输出要素类中移除。对于一组共享公共边的相邻面,最小面积适用于该组面的总面积。使用保留折叠点参数来将移除的面记录为点要素。
多部分 (Multipart) 面可简化为单部分。
使用保留折叠点参数(Python 中的 collapsed_point_option)来创建一个输出点要素类,以存储用于表示因低于最小面积而被移除的任何面的点。已派生点输出;它将与输出要素类参数(Python 中的 out_feature_class)使用相同的名称和位置,但带有 _Pnt 后缀。输出面要素类包含输入要素类中的所有字段。输出点要素类不包含任何这些字段。
输出面要素类具有正确的拓扑。输入数据中的任何拓扑错误都会在输出面要素类中标记出来。输出要素类包括含有相应输入要素 ID 和输入拓扑错误的两个附加字段:InPoly_FID 和 SimPgnFlag。SimPgnFlag 值为 1 表示存在拓扑错误;值为 0 (零)表示不存在错误。
使用输入障碍图层参数来标识不得被简化面越过的要素。障碍要素可以是点、线或面。
处理大型数据集可能会超出内存限制。在这种情况下,考虑通过在制图分区环境设置中确定一个相关的面要素类来通过分区处理输入数据。将按顺序处理分区边界定义的数据部分。生成的输出要素类无缝,而且在分区边界一致。有关详细信息,请参阅使用分区概化大型数据集。
语法
SimplifyPolygon_cartography (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 |
代码示例
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")
环境
许可信息
- ArcGIS Desktop Basic: 否
- ArcGIS Desktop Standard: 是
- ArcGIS Desktop Advanced: 是