映射函数以在Google Earth引擎的图像集合中重命名波段

时间:2018-09-24 18:38:01

标签: image-processing google-earth-engine landsat

我具有可视化不同日期图像的功能。但是,我需要同时使用landat 7和8,因为我想开始的日期早于2013年。问题是landat 7和8对带的排序不同,因此以相同方式可视化图像将需要不同的代码。为了解决这个问题,我试图重命名landsat 7图像集中的红色,绿色,蓝色和NIR波段以匹配landsat8。这样,我可以编写一个通用代码,该代码将同时适用于landat 7和8的图像。下面是我编写的代码(假设landsat 7已被导入并称为“ landsat7”,并且还导入了包围感兴趣区域的几何图形“ bounds”)。

// Function to rename landsat 7 bands to match landsat 8 bands
var adjustBands = function(landsat7){
   var adjust = ee.ImageCollection(landsat7)
   .filterDate('2010-01-01', '2010-05-01')
   .filterBounds(bounds).first();
   return adjust.select(['B4', 'B3', 'B2', 'B1'],['B5', 'B4', 'B3','B2']);
    }

print('adjust', adjustBands(landsat7));

//apply function to entire image collection
var l7a = landsat7.map(adjustBands);

但是,当我运行代码时,我得到一个错误:map(ID = LE07_001004_20000610)中的错误:Image.select:参数'input'是必需的。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您只需在图像集合中调用.select()函数,第一个参数是要选择的波段列表,第二个参数是要重新命名波段的列表。

var adjustBands = landsat7.select(['B4', 'B3', 'B2', 'B1'],['B5', 'B4', 'B3','B2'])

无需在图像集合上映射函数来重命名带,因为该方法会产生不必要的开销。

答案 1 :(得分:0)

看起来您正在将一个函数映射到一个集合上,但是在函数内部却在同一集合中读取。确保在将函数映射到集合时,函数本身仅将单个图像作为其参数并返回单个图像。如果要合并Landsat集合,请按照以下方法处理乐队重命名:

Sub Test()

    Sheet1.Range("A1:O10000").Copy
    Workbooks.Add

    ActiveSheet.Paste Destination:=Range("A1")
    With ActiveSheet.Range("A1:O10000")
        .FormatConditions.Add Type:=xlExpression, Formula1:="=A1<>"""""
        .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With .FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent3
            .TintAndShade = -0.249946592608417
        End With
    End With

End Sub

然后考虑不同的波段命名系统,对LC8图像进行相同的操作:

function renameBandsETM(image) {
    var bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'pixel_qa'];
    var new_bands = ['B', 'G', 'R', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa'];
    return image.select(bands).rename(new_bands);
}
var etm = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
  .map(renameBandsETM)

然后您可以合并集合:

function renameBandsOLI(image) {
    var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'pixel_qa'];
    var new_bands = ['B', 'G', 'R', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa'];
    return image.select(bands).rename(new_bands);
}
var oli = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
  .map(renameBandsOLI);