Google Earth Engine(GEE)——如何正确使用if和for条件判断?

2024-02-02 07:54:18 浏览数 (1)

映射的函数在它可以执行的操作中受到限制。具体来说,它不能修改函数外的变量;它不能打印任何东西;它不能使用 JavaScript 的“if”或“for”语句。但是,您可以使用ee.Algorithms.If()在映射函数中执行条件操作。例如:

上一次博客中写道同样的影像结果应该是118幅,但是此次经过太阳高度的条件判断,最终就只有84幅了。而且可以从波段的数量上就能看出在返回为0的影像中仅有1各波段,就是一个list附加一个properties里面有一个指针也就是这副影像的系统位置名称

ee.Algorithms.If(conditiontrueCasefalseCase)

代码语言:javascript复制
根据条件选择其输入之一,类似于 if-then-else 构造。

Selects one of its inputs based on a condition, similar to an if-then-else construct.

Arguments:

condition (Object, default: null):

代码语言:javascript复制
确定返回哪个结果的条件。如果这不是布尔值,则按照以下规则将其解释为布尔值:

- 等于 0 或 NaN 的数字为假。

- 空字符串、列表和字典是假的。

- 空是假的。

- 其他都是真的:这里就是说非空非0都是真的

The condition that determines which result is returned. If this is not a boolean, it is interpreted as a boolean by the following rules:

- Numbers that are equal to 0 or a NaN are false.

- Empty strings, lists and dictionaries are false.

- Null is false.

- Everything else is true.

trueCase (Object, default: null):

The result to return if the condition is true.

falseCase (Object, default: null):

The result to return if the condition is false.

Returns: Object

代码很简单:

代码语言:javascript复制
// 依旧是进行影像按照行列号进行筛选
var collection = ee.ImageCollection('LANDSAT/LC8_L1T_TOA')
  .filter(ee.Filter.eq('WRS_PATH', 44))
  .filter(ee.Filter.eq('WRS_ROW', 34));

// 如果太阳高度 > 40 度此函数使用条件语句返回正常图像,否则它返回一个零图像。
var conditional = function(image) {
  return ee.Algorithms.If(ee.Number(image.get('SUN_ELEVATION')).gt(40),
                          image,
                          ee.Image(0));
};

// 将函数映射到集合上,转换为 List 并打印结果。
print('Expand this to see the result: ', collection.map(conditional));

0 人点赞