先进行NDVI计算,可计算年最大值合成,年平均值合成,年中位数合成的NDVI,后利用像元二分模型计算植被覆盖度。
var ct = ee.FeatureCollection(" "),//自行添加矢量边界
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA"),
var l5 = ee.ImageCollection("LANDSAT/LT05/C01/T1_TOA")
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI');//landsat8改成b5、b4
return image.addBands(ndvi);
};
// 建立函数还是选择BQA波段
var maskL8 = function(image) {
var qa = image.select('BQA');
//检查云层位是否关闭,设置让它回归到1,变成0
// See https://www.usgs.gov/land-resources/nli/landsat/landsat-collection-1-level-1-quality-assessment-band
var mask = qa.bitwiseAnd(1 << 4).eq(0);
return image.updateMask(mask);
}
//计算植被覆盖度
function calFVC(BestVI,region,scale){
var num = BestVI.reduceRegion({
reducer:ee.Reducer.percentile([5,95]),
geometry:region,
scale:scale,
maxPixels:1e13
});
print(num)
var min = ee.Number(num.get("bestNDVI_p5"));
var max = ee.Number(num.get("bestNDVI_p95"));
//print(top_min);
//print(top_max);
//quantile and combine
var greaterPart = BestVI.gt(max);
var lessPart = BestVI.lt(min);
var middlePart =ee.Image(1).subtract(greaterPart).subtract(lessPart);
//calculate FVC
var tempf1=BestVI.subtract(min).divide(max.subtract(min));
var FVC=ee.Image(1).multiply(greaterPart).add(ee.Image(0).multiply(lessPart))
.add(tempf1.multiply(middlePart))
return FVC.rename('FVC');
}
var visualization = {
min: 0.0,
max: 0.3,
bands: ['B4', 'B3', 'B2'],
};
//循环计算多年植被覆盖度
for ( var i=2011;i<2012;i++)
{
var lc = l5
.filterDate(i+'-12-01', (i+1)+'-02-28')
//.filter(ee.Filter.calendarRange(i,i+1,'year'))
//.filter(ee.Filter.calendarRange(12,2,'month'))
.filterBounds(ct)
.filter(ee.Filter.lte('CLOUD_COVER',80))
.map(maskL8)
print (lc);
//将筛选出来的影像执行NDVI计算并添加该结果至原影像
var withNDVI = lc.map(addNDVI);
//利用qualityMosaic()、mean()、median()可以满足多种需求
var medianmosica = withNDVI.mean();
var greenest=medianmosica.clip(ct);
//对筛选出来的像素,执行NDVI计算(由于筛选出来的是包含所有波段)
//所以可以直接输出全波段影像而不仅仅是NDVI
print (greenest);
var bestndvi = greenest.select('NDVI').rename('bestNDVI');
//或者重新计算一次
//添加生成的最优NDVI到图层窗口
Map.addLayer(bestndvi,{palette: ['black', 'yellow', 'green']},'bestndvi'+i)
var mask_water_NDVI=bestndvi.updateMask(bestndvi.gt(0))//mask water
var FVC=calFVC(mask_water_NDVI,gz,30)
print(FVC)
var chart=ui.Chart.image.histogram({
image:bestndvi,
region:ct,
scale:250,
})
Export.image.toDrive({
image: FVC,
description:"fvc_fall"+i,//名称记得修改
scale: 30,
region: ct.geometry(),
maxPixels: 1e13
});
}