简化线 (制图)

摘要

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

插图

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

使用情况

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

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

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

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

    旧版本:

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

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

  • 可以使用保留折叠点参数来创建一个输出点要素类,以存储小于数据空间容差的所有线的端点。 已派生点输出;将使用与输出要素类参数相同的名称和位置,但带有 _Pnt 后缀。 输出线要素类包含输入要素类中的所有字段。 输出点要素类将不包含这些字段。

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

    • 不检查拓扑错误 - 将不会标识拓扑错误。 处理过程会更快。 如果您能够保证数据的拓扑精度,请使用此选项。
    • 标记拓扑错误 - 将标识并标记拓扑错误。 输出要素类将包含 InLine_FIDSimLnFlag 字段。 InLine_FID 字段将包含输入要素 ID。 如果存在拓扑错误,则 SimLnFlag 字段将包含值 1;如果不存在任何错误,则该字段将包含值 0(零)。
    • 解决拓扑错误 - 将不会在输出中创建拓扑错误,并且输入中存在的错误将在交叉点处插入折点。 将保留要素之间的现有拓扑关系,例如共享边。 处理时间会较长。 输出要素类将包含 InLine_FIDSimLnFlag 字段。 InLine_FID 字段将包含输入要素 ID。 如果输入中存在拓扑错误,则 SimLnFlag 字段将包含值 1,如果不存在错误,则包含值 0(零)。
    旧版本:

    ArcGIS Pro 1.4 之前的版本中,该工具使用了检查拓扑错误解决拓扑错误参数来处理拓扑错误。 为了脚本和模型的兼容性,工具语法中仍然包含这些参数,但现在这些参数已被忽略并从地理处理窗格中隐藏。 SimLnFlag 字段用来标记工具在处理过程中引入的拓扑错误。 此字段用于标识输入中存在的错误。

  • 可能使用输入障碍图层参数来标识不得被简化线越过的要素。 障碍要素可以是点、线或面。

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

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

  • 警告:

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

参数

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

将简化的输入线要素。

Feature Layer
输出要素类

简化后的输出线要素类。 它将包含输入要素类中的所有字段。 输出线要素类具有正确的拓扑。 该工具不会引入拓扑错误,但将在输出线要素类中标记输入数据中的拓扑错误。 输出要素类将包括 InLine_FIDSimLnFlag 字段,以分别包含输入要素 ID 和输入拓扑错误。 SimLnFlag 值 1 表示存在输入拓扑错误;值 0(零)表示不存在输入错误。

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
解决拓扑错误
(可选)
旧版本:

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

Boolean
保留折叠的点
(可选)

指定是否创建输出点要素类以存储小于空间容差的所有线的端点。 已派生点输出;将使用与输出要素类参数相同的名称和位置,但带有 _Pnt 后缀。

  • 选中 - 将创建派生的输出点要素类以存储折叠的零长度线的端点。 这是默认设置。
  • 未选中 - 不创建派生的输出点要素类。
Boolean
检查拓扑错误
(可选)
注:

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

Boolean
输入障碍图层
(可选)

包含充当简化中障碍的要素的输入。 生成的简化线不会接触或越过障碍要素。 例如,在简化等值线时,将点高度要素输入作为障碍可确保简化等值线不会越过这些点进行简化。 输出不会违反测量点高度所述的高程。

Feature Layer
处理拓扑错误
(可选)

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

  • 不检查拓扑错误将不会标识拓扑错误。 这是默认设置。
  • 标记拓扑错误将标记拓扑错误。
  • 解决拓扑错误将解决拓扑错误。
String

派生输出

标注说明数据类型
折叠至零长度的线

如果选中保留折叠点参数,则将创建一个输出点要素类,用于存储小于数据空间容差的线的端点。

Feature Class

arcpy.cartography.SimplifyLine(in_features, out_feature_class, algorithm, tolerance, {error_resolving_option}, {collapsed_point_option}, {error_checking_option}, {in_barriers}, {error_option})
名称说明数据类型
in_features

