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รูปภาพอินสแตนซ์รูปภาพ
expressionสตริงนิพจน์ที่จะประเมิน
mapDictionary<Image> (ไม่บังคับ)แผนที่ของรูปภาพอินพุตที่พร้อมใช้งานตามชื่อ

ตัวอย่าง

โปรแกรมแก้ไขโค้ด (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);

การตั้งค่า 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