Line Of Sight (3D Analyst)

License Level:BasicStandardAdvanced


Determines the visibility of sight lines over a surface defined by a multipatch, raster, TIN, terrain, or LAS dataset.

Learn more about how Line Of Sight works



LineOfSight_3d (in_surface, in_line_feature_class, out_los_feature_class, {out_obstruction_feature_class}, {use_curvature}, {use_refraction}, {refraction_factor}, {pyramid_level_resolution}, {in_features})
ParameterExplanationData Type

The raster, TIN, terrain, or LAS dataset that defines the surface used in determining visibility.

Raster Layer; Terrain Layer; TIN Layer

The line features whose first vertex defines the observation point and last vertex identifies the target location. Height of the observation and target locations are obtained from the z-values of 3D features and interpolated from the surface for 2D features. 2D lines also have a default offset of 1 added to their elevation to raise the points above the surface.

If the feature has an OffsetA field, its value will be added to the height of the observation point. If the OffsetB field is present, its value will be added to the height of the target position.

Feature Layer

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

An optional point feature class identifying the location of the first obstruction on the observer's sight line to its target.

Feature Class

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.

  • CURVATUREThe earth's curvature will be taken into consideration.
  • NO_CURVATUREThe earth's curvature will not be taken into consideration. This is the default.

Indicates whether atmospheric refraction should be taken into consideration when generating a line of sight from a functional surface.

  • REFRACTIONAtmospheric refraction will be taken into consideration.
  • NO_REFRACTIONAtmospheric refraction will not be taken into consideration. This is the default.

Provides a value to be used in the refraction factor. The default refraction factor is 0.13.


The resolution of the terrain dataset pyramid level to use for geoprocessing. The default is 0, or full resolution.


An optional multipatch feature class that may define additional obstructing elements, such as buildings.

Feature Layer

Code Sample

LineOfSight example 1 (Python window)

The following sample demonstrates the use of this tool in the Python window:

import arcpy
from arcpy import env

env.workspace = "C:/data"
arcpy.LineOfSight_3d("tin", "line.shp", "los.shp", "buldings_multipatch.shp", 
LineOfSight example 2 (stand-alone script)

The following sample demonstrates the use of this tool in a stand-alone Python 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

    # 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)

except arcpy.ExecuteError:
    print arcpy.GetMessages()
    # 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


Related Topics

Licensing Information

ArcGIS for Desktop Basic: Requires 3D Analyst
ArcGIS for Desktop Standard: Requires 3D Analyst
ArcGIS for Desktop Advanced: Requires 3D Analyst