【问题标题】:How to modify a rasterlayers band in Google Earth Engine?如何修改 Google Earth Engine 中的栅格层波段?
【发布时间】:2023-02-25 10:38:15
【问题描述】:
我想根据已知的缩放因子缩放卫星图像的波段。
在 Google Earth Engine 中,我可以执行以下行:
image.select(nir).multiply(0.0000275).add(-0.2);
在这些函数的文档中,如果乘法和加法修改原始图像,我不清楚。
但是,如果我尝试以下行,则会出现右值错误,因为该属性是只读的:
image.select(nir) = image.select(nir).multiply(0.0000275).add(-0.2);
因为我可以将第一个语句分配给一个全新的图像,但那样我就会错过所有其他波段。
那么第一条语句的实际效果是什么?
【问题讨论】:
标签:
javascript
google-earth-engine
【解决方案1】:
在这些函数的文档中,如果乘法和加法修改原始图像,我不清楚。
在地球引擎中,几乎没有什么你可以做修改现有的东西。极少数例外是执行诸如创建或删除资产之类的功能。
那么第一条语句的实际效果是什么?
Earth Engine 客户端根据您的指示构造一个表达式,然后丢弃它,因为您没有对它做任何事情。
image.select(nir) = image.select(nir).multiply(0.0000275).add(-0.2);
达到这个效果的方法是
image = image.addBands({
srcImg: image.select("nir").multiply(0.0000275).add(-0.2)),
overwrite: true,
});
请注意,这仍然不是修改图像。当 Earth Engine 执行此操作时,它会创建一个新的具有不同波段的图像;原始图像不变。在您的 JavaScript(客户端)中,效果是将 image 中尚未执行的 EE 表达式替换为其中包含更多算术的表达式。
“overwrite”也不意味着就地修改;它只是意味着“让输出图像中的带命名为nir,即使输入图像中已经有一个名为nir的带”,而默认行为是新图像具有两个带,新的名为nir_1。