Skip To Content

Topo to Raster

Available with Spatial Analyst license.

Available with 3D Analyst license.


Interpolates a hydrologically correct raster surface from point, line, and polygon data.

Learn more about how Topo to Raster works


  • The best results will be obtained if all input data is stored in the same planar coordinate system and has the same z-units. Unprojected data (latitude-longitude) can be used; however, the results may not be as accurate, particularly at high latitudes.

  • If more than one input point falls within an output cell,Topo to Raster will use the average value for the interpolation (only the first 100 points that fall within a cell will be considered and the rest will be ignored). If too many points are encountered by the algorithm, an error may occur, indicating the point dataset has too many points. The maximum number of points that can be used is NRows * NCols, where NRows is the number of rows in the output raster and NCols is the number of columns.

  • When the input feature data type is Contour, the algorithm first generates a generalized morphology of the surface based on the curvature of the contours. The algorithm then implements the contours as a source of elevation information. Contours are best suited for large-scale data where the contours and corners are reliable indicators of streams and ridges. At smaller scales it can be just as effective, and less expensive, to digitize corner points of contours and use them as an input point feature class.

  • Representing braided streams or using arcs to represent two sides of a stream may not produce reliable results. Stream data always takes priority over point or contour data; therefore, elevation data points that conflict with descent down each stream are ignored. Stream data is a powerful way of adding topographic information to the interpolation, further ensuring the quality of the output DEM.

  • Typical values for the Tolerance 1 and Tolerance 2 settings are:

    • For point data at 1:100,000 scale, use 5.0 and 200.0.
    • For less dense point data up to 1:500,000 scale, use 10.0 and 400.0.
    • For contour data with contour spacing of 10, use 5.0 and 100.0.

    Tolerance 2 should be at least 6 times greater than Tolerance 1.

  • To make experimentation with the inputs and parameters easier, use the Topo to Raster dialog box to create an output parameter file, which can be modified in any text editor and used as input to the Topo to Raster by File tool.

  • This tool is a memory-intensive application and it is therefore not possible to create large output rasters. When large output is required, use the Margin parameter to produce smaller output rasters. For more details on how to do this, the creating and mosaicking rasters section of the How Topo to Raster works help.

  • See Analysis environments and Spatial Analyst for additional details on the geoprocessing environments that apply to this tool.


TopoToRaster (in_topo_features, {cell_size}, {extent}, {Margin}, {minimum_z_value}, {maximum_z_value}, {enforce}, {data_type}, {maximum_iterations}, {roughness_penalty}, {discrete_error_factor}, {vertical_standard_error}, {tolerance_1}, {tolerance_2}, {out_stream_features}, {out_sink_features}, {out_diagnostic_file}, {out_parameter_file}, {profile_penalty}, {out_residual_feature}, {out_stream_cliff_error_feature}, {out_contour_error_feature})
ParameterExplanationData Type

The Topo class specifies the input features containing the z-values to be interpolated into a surface raster.

There are nine types of data accepted inputs to the Topo class: TopoPointElevation, TopoContour, TopoStream, TopoSink, TopoBoundary, TopoLake, TopoCliff, TopoExclusion, and TopoCoast.

  • TopoPointElevation ([[inFeatures,{field}],...])

    A point feature class representing surface elevations.

    The field stores the elevations of the points.

  • TopoContour ([[inFeatures,{field}],...])

    A line feature class that represents elevation contours.

    The field stores the elevations of the contour lines.

  • TopoStream ([inFeatures,...])

    A line feature class of stream locations. All arcs must be oriented to point downstream. The feature class should only contain single arc streams.

  • TopoSink ([[inFeatures,{field}],...])

    A point feature class that represents known topographic depressions. Topo to Raster will not attempt to remove from the analysis any points explicitly identified as sinks.

    The field used should be one that stores the elevation of the legitimate sink. If NONE is selected, only the location of the sink is used.

  • TopoBoundary ([inFeatures,...])

    A boundary is a feature class containing a single polygon that represents the outer boundary of the output raster. Cells in the output raster outside this boundary will be NoData. This option can be used for clipping out water areas along coastlines before making the final output raster.

  • TopoLake ([inFeatures,...])

    A polygon feature class that specifies the location of lakes. All output raster cells within a lake will be assigned to the minimum elevation value of all cells along the shoreline.

  • TopoCliff ([inFeatures,...])

    A line feature class of the cliffs. The cliff line features must be oriented so that the left-hand side of the line is on the low side of the cliff and the right-hand side is the high side of the cliff.

  • TopoExclusion ([inFeatures,...])

    A polygon feature class of the areas in which the input data should be ignored. These polygons permit removal of elevation data from the interpolation process. This is typically used to remove elevation data associated with dam walls and bridges. This enables interpolation of the underlying valley with connected drainage structure.

  • TopoCoast ([inFeatures,...])

    A polygon feature class containing the outline of a coastal area. Cells in the final output raster that lie outside these polygons are set to a value that is less than the user-specified minimum height limit.

