AI-generated Key Takeaways
-
The
expressionmethod evaluates an arithmetic expression on an image, potentially including additional images. -
Image bands in the expression can be accessed using
b(band_index)orb('band_name')for the primary image. -
Additional images used in the expression are defined in an optional map and their bands can be accessed using variable names like
image.band_nameorimage[0]. -
Expressions can utilize arithmetic, relational, and logical operators, the ternary operator, and a subset of JavaScript Math functions.
-
If the expression results in a single band, you can assign it a name using the
=operator.
The bands of the primary input image are available using the built-in function b(), as b(0) or b('band_name').
Variables in the expression are interpreted as additional image parameters which must be supplied in opt_map. The bands of each such image can be accessed like image.band_name or image[0].
Both b() and image[] allow multiple arguments, to specify multiple bands, such as b(1, 'name', 3). Calling b() with no arguments, or using a variable by itself, returns all bands of the image.
If the result of an expression is a single band, it can be assigned a name using the '=' operator (e.g.: x = a + b).
Returns the image computed by the provided expression.
| Usage | Returns |
|---|---|
Image.
expression
(expression, map
)
|
Image |
| Argument | Type | Details |
|---|---|---|
|
this:
image
|
Image | The Image instance. |
expression
|
String | The expression to evaluate. |
map
|
Dictionary<Image>, optional | A map of input images available by name. |
Examples
Code Editor (JavaScript)
// The following expressions calculate the normalized difference vegetation // index (NDVI): (NIR - Red) / (NIR + Red). // NIR is Landsat 8 L2 band 'SR_B5', the 4th band index. // Red is Landsat 8 L2 band 'SR_B4', the 3rd band index. // A Landsat 8 L2 surface reflectance image. var img = ee . Image ( 'LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508' ); // Visualization parameters for NDVI. var ndviVis = { min : 0 , max : 0.5 }; // Expression using image band indices. var bandIndexExp = '(b(4) - b(3)) / (b(4) + b(3))' ; var bandIndexImg = img . expression ( bandIndexExp ). rename ( 'NDVI' ); Map . setCenter ( - 122.14 , 37.38 , 11 ); Map . addLayer ( bandIndexImg , ndviVis , 'NDVI 1' ); // Expression using image band names. var bandNameExp = '(b("SR_B5") - b("SR_B4")) / (b("SR_B5") + b("SR_B4"))' ; var bandNameImg = img . expression ( bandNameExp ). rename ( 'NDVI' ); Map . addLayer ( bandNameImg , ndviVis , 'NDVI 2' ); // Expression using named variables. var namedVarsExp = '(NIR - Red) / (NIR + Red)' ; var namedVarsImg = ee . Image (). expression ({ expression : namedVarsExp , map : { NIR : img . select ( 'SR_B5' ), Red : img . select ( 'SR_B4' ) } }). rename ( 'NDVI' ); Map . addLayer ( namedVarsImg , ndviVis , 'NDVI 3' ); // Expression using named variables with image band access by dot notation. var namedVarsDotExp = '(ls8.SR_B5 - ls8.SR_B4) / (ls8.SR_B5 + ls8.SR_B4)' ; var namedVarsDotImg = ee . Image (). expression ({ expression : namedVarsDotExp , map : { ls8 : img } }). rename ( 'NDVI' ); Map . addLayer ( namedVarsDotImg , ndviVis , 'NDVI 4' ); // Expressions can use arithmetic operators (+ - * / % **), relational // operators (== != < > <= >=), logical operators (&& || ! ^), the ternary // operator (condition ? ifTrue : ifFalse), and a subset of JavaScript Math // functions. Math functions are called by name directly, they are not accessed // from the Math object (e.g., sqrt() instead of Math.sqrt()). var jsMathExp = 'c = sqrt(pow(a, 2) + pow(b, 2))' ; var jsMathImg = ee . Image (). expression ({ expression : jsMathExp , map : { a : ee . Image ( 5 ), b : img . select ( 'SR_B2' ) } }); Map . addLayer ( jsMathImg , { min : 5000 , max : 20000 }, 'Hypotenuse' , false );
import ee import geemap.core as geemap
Colab (Python)
# The following expressions calculate the normalized difference vegetation # index (NDVI): (NIR - Red) / (NIR + Red). # NIR is Landsat 8 L2 band 'SR_B5', the 4th band index. # Red is Landsat 8 L2 band 'SR_B4', the 3rd band index. # A Landsat 8 L2 surface reflectance image. img = ee . Image ( 'LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508' ) # Visualization parameters for NDVI. ndvi_vis = { 'min' : 0 , 'max' : 0.5 } # Expression using image band indices. band_index_exp = '(b(4) - b(3)) / (b(4) + b(3))' band_index_img = img . expression ( band_index_exp ) . rename ( 'NDVI' ) m = geemap . Map () m . set_center ( - 122.14 , 37.38 , 11 ) m . add_layer ( band_index_img , ndvi_vis , 'NDVI 1' ) # Expression using image band names. band_name_exp = '(b("SR_B5") - b("SR_B4")) / (b("SR_B5") + b("SR_B4"))' band_name_img = img . expression ( band_name_exp ) . rename ( 'NDVI' ) m . add_layer ( band_name_img , ndvi_vis , 'NDVI 2' ) # Expression using named variables. named_vars_exp = '(NIR - Red) / (NIR + Red)' named_vars_img = ( ee . Image () . expression ( expression = named_vars_exp , opt_map = { 'NIR' : img . select ( 'SR_B5' ), 'Red' : img . select ( 'SR_B4' )}, ) . rename ( 'NDVI' ) ) m . add_layer ( named_vars_img , ndvi_vis , 'NDVI 3' ) # Expression using named variables with image band access by dot notation. named_vars_dot_exp = '(ls8.SR_B5 - ls8.SR_B4) / (ls8.SR_B5 + ls8.SR_B4)' named_vars_dot_img = ( ee . Image () . expression ( expression = named_vars_dot_exp , opt_map = { 'ls8' : img }) . rename ( 'NDVI' ) ) m . add_layer ( named_vars_dot_img , ndvi_vis , 'NDVI 4' ) # Expressions can use arithmetic operators (+ - * / % **), relational # operators (== != < > <= >=), logical operators (&& || ! ^), the ternary # operator (condition ? ifTrue : ifFalse), and a subset of JavaScript Math # functions. Math functions are called by name directly, they are not accessed # from the Math object (e.g., sqrt() instead of Math.sqrt()). js_math_exp = 'c = sqrt(pow(a, 2) + pow(b, 2))' js_math_img = ee . Image () . expression ( expression = js_math_exp , opt_map = { 'a' : ee . Image ( 5 ), 'b' : img . select ( 'SR_B2' )} ) m . add_layer ( js_math_img , { 'min' : 5000 , 'max' : 20000 }, 'Hypotenuse' , False ) m

