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
});
}
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 |