The PointElevation, Contour, and Sink types of feature input can have a field specified that contains the z-values. There is no Field option for Boundary, Lake, Cliff, Coast, Exclusion, or Stream input types.


The cell size at which the output raster will be created.

This will be the value in the environment if it is explicitly set; otherwise, it is the shorter of the width or the height of the extent of the input point features, in the input spatial reference, divided by 250.

Analysis Cell Size

The Extent class determines the extent for the output raster dataset.

Interpolation will occur out to the x and y limits, and cells outside that extent will be NoData. For best interpolation results along the edges of the output raster, the x and y limits should be smaller than the extent of the input data by at least 10 cells on each side.

The form of the Extent class is:

  • Extent (XMin, YMin, XMax, YMax)


    • XMin—The default is the smallest x coordinate of all inputs.
    • YMin—The default is the smallest y coordinate of all inputs.
    • XMax—The default is the largest x coordinate of all inputs.
    • YMax—The default is the largest y coordinate of all inputs.

The default extent is the largest of all extents of the input feature data.


Distance in cells to interpolate beyond the specified output extent and boundary.

The value must be greater than or equal to 0 (zero). The default value is 20.

If the Extent and TopoBoundary feature dataset are the same as the limit of the input data (the default), values interpolated along the edge of the DEM will not match well with adjacent DEM data. This is because they have been interpolated using one-half as much data as the points inside the raster, which are surrounded on all sides by input data. The Margin option allows input data beyond these limits to be used in the interpolation.


The minimum z-value to be used in the interpolation.

The default is 20 percent below the smallest of all the input values.


The maximum z-value to be used in the interpolation.

The default is 20 percent above the largest of all input values.


The type of drainage enforcement to apply.

The drainage enforcement option can be set to attempt to remove all sinks or depressions so a hydrologically correct DEM can be created. If sink points have been explicitly identified in the input feature data, these depressions will not be filled.

  • ENFORCE The algorithm will attempt to remove all sinks it encounters, whether they are real or spurious. This is the default.
  • NO_ENFORCE No sinks will be filled.
  • ENFORCE_WITH_SINK Points identified as sinks in Input feature data represent known topographic depressions and will not be altered. Any sink not identified in input feature data is considered spurious, and the algorithm will attempt to fill it.Having more than 8,000 spurious sinks causes the tool to fail.

The dominant elevation data type of the input feature data.

  • CONTOUR The dominant type of input data will be elevation contours. This is the default.
  • SPOT The dominant type of input will be point.

Specifying the relevant selection optimizes the search method used during the generation of streams and ridges.


The maximum number of interpolation iterations.

The number of iterations must be greater than zero. A default of 20 is normally adequate for both contour and line data.

A value of 30 will clear fewer sinks. Rarely, higher values (45–50) may be useful to clear more sinks or to set more ridges and streams. Iteration ceases for each grid resolution when the maximum number of iterations has been reached.


The integrated squared second derivative as a measure of roughness.

The roughness penalty must be zero or greater. If the primary input data type is Contour, the default is zero. If the primary data type is Spot, the default is 0.5. Larger values are not normally recommended.


The discrete error factor is used to adjust the amount of smoothing when converting the input data to a raster.

The value must be greater than zero. The normal range of adjustment is 0.25 to 4, and the default is 1. A smaller value results in less data smoothing; a larger value causes greater smoothing.


The amount of random error in the z-values of the input data.

The value must be zero or greater. The default is zero.

The vertical standard error may be set to a small positive value if the data has significant random (non-systematic) vertical errors with uniform variance. In this case, set the vertical standard error to the standard deviation of these errors. For most elevation datasets, the vertical error should be set to zero, but it may be set to a small positive value to stabilize convergence when rasterizing point data with stream line data.


This tolerance reflects the accuracy and density of the elevation points in relation to surface drainage.

For point datasets, set the tolerance to the standard error of the data heights. For contour datasets, use one-half the average contour interval.

The value must be zero or greater. The default is 2.5 if the data type is Contour and zero if the data type is Spot.


This tolerance prevents drainage clearance through unrealistically high barriers.

The value must be greater than zero. The default is 100 if the data type is Contour and 200 if the data type is Spot.


The output line feature class of stream polyline features and ridge line features.

The line features are created at the beginning of the interpolation process. It provides the general morphology of the surface for interpolation. It can be used to verify correct drainage and morphology by comparing known stream and ridge data.

The polyline features are coded as follows:

1. Input stream line not over cliff.

2. Input stream line over cliff (waterfall).

3. Drainage enforcement clearing a spurious sink.

4. Stream line determined from contour corner.

5. Ridge line determined from contour corner.

