定位异常值 (3D Analyst)
摘要
标识来自 terrain、TIN 或 LAS 数据集的异常高程测量值,这些差异值超出了高程值的定义范围或具有与周围表面不一致的坡度特征。
用法
-  
可针对异常值检测应用应用硬限制和应用比较过滤器选项。
注:两个过滤器都启动后,会先应用硬限制。
 表面的有效高程值范围已知时,考虑使用应用硬限制选项。将在输出中创建超出由 Z 最小绝对值和 Z 最大绝对值定义的范围的点高程测量值。
考虑使用应用比较过滤器选项来定位超出相对于邻近测量值的高度或斜度差的数据点。此选项会测试每个数据点与其自然相邻点的高度和坡度差异。超出容差比用来确定测试点的邻近区域中点的数量,必须超出其坡度或高度容差才能将该点视为异常值。
- 对于任何有 X 个通过三角形边连接结点的给定点,如果从该给定点到连接点的坡度大于 m 个点中的坡度容差(其中 m 是超出容差比的 n 倍),那么将在输出中写入此给定点。
 异常值限制限制了可以写入输出中的点的数量。达到此限制后,该工具就会返回警告并停止查找异常值。
输出点会将名为 REASON 的整型字段作为属性,该字段的值可标识包括点测量值得出的异常值识别条件
- 0 - 硬限制
 - 1 - 硬限制和比较过滤器
 - 2 - 比较过滤器
 
要从 terrain 数据集消除异常点,则考虑针对在感兴趣区域参数中指定的异常点使用删除 Terrain 点工具。
考虑通过使用使用要素设置 LAS 类代码工具,将 LAS 数据集中标识的异常点重分类为噪声。
语法
| 参数 | 说明 | 数据类型 | 
in_surface  | 
 将要分析的 terrain、TIN 或 LAS 数据集。  | LAS Dataset Layer; Terrain Layer; TIN Layer | 
out_feature_class  | 
 输出要素类。  | Feature Class | 
apply_hard_limit (可选)  | 指定使用 Z 最小绝对值和 Z 最大绝对值寻找异常值。 
  | Boolean | 
absolute_z_min (可选)  | 
 如果应用了硬限制,那么任何一个点的高程低于此值将被视为异常值。默认值为 0。  | Double | 
absolute_z_max (可选)  | 
 如果应用了硬限制,那么任何一个点的高程高于此值将被视为异常值。默认值为 0。  | Double | 
apply_comparison_filter (可选)  | 
 比较过滤器包括用于确定异常值(z_tolerance、slope_tolerance 和 exceed_tolerance_ratio)的三个参数。 
  | Boolean | 
z_tolerance (可选)  | 
 用于在应用了比较过滤器的情况下比较邻近点的 Z 值。默认值为 0。  | Double | 
slope_tolerance (可选)  | 
 用于标识异常值点的连续点之间坡度变化的阈值。坡度用百分比表示,默认为 150。  | Double | 
exceed_tolerance_ratio (可选)  | 
 将确定每个异常值点的条件定义为其邻域内必须超出指定比较过滤器的点比例的函数。例如,默认值 0.5 表示查询点周围至少有一半的点必须超出比较过滤器,这样查询点才会被标记为异常值。值 0.7 表示至少 70% 的相邻点必须超出容差。  | Double | 
outlier_cap (可选)  | 
 异常值点的最大数量可被写入至输出。一旦达到了该值,将无法搜索其他异常值。默认值为 2,500。  | Long | 
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.LocateOutliers_3d("tin", "outliers.shp", "NO_APPLY_HARD_LIMIT", 0, 0, 
                        "APPLY_COMPARISON_FILTER", 0, 150, 0.5, 2500)
下面的示例演示了如何在独立 Python 脚本中使用此工具:
'''**********************************************************************
Name: Delete Terrain Outliers
Description: Uses Locate Outliers to identify outlier points in 
             a terrain dataset, and eliminates the outliers from the 
             terrain with Delete Terrain Points.
**********************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
from arcpy import env
try:
    arcpy.CheckOutExtension('3D')
    # Set Local Variables
    env.workspace = 'C:/data'
    terrain = 'test.gdb/featuredataset/sample_terrain'
    terrainPt = 'elevation_pts' # name of terrain point data source
    outliers = 'in_memory/outliers'
    # Execute LocateOutliers
    arcpy.ddd.LocateOutliers(terrain, outliers, 'APPLY_HARD_LIMIT', -10, 
                             350, 'APPLY_COMPARISON_FILTER', 1.2, 120, 
                             0.8, 8000)
    # Execute Delete Terrain Points
    arcpy.ddd.DeleteTerrainPoints(terrain, terrainPt, outliers)
    arcpy.CheckInExtension('3D')
except arcpy.ExecuteError:
    print arcpy.GetMessages()
except:
    # Get the traceback object
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    # Concatenate error information into message string
    pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
          .format(tbinfo, str(sys.exc_info()[1]))
    msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
    # Return python error messages for script tool or Python Window
    arcpy.AddError(pymsg)
    arcpy.AddError(msgs)