Summary
Identifies anomalous elevation measurements from terrain, TIN, or LAS datasets that exceed a defined range of elevation values or have slope characteristics that are inconsistent with the surrounding surface.
Usage
-
Both the Apply Hard Limit and Apply Comparison Filter options can be applied for outlier detection. If both options are enabled, the hard limit is applied first.
The Apply Hard Limit option will treat any point with an elevation value that is below the Absolute Z Minimum and above the Absolute Z Maximum as an outlier. Consider using this option if the range of valid elevation values for the surface is known.
Consider using the Apply Comparison Filter option to locate data points that exceed a height or slope difference relative to neighboring measurements. Each measurement in the surface is tested for height and slope deviation from its natural neighbors. The Exceed Tolerance Ratio option is used to determine the number of surrounding measurements from the neighborhood of the query point that the slope or height tolerance must exceed before the point is considered an outlier.
- For any given point having X number of nodes connected by triangle edges, if the slope from it to a connected point is greater than the Slope Tolerance in m points (where m is n times the Exceed Tolerance Ratio), the point is considered an outlier.
The comparison filter is best suited for bare earth point data. It should not be run against a dataset using vegetation and buildings as the comparison will tend to treat many of those features as outliers. When using this outlier detection method on a LAS dataset, consider filtering for ground classified points. Alternatively consider using the Classify LAS Noise tool to identify noise points in LAS datasets.
The output points will be attributed with an integer field named REASON whose values identify the outlier identification criteria that resulted in the inclusion of the point measurement.
- 0—Hard limit
- 1—Hard limit and comparison filter
- 2—Comparison filter
To eliminate the outlier points from a terrain dataset, consider using the Delete Terrain Points tool with the outlier points specified in the Area of Interest parameter.
Syntax
arcpy.ddd.LocateOutliers(in_surface, out_feature_class, {apply_hard_limit}, {absolute_z_min}, {absolute_z_max}, {apply_comparison_filter}, {z_tolerance}, {slope_tolerance}, {exceed_tolerance_ratio}, {outlier_cap})
Parameter | Explanation | Data Type |
in_surface | The terrain, TIN, or LAS dataset that will be analyzed. | LAS Dataset Layer; Terrain Layer; TIN Layer |
out_feature_class | The feature class that will be produced by this tool. | Feature Class |
apply_hard_limit (Optional) | Specifies use of absolute z minimum and maximum to find outliers.
| Boolean |
absolute_z_min (Optional) | If hard limits are applied, any point with an elevation below this value will be considered an outlier. The default is 0. | Double |
absolute_z_max (Optional) | If hard limits are applied, any point with an elevation above this value will be considered an outlier. The default is 0. | Double |
apply_comparison_filter (Optional) | The comparison filter consists of three parameters for determining outliers: z_tolerance, slope_tolerance, and exceed_tolerance_ratio.
| Boolean |
z_tolerance (Optional) | Compares z-values of neighboring points if the comparison filter is applied. The default is 0. | Double |
slope_tolerance (Optional) | The threshold of slope variance between consecutive points that will be used to identify outlier points. Slope is expressed as a percentage, with the default being 150. | Double |
exceed_tolerance_ratio (Optional) | Defines the criteria for determining each outlier point as a function of the ratio of points in its natural neighborhood that must exceed the specified comparison filters. For example, the default value of 0.5 means at least half of the points surrounding the query point must exceed the comparison filters for the query point to be considered an outlier. A value of 0.7 means at least 70 percent of the neighbor points must exceed the tolerances. | Double |
outlier_cap (Optional) | The maximum number of outlier points that can be written to the output. Once this value is reached, no further outliers are sought. The default is 2,500. | Long |
Code sample
LocateOutliers example 1 (Python window)
The following sample demonstrates the use of this tool in the Python window.
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)
LocateOutliers example 2 (stand-alone script)
The following sample demonstrates the use of this tool in a stand-alone Python script.
'''**********************************************************************
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)
Environments
Licensing information
- Basic: Requires 3D Analyst
- Standard: Requires 3D Analyst
- Advanced: Requires 3D Analyst