【GEE笔记】按日合成计算和筛选下载遥感数据——哨兵2号(Sentinel-2)

  • 主要功能:

  1. 数据每日合成
  2. 递归函数返回每个有数据日期的影像,组成数据集;筛选出有效像元大于70%的影像
  3. 值域映射
  4. 批量下载数据,整个数据集
  • 代码实现 

 1、传入矢量geometry,时间范围,进行数据每日合成,返回每个有数据日期的影像数据集

//定义样本点
var geometry =
    ee.Geometry.Polygon(
        [[[121.65456803004417, 40.9702377336333],
        [121.65456803004417, 40.787490369349094],
        [122.00338394801292, 40.787490369349094],
        [122.00338394801292, 40.9702377336333]]], null, false);

//时间范围
var start = ee.Date('2020-6-01');
var finish = ee.Date('2020-7-1');

// 载入 Sentinel-2 TOA reflectance data.
var dataset = ee.ImageCollection('COPERNICUS/S2')
    .filterDate(start, finish)
    .filterBounds(geometry)
    .map(maskS2clouds)
    .select(["B8", "B4"])

print("dataset", dataset)

var diff = finish.difference(start, 'day')

// Make a list of all dates
var range = ee.List.sequence(0, diff.subtract(1)).map(function (day) {
    return start.advance(day, 'day')
})
// print("range",range)

//递归函数返回每个有数据日期的影像,组成数据集
var newcol = ee.ImageCollection(ee.List(range.iterate(day_mosaics, ee.List([]))))

function maskS2clouds(image) {
    var qa = image.select('QA60');

    // Bits 10 and 11 are clouds and cirrus, respectively.
    var cloudBitMask = 1 << 10;
    var cirrusBitMask = 1 << 11;

    // Both flags should be set to zero, indicating clear conditions.
    var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
        .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
    image = image.updateMask(mask);
    return image.clip(geometry)//.set('yun',ee.Number(xiangyuan).divide(zongxiangyuan));

}



// Funtion for iteraton over the range of dates
function day_mosaics(date, newlist) {
    // Cast
    date = ee.Date(date)
    newlist = ee.List(newlist)

    // Filter collection between date and the next day
    var filtered = dataset.filterDate(date, date.advance(1, 'day'))
    var image = ee.Image(filtered.mean()).set({ "date": date.format("YYYYMMdd") })

    // Add the mosaic to a list only if the collection has images
    return ee.List(ee.Algorithms.If(filtered.size(), newlist.add(image), newlist))
}

2、计算geometry总面积、每幅影像有值区域面积,相比的值即为有效像元比例,写入每幅影像的元数据,后续基于元数据筛选出有效像元大于70%的影像。其中利用gee的map函数对数据集进行遍历执行相同操作,此处顺便计算ndvi并将ndvi值线性映射到0~10000之间(转换数据类型为整形,减少数据存储量)

//计算有效像元面积
var zongxiangyuan = ee.Image.pixelArea().reduceRegion({
    reducer: ee.Reducer.sum(),
    geometry: geometry,
    scale: 10,
    maxPixels: 10e15,
}).get("area");
newcol = newcol.map(addvalue)
    //筛选出大于70%的影像
    .filter(ee.Filter.gt('yun', 0.7))
    //计算NDVI
    .map(addndvi)

// print(newcol)
//值域映射
newcol = newcol.map(guyi)

//function
function guyi(img) {
    var date = img.get("date")
    var yun = img.get("yun")
    return img.multiply(10000).add(10000).toInt16().set({ "yun": yun, "date": date });
}
function addndvi(img) {
    // Use the normalizedDifference(A, B) to compute (A - B) / (A + B)
    var ndvi = img.normalizedDifference(['B8', 'B4']).rename("NDVI");
    var date = img.get("date")
    var yun = img.get("yun")
    // ndvi=ndvi.mask(ndvi.gt(1)).mask(ndvi.lt(-1))
    // var yun=img.get("yun")
    return ndvi.set({ "yun": yun, "date": date });
}
function addvalue(img) {
    var mask = img.select(0).mask()
    var xiangyuan = ee.Image.pixelArea().updateMask(mask).reduceRegion({
        reducer: ee.Reducer.sum(),
        geometry: geometry,
        scale: 10,
        maxPixels: 10e15,
    }).get("area");
    return img.set({ "yun": ee.Number(xiangyuan).divide(zongxiangyuan) })
}

3、将数据集导出,文件名为日期 

var imagenum = newcol.size().getInfo()
print("数据个数:" + imagenum, newcol)

//下载数据集
newcol = newcol.toList(newcol.size())
for (var i = 0; i < imagenum; i++) {
    var image = ee.Image(newcol.get(i))
    var date = ee.String(image.get("date")).getInfo()
    // var yun=ee.Number(image.get("yun")).multiply(100).toInt8().getInfo()
    // Map.addLayer(image, visualization, date);
    Export.image.toDrive({
        image: image,
        description: date,
        folder: 'S2NDVI202202119',
        region: geometry,
        skipEmptyTiles: true,
        scale: 10,
        maxPixels: 1e13
    });

}
  • 结果展示 【GEE笔记】按日合成计算和筛选下载遥感数据——哨兵2号(Sentinel-2)_第1张图片

  • 数据介绍 

【GEE笔记】按日合成计算和筛选下载遥感数据——哨兵2号(Sentinel-2)_第2张图片

Sentinel-2 Bands
Name Scale Pixel Size Wavelength Description
B1 0.0001 60 meters 443.9nm (S2A) / 442.3nm (S2B)

Aerosols

B2 0.0001 10 meters 496.6nm (S2A) / 492.1nm (S2B)

Blue

B3 0.0001 10 meters 560nm (S2A) / 559nm (S2B)

Green

B4 0.0001 10 meters 664.5nm (S2A) / 665nm (S2B)

Red

B5 0.0001 20 meters 703.9nm (S2A) / 703.8nm (S2B)

Red Edge 1

B6 0.0001 20 meters 740.2nm (S2A) / 739.1nm (S2B)

Red Edge 2

B7 0.0001 20 meters 782.5nm (S2A) / 779.7nm (S2B)

Red Edge 3

B8 0.0001 10 meters 835.1nm (S2A) / 833nm (S2B)

NIR

B8A 0.0001 20 meters 864.8nm (S2A) / 864nm (S2B)

Red Edge 4

B9 0.0001 60 meters 945nm (S2A) / 943.2nm (S2B)

Water vapor

B10 0.0001 60 meters 1373.5nm (S2A) / 1376.9nm (S2B)

Cirrus

B11 0.0001 20 meters 1613.7nm (S2A) / 1610.4nm (S2B)

SWIR 1

B12 0.0001 20 meters 2202.4nm (S2A) / 2185.7nm (S2B)

SWIR 2

QA10 10 meters

Always empty

QA20 20 meters

Always empty

QA60 60 meters

Cloud mask

你可能感兴趣的:(GEE,javascript)