简化面 (制图)

摘要

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

插图

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

使用情况

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

    简化算法参数的选项如下所示。

    • 保留关键点(道格拉斯-普克)算法(Python 中的 "POINT_REMOVE")可以标识并移除相对多余的折点来简化数据并以较小的比例显示。 这是此工具中最快的简化算法选项。 此选项通常用于数据压缩或粗糙的简化。 随着容差的增大,生成的面轮廓中有棱角的部分将显著增加。
    • 保留关键折弯 (Wang-Müller) 算法(Python 中的 "BEND_SIMPLIFY")可以标识并消除相对不太重要的折弯来简化数据并以较小的比例显示。 相比于保留关键点(道格拉斯-普克)选项,通常这种算法生成的结果更接近输入几何,但可能需要更多的处理时间。
    • 保留加权有效区域 (Zhou-Jones) 算法(Python 中的 "WEIGHTED_AREA")可以标识每个折点有效区域的三角形。 随后采用一系列度量对这些三角形进行加权以对比每个面积的平面度、偏度和凸度。 通过加权后的面积指导移除相应折点以简化面轮廓,同时尽可能多地保留特性。
    • 保留有效面积 (Visvalingam-Whyatt) 算法(Python 中的 "EFFECTIVE_AREA")可通过识别每个折点的有效三角形面积来指导移除折点以简化面轮廓,同时尽可能多地保留特性。

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

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

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

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

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

  • 在简化几何时,可能会产生拓扑错误,例如要素之间的自相交和重叠。 处理拓扑错误参数具有三个选项,用于确定在这些情况下会发生什么:

    • 不检查拓扑错误 - 将不会标识拓扑错误。 处理过程会更快。 如果您能够保证数据的拓扑精度,请使用此选项。
    • 标记拓扑错误 - 将标识并标记拓扑错误。 输出要素类将包含 InPoly_FIDSimPgnFlag 字段。 InPoly_FID 字段将包含输入要素 ID。 如果存在拓扑错误,则 SimPgnFlag 字段将包含值 1;如果不存在任何错误,则该字段将包含值 0(零)。
    • 解决拓扑错误 - 将不会在输出中创建拓扑错误,并且输入中存在的错误将在交叉点处插入折点。 将保留要素之间的现有拓扑关系,例如共享边。 处理时间会较长。 输出要素类将包含 InPoly_FIDSimPgnFlag 字段。 InPoly_FID 字段将包含输入要素 ID。 SimPgnFlag 字段值如下:
      • 0 = 不存在任何拓扑错误。
      • 1 = 输入中存在拓扑错误。
      • 2 = 该要素已被分区分割,简化后的部分现在小于最小面积。 该标记可能仅显示在分割要素的一部分上。 这些要素将保留在输出要素类中。 仅当使用制图分区环境设置时才会出现此情况。
    旧版本:

    在拓扑分辨率课程中,之前版本的工具针对每个要素修改了容差并将这些值存储在 MinSimpTolMaxSimpTol 字段中。 在当前实施中,这些字段中的值将相同并等于为简化容差参数指定的值。 请确保根据这些字段修改现有模型或脚本。

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

  • 即使未选中传送地理数据库字段属性环境,属性域和子类型也将被复制到输出。

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

    警告:

    处理拓扑错误参数设置为不检查拓扑错误标记拓扑错误时,将忽略“制图分区”环境设置。

参数

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

将进行简化的输入面要素。

Feature Layer
输出要素类

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

输出要素类将包括 InPoly_FIDSimPgnFlag 字段,以分别包含输入要素 ID 和输入拓扑错误或差异。

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

派生输出

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

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

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

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

输出要素类将包括 InPoly_FIDSimPgnFlag 字段,以分别包含输入要素 ID 和输入拓扑错误或差异。

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
(可选)

指定处理拓扑错误的方式。 拓扑误差可能是在简化过程中引入的,并且可能包括交叉的线或重叠的线。

  • NO_CHECK将不会标识拓扑错误。 这是默认设置。
  • FLAG_ERRORS将标记拓扑错误。
  • RESOLVE_ERRORS将解决拓扑错误。
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

如果 collapsed_point_option 参数为 KEEP_COLLAPSED_ POINTS,则将创建一个输出点要素类,用于存储代表被移除的面的点,因为这些面小于最小面积。

Feature Class

代码示例

SimplifyPolygon 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 SimplifyPolygon 函数。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.cartography.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
 
# 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.
arcpy.management.EliminatePolygonPart(inLakeFeatures, eliminatedFeatures, 100, 
                                      "OR", 0, "CONTAINED_ONLY")
 
# Simplify lake polygons
arcpy.cartography.SimplifyPolygon(eliminatedFeatures, simplifiedFeatures, 
                                  "POINT_REMOVE", 50, 200, "#", 
                                  "KEEP_COLLAPSED_POINTS")

# Smooth lake polygons
arcpy.cartography.SmoothPolygon(simplifiedFeatures, smoothedFeatures, "PAEK", 100, 
                 "FLAG_ERRORS")

许可信息

  • Basic: 否
  • Standard: 是
  • Advanced: 是

相关主题