ArcMap面要素处理之简化面(Simplify Polygon)
Posted bayberryan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcMap面要素处理之简化面(Simplify Polygon)相关的知识,希望对你有一定的参考价值。
创建一个新的输出要素类,包含从输入面上删除某些指定大小的部分或孔洞所得的要素。
插图
用法
-
存在两种简化方法:
-
POINT_REMOVE 方法是两种方法中较快的。它可移除多余的折点。此方法多用于数据压缩或更为粗糙的简化,尤其适用于大家都已经了解的数据。随着容差的增大,生成的面中有棱角的部分(尖锐拐角)将显著增加,所以面要素可能变得不够美观。
-
BEND_SIMPLIFY 方法较慢,但通常会生成与原始几何形状更为接近的结果,因此更加美观。其操作方式为消除面要素边界上不太重要的弯曲。此方法用于少量的、更为精细的简化。
-
-
最小面积参数仅适用于简化的面。任何在简化过程完成后小于最小面积的面要素都将从输出要素类中移除。对于一组共享公共边的相邻面,该参数适用于该组面的总面积。
-
该工具会产生两个输出要素类,一个是存储了简化之后的面的面要素类和一个是存储了用来表示任意折叠于一点的面的那些点的点要素类。点的输出名称和位置自动从输出的面的名称获得,并以 _Pnt 作为后缀。面输出将包含所有输入字段;点输出不包含任何输入字段。
-
多部分 (Multipart) 面可简化为单部分。
-
以下为用于处理输出中的拓扑错误的 3 个选项:
-
NO_CHECK:不检查简化过程所引入的拓扑错误。处理过程会更快。只有在可以保证数据的拓扑准确性时才使用该选项。
-
FLAG_ERRORS
:将对简化过程所引入的拓扑错误进行标记。当标识拓扑错误的重要性大于解决错误的重要性时,请使用此选项。编辑会话中不支持此选项。
-
面输出将包含两个表示要素是否存在拓扑错误的新字段。InPoly_FID 和 SimPlyFlag 分别包含输入要素 ID 和拓扑错误。
-
InPoly_FID 字段将折叠的点连接到其输入面。
-
在 SimPlyFlag 字段中,值为 1 表示引入了错误,而值为 0(零)表示未引入错误。
-
拓扑错误解决之后,标记值仍将保持不变。SimPlyFlag 字段用于检查包含拓扑错误的要素。
-
-
RESOLVE_ERRORS
:修复简化过程所引入的拓扑错误。处理时间将会更长。编辑会话中不支持此选项。
-
指定的容差可能会适合大多数面要素,但并非全部,特别是拥挤区域中的面要素。第一轮简化后如果检测到拓扑错误,则将定位涉及的边界线段(非整个面)并使用更小的容差。
-
此减小后的容差为减小前的百分之五十。新的容差值将用于重新简化这些线段。该迭代过程会根据需要重复多次,直到不存在拓扑错误为止。
-
面输出要素类包含的面数量与输入要素中包含的面数量相同,并且其使用两个新字段 MaxSimpTol 和 MinSimpTol 存储迭代过程中简化每个面时所应用的最大容差和最小容差。如果未引入错误,MaxSimpTol 和 MinSimpTol 的值将与指定的简化容差的值相同。
-
如果简化容差值相对较大,较大的面要素旁的较小面要素最终可能会并入较大面要素的内部。本程序无法检测到这种类型的空间关系错误。
-
-
对于 NO_CHECK 和 FLAG_ERRORS 选项,简化过程中可能会创建自相交的几何形状,并将自动修复。例如,如果面要素自身存在交叉,则经过修复,它将成为多部分面,以便各部分不存在交叉,尽管面要素的显示效果依然是自交叉。
-
-
当使用了 NO_CHECK 或 FLAG_ERRORS 时,或者选中了保留折叠点复选框时,将对点输出进行填充。如果输入面要素包含了多个部分,并且其中一个部分成为折叠的点,则表示该部分的点也将包括在点输出中。
语法
SimplifyPolygon_cartography (in_features, out_feature_class, algorithm, tolerance, {minimum_area}, {error_option}, {collapsed_point_option})
参数 | 说明 | 数据类型 |
---|---|---|
in_features | 要简化的面要素。 | Feature Layer |
out_feature_class | 要创建的输出面要素类。 | Feature Class |
algorithm | 指定面简化算法。POINT_REMOVE —保留构成面的基本几何形状的关键点并移除所有其他点。这是默认设置。BEND_SIMPLIFY —保留面的主要几何形状并移除边界中多余的弯曲。 | String |
tolerance | 用于确定简化程度的容差。必须指定一个容差,且值必须大于零。可以选择首选单位;默认为要素单位。对于 POINT_REMOVE 算法,指定的容差表示允许的最大偏移量。对于 BEND_SIMPLIFY 算法,指定的容差表示参考弯曲基线的长度。 | Linear unit |
minimum_area(可选) | 设置要保留的简化面的最小面积。默认值为零,即保留所有面。可以为指定的值选择首选单位;默认为要素单位。 | Areal unit |
error_option(可选) | 指定处理拓扑错误的方式(这些拓扑错误可能是在处理时引入的,其中包括交叉的线、重叠的线和折叠为零长度的线)。NO_CHECK —指定不检查拓扑错误。这是默认设置。FLAG_ERRORS —指定标记拓扑错误(如果发现拓扑错误)。RESOLVE_ERRORS —指定解决拓扑错误(如果发现拓扑错误)。 | String |
collapsed_point_option(可选) | 指定是否将处理中发现的任何折叠的面积为零的面要素作为点保留下来。仅当指定了 NO_CHECK 或 FLAG_ERRORS 时,此选项才可用。KEEP_COLLAPSED_POINTS —指定将折叠的面积为零的面要素作为点保留下来。折叠面中边界的端点将存储在位于输出要素类位置的点要素类中,以输出要素类的名称加上后缀 _Pnt 作为其名称。这是默认设置。NO_KEEP —指定折叠的面积为零的面要素不作为点保留下来,即使在处理中发现也不保留;因此,点要素类将为空。 | Boolean |
代码实例
简化面示例(Python 窗口)
以下 Python 窗口脚本演示了如何在即时模式下使用“简化面”工具。
import arcpy
from arcpy import env
import arcpy.cartography as CA
env.workspace = "C:/data"
CA.SimplifyPolygon("soils.shp", "C:/output/output.gdb/simplified_soils", "POINT_REMOVE", 100)
简化面示例 2(独立脚本)
以下独立 Python 脚本演示了如何使用“简化面”工具。
# Name: SimplifyPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake boundaries
# Author: ESRI
# Import system modules
import arcpy
from arcpy import env
import arcpy.management as DM
import arcpy.cartography as CA
# Set environment settings
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的知识请参阅以下链接:
以上是关于ArcMap面要素处理之简化面(Simplify Polygon)的主要内容,如果未能解决你的问题,请参考以下文章