6. Code not used.

7. Data stream line side conditions.

8. Code not used.

9. Line indicating large elevation data clearance.

Feature Class

The output point feature class of the remaining sink point features.

These are the sinks that were not specified in the sink input feature data and were not cleared during drainage enforcement. Adjusting the values of the tolerances, tolerance_1 and tolerance_2, can reduce the number of remaining sinks. Remaining sinks often indicate errors in the input data that the drainage enforcement algorithm could not resolve. This can be an efficient way of detecting subtle elevation errors.

Feature Class

The output diagnostic file listing all inputs and parameters used and the number of sinks cleared at each resolution and iteration.


The output parameter file listing all inputs and parameters used, which can be used with Topo to Raster by File to run the interpolation again.


The profile curvature roughness penalty is a locally adaptive penalty that can be used to partly replace total curvature.

It can yield good results with high-quality contour data but can lead to instability in convergence with poor data. Set to 0.0 for no profile curvature (the default), set to 0.5 for moderate profile curvature, and set to 0.8 for maximum profile curvature. Values larger than 0.8 are not recommended and should not be used.


The output point feature class of all the large elevation residuals as scaled by the local discretisation error.

All the scaled residuals larger than 10 should be inspected for possible errors in input elevation and stream data. Large-scaled residuals indicate conflicts between input elevation data and streamline data. These may also be associated with poor automatic drainage enforcements. These conflicts can be remedied by providing additional streamline and/or point elevation data after first checking and correcting errors in existing input data. Large unscaled residuals usually indicate input elevation errors.

Feature Class

The output point feature class of locations where possible stream and cliff errors occur.

The locations where the streams have closed loops, distributaries, and streams over cliffs can be identified from the point feature class. Cliffs with neighboring cells that are inconsistent with the high and low sides of the cliff are also indicated. This can be a good indicator of cliffs with incorrect direction.

Points are coded as follows:

1. True circuit in data streamline network.

2. Circuit in stream network as encoded on the out raster.

3. Circuit in stream network via connecting lakes.

4. Distributaries point.

5. Stream over a cliff (waterfall).

6. Points indicating multiple stream outflows from lakes.

7. Code not used.

8. Points beside cliffs with heights inconsistent with cliff direction.

9. Code not used.

10. Circular distributary removed.

11. Distributary with no inflowing stream.

12. Rasterized distributary in output cell different to where the data stream line distributary occurs.

13. Error processing side conditions—an indicator of very complex streamline data.

Feature Class

The output point feature class of possible errors pertaining to the input contour data.

Contours with bias in height exceeding five times the standard deviation of the contour values as represented on the output raster are reported to this feature class. Contours that join other contours with a different elevation are flagged in this feature class by the code 1; this is a sure sign of a contour label error.

Feature Class

Return Value

NameExplanationData Type

The output interpolated surface raster.

It is always a floating-point raster.


Code sample

TopoToRaster example 1 (Python window)

This example creates a hydrologically correct TIFF surface raster from point, line, and polygon data.

import arcpy
from arcpy import env  
from import *
env.workspace = "C:/sapyexamples/data"
outTTR = TopoToRaster([TopoPointElevation([['spots', 'spot_meter']]), 
                       TopoContour([['contours', 'spot_meter']]),
                       TopoCliff(['cliff'])], 60, 
                       "#", "#", "#", "#", "NO_ENFORCE")"C:/sapyexamples/output/ttrout.tif")
TopoToRaster example 2 (stand-alone script)

This example creates a hydrologically correct Grid surface raster from point, line, and polygon data.

# Name:
# Description: Interpolates a hydrologically correct surface 
#    from point, line, and polygon data.
# Requirements: Spatial Analyst Extension

# Import system modules
import arcpy
from arcpy import env
from import *

# Set environment settings
env.workspace = "C:/sapyexamples/data"

# Set local variables
inPointElevations = TopoPointElevation([['spots.shp', 'spot_meter'], 
                                        ['spots2.shp', 'elev']])
inBoundary = TopoBoundary(['boundary.shp'])
inContours = TopoContour([['contours.shp', 'spot_meter']])
inLake = TopoLake(['lakes.shp'])
inSinks = TopoSink([['sink1.shp', 'elevation'], ['sink2.shp', 'none']])
inStream = TopoStream(['streams.shp'])

inFeatures = ([inPointElevations, inContours, inLake, inBoundary, inSinks])

# Execute TopoToRaster
outTTR = TopoToRaster(inFeatures)

# Save the output"C:/sapyexamples/output/ttrout03")

Licensing information

  • ArcGIS Desktop Basic: Requires Spatial Analyst or 3D Analyst
  • ArcGIS Desktop Standard: Requires Spatial Analyst or 3D Analyst
  • ArcGIS Desktop Advanced: Requires Spatial Analyst or 3D Analyst

Related topics