Page Summary
-
The
ee.Terrain.productsfunction calculates slope, aspect, and hillshade from a terrain DEM. -
The input image must contain elevation data in meters, either as a single band or a band named 'elevation'.
-
The output includes 'slope' and 'aspect' bands in degrees, and an unsigned byte 'hillshade' band for visualization.
-
Missing values will appear around the edges of the image due to the 4-connected neighbor calculation.
Expects an image containing either a single band of elevation, measured in meters, or if there's more than one band, one named 'elevation'. Adds output bands named 'slope' and 'aspect' measured in degrees plus an unsigned byte output band named 'hillshade' for visualization. All other bands and metadata are copied from the input image. The local gradient is computed using the 4-connected neighbors of each pixel, so missing values will occur around the edges of an image.
| Usage | Returns |
|---|---|
ee.Terrain.products(input)
|
Image |
| Argument | Type | Details |
|---|---|---|
input
|
Image | An elevation image, in meters. |
Examples
Code Editor (JavaScript)
// Demonstrate ee.Terrain functions with single-image and collection DEMs. // DEMs in Earth Engine are often distributed as single images per asset // (e.g., NASA/NASADEM_HGT/001) or as collections of tiled images that need // to be mosaicked (e.g., COPERNICUS/DEM/GLO30). Terrain analysis functions // compute values based on neighboring pixels, so care must be taken to // select and prepare DEM inputs appropriately. // 1. Single DEM image asset. // Assets like NASADEM are presented as single images covering large areas. // They generally have a single projection and can be used in terrain analysis // with no preprocessing. var nasadem = ee . Image ( 'NASA/NASADEM_HGT/001' ). select ( 'elevation' ); // Calculate slope, aspect, and hillshade simultaneously using products(). var nasademProducts = ee . Terrain . products ( nasadem ); // Visualization parameters. var elevationVis = { min : 0.0 , max : 3000.0 , palette : [ '333399' , '00a2e5' , '55dd77' , 'ffff99' , 'aa926b' , 'aa928d' , 'ffffff' ] }; var slopeVis = { min : 0.0 , max : 60.0 }; var aspectVis = { min : 0.0 , max : 359.99 }; var hillshadeVis = { min : 150.0 , max : 255.0 }; // Display layers. Map . setCenter ( - 121.603 , 47.702 , 9 ); Map . addLayer ( nasadem , elevationVis , 'NASADEM Elevation' , false ); Map . addLayer ( nasademProducts . select ( 'slope' ), slopeVis , 'NASADEM Slope' ); Map . addLayer ( nasademProducts . select ( 'aspect' ), aspectVis , 'NASADEM Aspect' ); Map . addLayer ( nasademProducts . select ( 'hillshade' ), hillshadeVis , 'NASADEM Hillshade' ); // 2. Mosaicked DEM ImageCollection asset. // In contrast to single-image assets like NASADEM, some DEMs like GLO30 are // provided as a collection of images that need to be mosaicked before use. // We use this mosaicked DEM for the terrain calculations below. var glo30collection = ee . ImageCollection ( 'COPERNICUS/DEM/GLO30' ); // When mosaicking a DEM collection that will be used for terrain analysis, // it is best practice to set the mosaic's default projection to the native // projection of the DEM tiles. If you don't, Earth Engine's default // projection for mosaics (EPSG:4326 at 1-degree scale) is used, which is // often too coarse for analysis and can lead to resampling artifacts if // the result is reprojected to a different CRS during computation. // See: // https://developers.google.com/earth-engine/guides/projections#reprojecting var glo30Proj = glo30collection . first (). projection (); var glo30Image = glo30collection . select ( 'DEM' ). mosaic (). setDefaultProjection ( glo30Proj ); // Calculate slope, aspect, and hillshade simultaneously using products(). var glo30Products = ee . Terrain . products ( glo30Image ); // Display layers. Map . addLayer ( glo30Image , elevationVis , 'GLO30 Elevation' , false ); Map . addLayer ( glo30Products . select ( 'slope' ), slopeVis , 'GLO30 Slope' ); Map . addLayer ( glo30Products . select ( 'aspect' ), aspectVis , 'GLO30 Aspect' ); Map . addLayer ( glo30Products . select ( 'hillshade' ), hillshadeVis , 'GLO30 Hillshade' );
import ee import geemap.core as geemap
Colab (Python)
# Demonstrate ee.Terrain functions with single-image and collection DEMs. # DEMs in Earth Engine are often distributed as single images per asset # (e.g., NASA/NASADEM_HGT/001) or as collections of tiled images that need # to be mosaicked (e.g., COPERNICUS/DEM/GLO30). Terrain analysis functions # compute values based on neighboring pixels, so care must be taken to # select and prepare DEM inputs appropriately. # 1. Single DEM image asset. # Assets like NASADEM are presented as single images covering large areas. # They generally have a single projection and can be used in terrain analysis # with no preprocessing. nasadem = ee . Image ( 'NASA/NASADEM_HGT/001' ) . select ( 'elevation' ) # Calculate slope, aspect, and hillshade simultaneously using products(). nasadem_products = ee . Terrain . products ( nasadem ) # Visualization parameters. elevation_vis = { 'min' : 0.0 , 'max' : 3000.0 , 'palette' : [ '333399' , '00a2e5' , '55dd77' , 'ffff99' , 'aa926b' , 'aa928d' , 'ffffff' , ], } slope_vis = { 'min' : 0.0 , 'max' : 60.0 } aspect_vis = { 'min' : 0.0 , 'max' : 359.99 } hillshade_vis = { 'min' : 150.0 , 'max' : 255.0 } # Display layers. m = geemap . Map () m . set_center ( - 121.603 , 47.702 , 9 ) m . add_layer ( nasadem , elevation_vis , 'NASADEM Elevation' , False ) m . add_layer ( nasadem_products . select ( 'slope' ), slope_vis , 'NASADEM Slope' ) m . add_layer ( nasadem_products . select ( 'aspect' ), aspect_vis , 'NASADEM Aspect' ) m . add_layer ( nasadem_products . select ( 'hillshade' ), hillshade_vis , 'NASADEM Hillshade' ) # 2. Mosaicked DEM ImageCollection asset. # In contrast to single-image assets like NASADEM, some DEMs like GLO30 are # provided as a collection of images that need to be mosaicked before use. # We use this mosaicked DEM for the terrain calculations below. glo30_collection = ee . ImageCollection ( 'COPERNICUS/DEM/GLO30' ) # When mosaicking a DEM collection that will be used for terrain analysis, # it is best practice to set the mosaic's default projection to the native # projection of the DEM tiles. If you don't, Earth Engine's default # projection for mosaics (EPSG:4326 at 1-degree scale) is used, which is # often too coarse for analysis and can lead to resampling artifacts if # the result is reprojected to a different CRS during computation. # See: # https://developers.google.com/earth-engine/guides/projections#reprojecting glo30_proj = glo30_collection . first () . projection () glo30_image = ( glo30_collection . select ( 'DEM' ) . mosaic () . setDefaultProjection ( glo30_proj ) ) # Calculate slope, aspect, and hillshade simultaneously using products(). glo30_products = ee . Terrain . products ( glo30_image ) # Display layers. m . add_layer ( glo30_image , elevation_vis , 'GLO30 Elevation' , False ) m . add_layer ( glo30_products . select ( 'slope' ), slope_vis , 'GLO30 Slope' ) m . add_layer ( glo30_products . select ( 'aspect' ), aspect_vis , 'GLO30 Aspect' ) m . add_layer ( glo30_products . select ( 'hillshade' ), hillshade_vis , 'GLO30 Hillshade' ) m

