摘要

创建一个新的输出要素类,包含从输入面上删除某些指定大小的部分或孔洞所得的要素。

插图

用法

  • 有两种平滑方法可供选择:
    • PAEK(指数核的多项式近似)方法可根据平滑容差对面进行平滑处理。每个面经过平滑处理后,其折点都可能比之前多。平滑容差参数可控制计算新折点时用到的“移动”路径的长度。长度越短,保留的细节越多,处理时间也越长。
    • 贝塞尔插值方法(Python 中为 BEZIER_INTERPOLATION)对面进行平滑处理时无需使用容差,而是通过创建贝塞尔曲线来匹配输入线。如果输出为 shapefile,则将创建近似的贝塞尔曲线,因为真正的贝塞尔曲线无法存储在 shapefile 中。
  • 平滑处理可能带来拓扑错误,如面轮廓的交叉。使用处理拓扑错误参数中的标记错误选项(Python 中为 FLAG_ERRORS)可识别这些错误。将添加两个字段 InPoly_FID 和 SmoPlyFlag 以包含输入要素 ID 和拓扑错误。SmoPlyFlag 字段中的值为 1 表明存在拓扑错误;0(零)表明不存在错误。InPoly_FID 字段将输出面连接到其输入面。标记错误选项不能在编辑会话中使用。
  • 在平滑处理的过程中,可能创建无效(自相交)的几何,并将对无效的几何进行修复,但不会将其改进。例如,如果一个面自交叉,则这个面将成为多部分面,但显示效果依然是自交叉。

语法

1
SmoothPolygon_cartography (in_features, out_feature_class, algorithm, tolerance, {endpoint_option}, {error_option})
参数 说明 数据类型
in_features 要平滑处理的面要素。 Feature Layer
out_feature_class 要创建的输出面要素类。 Feature Class
algorithm 指定平滑算法。PAEK —Polynomial Approximation with Exponential Kernel(指数核的多项式近似)的首字母缩略词。该方法可以计算不经过输入面折点的平滑面。这是默认设置。BEZIER_INTERPOLATION —拟合折点间的贝塞尔曲线。生成的面将经过输入面的折点。该算法不需要容差。在 shapefile 输出中,将创建近似的贝塞尔曲线。 String
tolerance 设置 PAEK 算法使用的容差。必须指定一个容差,且值必须大于零。可以指定首选单位;默认为要素单位。使用 BEZIER_INTERPOLATION 平滑算法时,必须输入 0 作为占位符。 Linear Unit
endpoint_option(可选) 指定是否保留孤立面环的端点。该选项仅适用于 PAEK 算法。FIXED_ENDPOINT —保留孤立面环的端点。这是默认设置。NO_FIXED —通过孤立面环的端点进行平滑处理。 Boolean
error_option(可选) 指定如何处理拓扑错误(可能是在该过程中引发的,如线的交叉或重叠)。NO_CHECK —指定不检查拓扑错误。这是默认设置。FLAG_ERRORS —指定标记拓扑错误(如果发现拓扑错误)。 String

代码实例

平滑面示例(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用“平滑面”工具。

1
2
3
4
import arcpy
import arcpy.cartography as CA
arcpy.env.workspace = "C:/data"
CA.SmoothPolygon("soils.shp", "C:/output/output.gdb/smoothed_soils", "PAEK", 100)

平滑面示例 2(独立脚本)

以下独立 Python 脚本演示了如何使用“简化面”工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Name: SmoothPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake boundaries

# Import system modules
import arcpy
import arcpy.cartography as CA
import arcpy.management as DM

# 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, "RESOLVE_ERRORS", "KEEP_COLLAPSED_POINTS", "CHECK")

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

了解更多

要了解更多关于ArcMap的知识请参阅以下链接:

最后更新: 2018年03月25日 17:21

原始链接: http://rickeryan.tk/2017/06/15/ArcMap-Ploygon-Smooth/

× 打赏作者~
打赏二维码