Google Earth Engine - 在 Landsat 图像集合上应用使用元数据的函数

问题描述

我对 Google Earth Engine 比较陌生,目前正在尝试计算 Landsat 图像集合的大气顶部反射率,但我似乎没有取得任何进展。 到目前为止,我已经尝试在计算 EVI 的文档中应用一个示例,并且它起作用了,但是由于 TOA 反射需要元数据,它无法使用相同的方法......我已经尝试了所有我能想到的方法,从使用与示例相同的方法到尝试 image.expression() 甚至尝试在单个图像上检查它是否有效,但似乎没有任何效果。 非常感谢,这是我的代码

var PT = ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017").filter(ee.Filter.eq("country_na","Portugal"));
var collection = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA").filterDate("2018-01-01","2018-01-31").filterBounds(PT);
var imageCollection = collection.map(function(img){
        return img.toUint16();
      });
var raw = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_202033_20180111");

////Example function from documentation (works fine)
var evi2 = function(image){
    return image.addBands(image.expression(
      '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))',{
      'NIR': image.select('B5'),'RED': image.select('B4'),'BLUE': image.select('B2')
}))};
var evi_Landsat=collection.map(evi2);
print("EVI for LANDSAT",evi_Landsat);

////My function to compute Top of the Atmosphere reflectance (doesn't work)
var TOA = function(image) {
  return image.addBands(image.expression(
    "RadM * B10 + RadA",{
    "RadM":image.get("RADIANCE_MULT_BAND_10"),"B10":image.select("B10"),"RadA":image.get("RADIANCE_ADD_BAND_10")}));
};
//var TOA_Landsat = collection.map(TOA);
//print("TOA for LANDSAT",TOA_Landsat);

///Same funcion,tried to apply to single image
//var raw_2=raw.addBands(raw.expression(
//    "RadM * B10 + RadA",{
//    "RadM":raw.get("RADIANCE_MULT_BAND_10"),//    "B10":raw.select("B10"),//    "RadA":raw.get("RADIANCE_ADD_BAND_10")}));
//print("Take 1: TOA on raw image",raw_2);

//And with different Syntax
//var raw_3=raw.addBands((RadM).multiply(Band10).add(RadA));   
//print("Take 2: TOA on raw image",raw_3);

//And just to check if the values were correct
var RadM=raw.get("RADIANCE_MULT_BAND_10");
var RadA=raw.get("RADIANCE_ADD_BAND_10");
var Band10=raw.select("B10");
print("Initials",RadM,RadA,Band10);

////Vizualization parameters
var vizTrueLANDSAT={
  bands:["B4","B3","B2"],min: 0,max: 0.5,gamma: [0.95,1.1,1]
};
Map.addLayer(collection,vizTrueLANDSAT,"Raw images",false);
Map.addLayer(evi_Landsat);
//Map.addLayer(TOA_Landsat);
Map.centerObject(PT,6);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)