ee.Image.expression

یک عبارت حسابی را روی یک تصویر ارزیابی می‌کند، که احتمالاً شامل تصاویر اضافی است.

باندهای تصویر ورودی اصلی بااستفاده از تابع داخلی b()‎، به‌صورت b(0)‎ یا b('band_name')‎ دردسترس هستند.

متغیرهای موجود در عبارت به‌عنوان پارامترهای تصویر اضافی تفسیر می‌شوند که باید در opt_map ارائه شوند. به باندهای هریک از این تصاویر می‌توان به‌صورت image.band_name یا image[0] دسترسی پیدا کرد.

هر دو b() و image[] اجازه می‌دهند چندین آرگومان برای مشخص کردن چندین باند استفاده شود، مانند b(1, 'name', 3). فراخوانی b() بدون آرگومان، یا استفاده از یک متغیر به‌تنهایی، تمام باندهای تصویر را برمی‌گرداند.

اگر نتیجه عبارت یک باند تکی باشد، می‌توان بااستفاده از عملگر «=» نامی به آن اختصاص داد (مثلاً: x = a + b).

تصویر محاسبه‌شده توسط عبارت ارائه‌شده را برمی‌گرداند.

کاربردبازگشتی‌ها
Image.expression(expression, map)تصویر
متغیر مستقلنوعجزئیات
این: imageتصویرنمونه Image.
expressionرشتهعبارتی که باید ارزیابی شود.
mapDictionary[Image]‎، اختیارینقشه‌ای از تصاویر ورودی که براساس نام دردسترس است.

مثال‌ها

ویرایشگر کد (جاوا اسکریپت)

// 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);

راه‌اندازی Python

برای اطلاعات درباره Python API و استفاده از geemap برای توسعه تعاملی، به صفحه محیط Python مراجعه کنید.

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