将简化的输入线要素。

Feature Layer
out_feature_class

简化后的输出线要素类。 它将包含输入要素类中的所有字段。 输出线要素类具有正确的拓扑。 该工具不会引入拓扑错误,但将在输出线要素类中标记输入数据中的拓扑错误。 输出要素类将包括 InLine_FIDSimLnFlag 字段,以分别包含输入要素 ID 和输入拓扑错误。 SimLnFlag 值 1 表示存在输入拓扑错误;值 0(零)表示不存在输入错误。

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
error_resolving_option
(可选)
旧版本:

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

Boolean
collapsed_point_option
(可选)

指定是否创建输出点要素类以存储小于空间容差的所有线的端点。 已派生点输出;将使用与 out_feature_class 参数值相同的名称和位置,但带有 _Pnt 后缀。

  • KEEP_COLLAPSED_POINTS将创建派生的输出点要素类以存储折叠的零长度线的端点。 这是默认设置。
  • NO_KEEP不创建派生的输出点要素类。
Boolean
error_checking_option
(可选)
注:

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

Boolean
in_barriers
[in_barriers,...]
(可选)

包含充当简化中障碍的要素的输入。 生成的简化线不会接触或越过障碍要素。 例如,在简化等值线时,将点高度要素输入作为障碍可确保简化等值线不会越过这些点进行简化。 输出不会违反测量点高度所述的高程。

Feature Layer
error_option
(可选)

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

  • NO_CHECK将不会标识拓扑错误。 这是默认设置。
  • FLAG_ERRORS将标记拓扑错误。
  • RESOLVE_ERRORS将解决拓扑错误。
String

派生输出

名称说明数据类型
out_point_feature_class

collapsed_point_option 参数为 KEEP_COLLAPSED_ POINTS 时,将创建一个输出点要素类,用于存储小于数据空间容差的线的端点。

Feature Class

代码示例

SimplifyLine 示例 1(Python 窗口)

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

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.cartography.SimplifyLine(
    "roads.shp", 
    "C:/output/output.gdb/simplified_roads", 
    "POINT_REMOVE", 
    20)
SimplifyLine 示例 2(独立脚本)

以下独立脚本演示了如何使用 SimplifyLine 函数。

# Name: SimplifyLine_Example2.py
# Description: Simplify line features from two feature classes, rivers and coastlines,
# while maintaining their connections

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/Portland.gdb/Hydrography"
 
# Set local variables
inRiverFeatures = "rivers"
inCoastlineFeatures = "coastlines"

mergedFeatures = "C:/data/PortlandOutput.gdb/merged_lines"
simplifiedFeatures = "C:/data/PortlandOutput.gdb/merged_lines_simplified"
tempLayer = "tempLyr"

outRiverFeatureClass = "C:/data/PortlandOutput.gdb/rivers_final"
outCoastlineFeatureClass = "C:/data/PortlandOutput.gdb/coastlines_final"

# Merge rivers and coastlines into one feature class, 
# assuming that they have a common f-code field 
# with value 40 for rivers and 80 for coastlines.
arcpy.management.Merge(inRiverFeatures, inCoastlineFeatures, mergedFeatures)

# Simplify all lines.
arcpy.cartography.SimplifyLine(mergedFeatures, 
                simplifiedFeatures, 
                "BEND_SIMPLIFY", 
                100, 
                "KEEP_COLLAPSED_POINTS")
 
# Select rivers and coastlines by their f-code values 
# and put them in separate feature classes.
arcpy.management.MakeFeatureLayer(simplifiedFeatures, tempLayer, "f-code = 40")
arcpy.management.CopyFeatures(tempLayer, outRiverFeatureClass)

arcpy.management.MakeFeatureLayer(simplifiedFeatures, tempLayer, "f-code = 80")
arcpy.management.CopyFeatures(tempLayer, outCoastlineFeatureClass)

许可信息

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

相关主题