简化线 (制图)

描述

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

插图

简化线工具所使用的四种简化算法的比较

使用方法

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

    • 保留关键点(道格拉斯-普克)算法(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–22 (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 字段都将被添加至输出以存储使用过的容差。

    旧版本:

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

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

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

  • 输出线要素类具有正确的拓扑。输入数据中的任何拓扑错误都会在输出线要素类中标记出来。输出要素类包括含有相应输入要素 ID 和输入拓扑错误的两个附加字段:InLine_FIDSimLnFlagSimLnFlag 值为 1 表示存在拓扑错误;值为 0(零)表示不存在错误。

    旧版本:

    对于 ArcGIS Pro 1.4 之前版本的工具,可能会在处理期间生成拓扑错误。其中已包含检查拓扑错误(Python 中的 error_checking_option)和 解决拓扑错误(Python 中的 error_resolving_option)参数以识别这些错误,并可让您选择解决这些错误。为了脚本和模型的兼容性,工具语法中仍然包含这些参数,但现在这些参数已被忽略并从工具对话框中隐藏。SimLnFlag 字段用来标记工具在处理过程中引入的拓扑错误。现在,该字段用于标记输入中存在的错误。

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

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

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

语法

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

要简化的输入线要素。

Feature Layer
out_feature_class

简化后的输出线要素类。其中包含输入要素类中的所有字段。输出线要素类具有正确的拓扑。该工具不会引入拓扑错误,但输入数据中的拓扑错误会在输出线要素类中标记出来。输出要素类包括含有相应输入要素 ID 和输入拓扑错误的两个附加字段:InLine_FIDSimLnFlagSimLnFlag1 表示存在输入拓扑错误;值 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

派生输出

名称说明数据类型
out_point_feature_class

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

要素类

代码示例

SimplifyLine 示例(Python 窗口)

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

import arcpy
import arcpy.cartography as CA
arcpy.env.workspace = "C:/data"
CA.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
import arcpy.management as DM
import arcpy.cartography as CA
 
# 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.
DM.Merge(inRiverFeatures, inCoastlineFeatures, mergedFeatures)
# Simplify all lines.
CA.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.
DM.MakeFeatureLayer(simplifiedFeatures, tempLayer, "f-code = 40")
DM.CopyFeatures(tempLayer, outRiverFeatureClass)
DM.MakeFeatureLayer(simplifiedFeatures, tempLayer, "f-code = 80")
DM.CopyFeatures(tempLayer, outCoastlineFeatureClass)

许可信息

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

相关主题