GEE计算Landsat系列影像植被覆盖度

先进行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
});
}

  • 1
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Google Earth Engine (GEE) 中计算Landsat影像的岩石裸露度,可以按照以下步骤进行: 1. 在GEE中导入Landsat影像数据集。你可以使用`ee.ImageCollection`来加载Landsat的数据集,指定日期范围、地理区域等参数。 2. 对Landsat影像进行预处理。这包括云去除、辐射校正等。你可以使用GEE提供的内置函数进行预处理,例如`ee.Algorithms.Landsat.simpleCloudScore()`进行云去除。 3. 计算岩石裸露度指标。一种常用的指标是Normalized Difference Bareness Index (NDBI),可以通过计算可见光波段和近红外波段之间的差异来估算裸露地表的比例。你可以使用`normalizedDifference()`函数计算不同波段之间的差异。 4. 根据NDBI值进行分类。根据不同的阈值,将NDBI值分为裸露和非裸露两类。可以使用`ee.Image.where()`函数将满足条件的像元设置为一个特定的值。 5. 计算岩石裸露度百分比。根据分类结果,统计裸露地表像元的数量,并与总像元数量进行比较,计算出岩石裸露度的百分比。 下面是一个简单的示例代码,演示如何在GEE计算Landsat影像的岩石裸露度: ```javascript // 选择Landsat 8的影像 var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1') .filterDate('2019-01-01', '2019-12-31') .filterBounds(geometry); // 预处理,进行云去除 var preprocessed = collection.map(function(image) { var cloudScore = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud'); var mask = cloudScore.lt(50); return image.updateMask(mask); }); // 计算NDBI指数 var ndvi = preprocessed.map(function(image) { var nir = image.select('B5'); var swir = image.select('B6'); var ndbi = nir.subtract(swir).divide(nir.add(swir)).rename('NDBI'); return image.addBands(ndbi); }); // 根据NDBI进行分类 var classified = ndbi.map(function(image) { var bareness = image.select('NDBI').lt(0.1); // 设置合适的阈值 return image.updateMask(bareness); }); // 计算裸露度百分比 var barenessPercentage = classified.count().divide(preprocessed.count()).multiply(100); // 输出结果 print('岩石裸露度百分比:', barenessPercentage); ``` 请注意,上述代码仅为示例,具体的裸露度计算方法和阈值需要根据实际情况进行调整。另外,你需要根据你的区域和时间范围修改代码中的日期、地理区域等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值