在Google Earht Engine上定期重新分类NDVI栅格

时间:2019-07-16 15:37:10

标签: javascript google-earth-engine

位置:

var roi = /* color: #d63000 */ee.Geometry.Point([-71.97203347683796, -13.529827050320447]);

收藏:

var collection = ee.ImageCollection('COPERNICUS/S2') 
  .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 10)) 
  .filterDate('2018-01-1' ,'2018-12-31')
  .filterBounds(roi)

计算NDVI

function addNDVI(image) {
  var a = image.normalizedDifference(['B8', 'B4']);
  return image.addBands(a);
}
var ndvi2 = collection.map(addNDVI)
var ndvi2 = ndvi2.qualityMosaic('nd');

现在我想在内部[-1-0.2],[0.2-0.4],[0.4-0.6],[0.6-0.8],[0.8-1]中重新分类NDVI栅格,我尝试使用此代码

var ndvireclass = ndvi2.select("nd").divide(10).ceil();
Map.addLayer(ndvireclass, {bands:'nd', min: 0, max: 1, gamma: 1.5}, 'NDVI reclass');

但是结果图像只有两个分类-1和1

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点,我更喜欢使用决策树分类器。从您的问题看来,您想要的范围是 小于0.2、02-0.4、0.4-0.6、0.6-0.8(可能是有问题的缺失)并且大于0.8。 为此,我们需要构建一个决策树,使用它来创建分类器,然后将其应用于图像。

var DTstring = ['1) root 9999 9999 9999',
'2) nd<=0.2 9999 9999 1 *',
'3) nd>0.2 9999 9999 9999',
'6) nd<=0.4 9999 9999 2 *',
'7) nd>0.4 9999 9999 9999',
'14) nd<=0.6 9999 9999 3 *',
'15) nd>0.6 9999 9999 9999',
'30) nd<=0.8 9999 9999 4 *',
'31) nd>0.8 9999 9999 5 *'].join("\n");

var classifier = ee.Classifier.decisionTree(DTstring);
var reclassifiedImage = ndvi2.select('nd').classify(classifier);

您可以看到有效的示例here

OR 您还可以使用逻辑运算符测试所需范围内的值,然后乘以类编号以获取每个类的像素。 例如第二班

var nd = ndvi2.select('nd');
var c2 = nd.gt(0.2).and(nd.lte(0.4)).multiply(2);

如果对c1,c3,c4,c5做类似的操作,则应该具有仅包含值为0和类编号的像素的栅格。如果添加所有这些图层,您应该会得到想要的