Line Of Sight (3D Analyst)
Summary
This tool uses an input 2D or 3D polyline feature class along with a raster, triangulated irregular network (TIN), or terrain dataset surface to determine visibility between observer and target points. A multipatch feature class can optionally be supplied to participate in the visibility analysis.
Usage
-
The observer is the point from which visibility is determined. The target is the opposite end of the line, to which visibility is determined.
-
Only the endpoints of the input line are used to define observer and target.
If one or more targets are not visible, the Line Of Sight tool produces an optional output point feature class. This contains the location of the first obstruction encountered for each line whose target is not visible.
It produces an output line feature class that contains line and target visibility information.
The following fields will be added to the output feature class containing the line of sight analysis:
- SourceOID: The feature ID of the line of sight from which this output originates.
- VisCode: The visibility along the line. A value of 1 indicates visible and a value of 2 indicates not visible. This field will only exist if the output geometry is a line.
- TarIsVis: The target visibility along the line. A value of 1 indicates visible and a value of 0 indicates not visible. This field will only exist if the output geometry is a line.
- OBSTR_MPID: The OID of the multipatch that obstructs the line of sight. If no multipatch obstructs the line of sight, then the field contains a value of -1 or -9999. If the target is obstructed by the surface the value will be -1. If the target is visible the value will be -9999.
Syntax
Parameter | Explanation | Data Type |
in_surface |
The input raster, TIN, or terrain surface on which calculations are based. | TIN Layer; Raster Layer; Terrain Layer |
in_line_feature_class |
The input polyline feature class along which visibility is calculated. This can be a 2D or 3D feature class. | Feature Layer |
out_los_feature_class |
The output line feature class along which visibility has been determined. Two attribute fields are created. VisCode indicates visibility along the line, 1 being visible and 2 not visible. TarIsVis indicates the target visibility, 0 being not visible and 1 being visible. | Feature Class |
out_obstruction_feature_class (Optional) |
The output point feature class indicating the first obstruction point along the line of sight if the target is not visible. | Feature Class |
use_curvature (Optional) |
Indicates whether the earth's curvature should be taken into consideration for the line of sight analysis. For this option to be enabled, the surface needs to have a defined spatial reference in projected coordinates with defined z-units.
| Boolean |
use_refraction (Optional) |
Indicates whether atmospheric refraction should be taken into consideration when generating a line of sight from a functional surface.
| Boolean |
refraction_factor (Optional) |
Provides a value to be used in the refraction factor. The default refraction factor is 0.13. | Double |
pyramid_level_resolution (Optional) |
The resolution of the terrain dataset pyramid level to use for geoprocessing. The default is 0, full resolution. | Double |
in_features (Optional) |
A feature class of multipatches which may obstruct the line(s) of sight. Default is blank. | Feature Layer |
Code Sample
The following Python Window script demonstrates how to use the Line Of Sight function in immediate mode.
import arcpy from arcpy import env arcpy.CheckOutExtension("3D") env.workspace = "C:/data" arcpy.LineOfSight_3d("tin", "line.shp", "los.shp", "buldings_multipatch.shp", "obstruction.shp")
The following Python script demonstrates how to use the Line Of Sight function in a stand-alone script.
'''********************************************************************* Name: Sight Line Visibility Description: This script demonstrates how to calculate visibility for sight lines against the obstructions presented by terrain elevation & building models in a multipatch. *********************************************************************''' # Import system modules import arcpy import exceptions, sys, traceback from arcpy import env try: arcpy.CheckOutExtension('3D') # Set Local Variables env.workspace = 'C:/data' obs_pts = "Observers.shp" target = "Observation_Targets.shp" sight_lines = "in_memory/sightlines" surface = "sample.gdb/elevation/terrain" buildings = "city_buildings.shp" outLOS = arcpy.CreateUniqueName("Line_of_Sight.shp") obstruction_pts = arcpy.CreateUniqueName("Obstruction_Points.shp") arcpy.AddMessage("Constructing sight lines...") arcpy.ddd.ConstructSightLines(obs_pts, target, sight_lines) arcpy.AddMessage("Calculating line of sight...") arcpy.ddd.LineOfSight(surface, sight_lines, outLOS, obstruction_pts, "CURVATURE", "REFRACTION", 0.35, 0, buildings) arcpy.GetMessages(0) 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)