简化面 (制图)

摘要

在不改变基本几何形状的情况下,通过移除相对多余的折点来简化面要素。

插图

简化面工具算法选项示例
此处显示了简化算法的示例结果以进行比较。

使用情况

  • 此工具为不同目的使用不同的简化算法。 要了解有关这些算法的详细信息,请参阅简化线和简化面的工作原理

    • 保留关键点(道格拉斯-普克)算法(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–122 (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., "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) 中定义的算法。

  • 简化容差参数值用于确定简化程度。 容差越大,生成的几何越粗糙。 容差越小,生成的几何越接近输入几何。 MinSimpTolMaxSimpTol 字段将被添加至输出以存储使用过的容差。

    • 对于保留关键点(道格拉斯-普克)算法,容差表示每个折点与新创建的线之间的最大允许垂直距离。
    • 对于保留关键折弯 (Wang-Müller) 算法,容差是近似于有效折弯的圆的直径。
    • 对于保留加权有效面积 (Zhou-Jones) 算法,容差面积是由三个相邻折点定义的有效三角形的面积。 三角形越偏离等边三角形,则它的重量越大,被移除的可能性越小。
    • 对于保留有效面积 (Visvalingam-Whyatt) 算法,容差面积是由三个相邻折点定义的有效三角形的面积。

  • 任何小于最小面积参数值的面都将从输出要素类中移除。 对于一组共享公共边的相邻面,最小面积适用于该组面的总面积。 使用保留折叠点参数来保留移除的面的记录作为点要素。

  • 多部件面将被简化为单个部件。

  • 使用保留折叠点参数(Python 中的 collapsed_point_option)可创建输出点要素类,以存储表示因小于最小面积而遭到移除的所有面的点。 已派生点输出;将使用与输出要素类参数值(Python 中的 out_feature_class)相同的名称和位置,但带有 _Pnt 后缀。 输出面要素类包含输入要素类中的所有字段。 输出点要素类不包含以下任何字段。

  • 输出面要素类具有正确的拓扑。 输入数据中的任何拓扑错误都会在输出面要素类中标记出来。 输出要素类包括含有相应输入要素 ID 和输入拓扑错误或差异的两个附加字段:InPoly_FIDSimPgnFlag

    SimPgnFlag 字段值如下:

    • SimPgnFlag = 0 表示不存在错误。
    • SimPgnFlag = 1 表示存在拓扑错误。
    • SimPgnFlag = 2 表示已被分区分割的要素,该要素经过简化后现在小于最小面积。 该标记可能仅显示在分割要素的一部分上。 这些要素将全部保留在输出要素类中。 仅在使用制图分区环境设置时才会出现此情况。
    旧版本:

    在之前版本的工具中,可能会在处理期间生成拓扑错误。 为了脚本和模型的兼容性,工具语法中仍然包含处理拓扑错误(Python 中的 error_option)参数,但现在该参数已被忽略并从工具对话框中隐藏。

    SimPgnFlag 字段用来标记工具在处理中引入的输出要素类中的拓扑错误。 现在,该字段用于标记输入中存在的错误。 另外,在拓扑分辨率课程中,之前版本的工具针对每个要素修改了容差并将这些值存储在 MinSimpTolMaxSimpTol 字段中。 在当前执行情况下,这些字段中的值将相等并等于简化容差参数中指定的容差。 请确保根据这些字段修改现有模型或脚本。

  • 使用输入障碍图层参数来定义不得被简化面交叉的要素。 障碍要素可以是点、线或面。

  • 即使未选中传输字段域、子类型和属性规则环境,域和子类型也会被复制到输出。

  • 处理大型数据集可能会超出内存限制。 在这种情况下,考虑通过在制图分区环境设置中确定一个相关的面要素类来通过分区处理输入数据。 将按顺序处理分区边界定义的数据部分。 生成的输出要素类无缝,而且在分区边界一致。 有关详细信息,请参阅使用分区概化大型数据集

参数

标注说明数据类型
输入要素

要简化的输入面要素。

Feature Layer
输出要素类

简化后的输出面要素类。 其中包含输入要素类中的所有字段。 输出面要素类具有正确的拓扑。 该工具不会引入拓扑错误,但输入数据中的拓扑错误会在输出面要素类中标记出来。

输出要素类包括含有相应输入要素 ID 和输入拓扑错误或差异的两个附加字段:InPoly_FIDSimPgnFlag

SimPgnFlag 属性值如下:

  • SimPgnFlag = 0 表示不存在错误。
  • SimPgnFlag = 1 表示存在拓扑错误。
  • SimPgnFlag = 2 表示已被分区分割的要素,该要素经过简化后现在小于最小面积。 该标记可能仅显示在分割要素的一部分上。 这些要素将全部保留在输出要素类中。 仅在使用制图分区环境设置时才会出现此情况。

Feature Class
简化算法

指定面简化算法。

  • 保留关键点(道格拉斯-普克)保留构成面轮廓的基本形状的关键点,而移除所有其他点(道格拉斯-普克)。 这是默认设置。
  • 保留关键折弯 (Wang-Müller)保留线中的关键折弯,并移除多余折弯 (Wang-Müller)。
  • 保留加权有效面积 (Zhou-Jones)保留形成有效三角形面积的折点,这些面积已根据三角形形状进行了加权 (Zhou-Jones)。
  • 保留有效面积 (Visvalingam-Whyatt)保留形成有效三角形面积的折点 (Visvalingam-Whyatt)。
String
简化容差

容差用于确定简化程度。 可以选择首选单位;否则,将使用输入单位。 MinSimpTolMaxSimpTol 字段将被添加至输出以存储在执行处理时使用过的容差。

  • 对于保留关键点(道格拉斯-普克)算法,容差表示每个折点与新创建的线之间的最大允许垂直距离。
  • 对于保留关键折弯 (Wang-Müller) 算法,容差是近似于有效折弯的圆的直径。
  • 对于保留加权有效面积 (Zhou-Jones) 算法,容差面积是由三个相邻折点定义的有效三角形的面积。 三角形越偏离等边三角形,则它的重量越大,被移除的可能性越小。
  • 对于保留有效面积 (Visvalingam-Whyatt) 算法,容差面积是由三个相邻折点定义的有效三角形的面积。
Linear Unit
最小面积
(可选)

要保留的面的最小面积。 默认值为零,即保留所有面。 可以为指定的值选择首选单位;否则,将使用输入单位。

Areal Unit
处理拓扑错误
(可选)
旧版本:

这是一个不再使用的旧参数。 以前使用该参数来指定如何处理可能在处理过程中引入的拓扑错误。 为了脚本和模型的兼容性,工具语法中仍然包含这些参数,但现在这些参数已从工具对话框中隐藏。

String
保留折叠的点
(可选)

指定是否创建输出点要素类以存储被移除的面的中心,因为这些面小于最小面积参数值。 已派生点输出;将使用与输出要素类参数相同的名称和位置,但带有 _Pnt 后缀。

  • 选中 - 将创建派生的输出点要素类以存储被移除的面的中心,因为这些面小于最小面积。 这是默认设置。
  • 未选中 - 不创建派生的输出点要素类。
Boolean
输入障碍图层
(可选)

包含充当简化中障碍的要素的输入。 生成简化面不会接触障碍要素或与其交叉。 例如,当简化森林覆盖区域时,生成的简化森林面不会穿过被定义为障碍的道路要素。

Feature Layer

派生输出

标注说明数据类型
折叠的面积为零的面

如果使用保留折叠点参数(Python 中的 collapsed_point_option),则将创建一个输出点要素类,用于存储代表被移除的面的点,因为这些面小于最小面积。

Feature Class

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_FIDSimPgnFlag

SimPgnFlag 属性值如下:

  • SimPgnFlag = 0 表示不存在错误。
  • SimPgnFlag = 1 表示存在拓扑错误。
  • SimPgnFlag = 2 表示已被分区分割的要素,该要素经过简化后现在小于最小面积。 该标记可能仅显示在分割要素的一部分上。 这些要素将全部保留在输出要素类中。 仅在使用制图分区环境设置时才会出现此情况。

Feature Class
algorithm

指定面简化算法。

  • POINT_REMOVE保留构成面轮廓的基本形状的关键点,而移除所有其他点(道格拉斯-普克)。 这是默认设置。
  • BEND_SIMPLIFY保留线中的关键折弯,并移除多余折弯 (Wang-Müller)。
  • WEIGHTED_AREA保留形成有效三角形面积的折点,这些面积已根据三角形形状进行了加权 (Zhou-Jones)。
  • EFFECTIVE_AREA保留形成有效三角形面积的折点 (Visvalingam-Whyatt)。
String
tolerance

容差用于确定简化程度。 可以选择首选单位;否则,将使用输入单位。 MinSimpTolMaxSimpTol 字段将被添加至输出以存储在执行处理时使用过的容差。

  • 对于 POINT_REMOVE 算法,容差是每个折点和新创建的线之间的最大允许垂直距离。
  • 对于 BEND_SIMPLIFY 算法,容差是近似于有效折弯的圆的直径。
  • 对于 WEIGHTED_AREA 算法,容差面积是由三个相邻折点定义的有效三角形的面积。 三角形越偏离等边三角形,则它的重量越大,被移除的可能性越小。
  • 对于 EFFECTIVE_AREA 算法,容差面积是由三个相邻折点定义的有效三角形的面积。
Linear Unit
minimum_area
(可选)

要保留的面的最小面积。 默认值为零,即保留所有面。 可以为指定的值选择首选单位;否则,将使用输入单位。

Areal Unit
error_option
(可选)
旧版本:

这是一个不再使用的旧参数。 以前使用该参数来指定如何处理可能在处理过程中引入的拓扑错误。 为了脚本和模型的兼容性,工具语法中仍然包含这些参数,但现在这些参数已从工具对话框中隐藏。

String
collapsed_point_option
(可选)

指定是否创建输出点要素类以存储被移除的面的中心,因为这些面小于 minimum_area 参数值。 已派生点输出;将使用与 out_feature_class参数中指定的面输出要素类相同的名称和位置,但带有 _Pnt 后缀。

  • KEEP_COLLAPSED_POINTS将创建派生的输出点要素类以存储被移除的面的中心,因为这些面小于最小面积。 这是默认设置。
  • NO_KEEP不创建派生的输出点要素类。
Boolean
in_barriers
[in_barriers,...]
(可选)

包含充当简化中障碍的要素的输入。 生成简化面不会接触障碍要素或与其交叉。 例如,当简化森林覆盖区域时,生成的简化森林面不会穿过被定义为障碍的道路要素。

Feature Layer

派生输出

名称说明数据类型
out_point_feature_class

如果使用保留折叠点参数(Python 中的 collapsed_point_option),则将创建一个输出点要素类,用于存储代表被移除的面的点,因为这些面小于最小面积。

Feature Class

代码示例

SimplifyPolygon 示例 1(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: 是

相关主题