javascript - 在 Google Earth Engine 上按间隔重新分类 NDVI 栅格

标签 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');

但结果图像只有 2 个类 -1 和 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

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

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

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

关于javascript - 在 Google Earth Engine 上按间隔重新分类 NDVI 栅格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060903/

相关文章:

python - Google Earth Engine Python API,将 ee.list 转换为 Python 列表

java - 是否可以在 jsp 中用 Java 编写 javascript

javascript - 尝试批量下载时如何修复 Google Earth Engine 中的 "Invalid GeoJSON geometry"错误?

javascript - image.sampleRegions 不是一个函数(谷歌地球引擎的监督分类)

image-processing - 映射一个函数以在谷歌地球引擎中的图像集合中重命名波段

javascript - 如何解决过滤数据表时出现错误 "oTable.draw is not a function"?

JavaScript 闭包参数

javascript - 如何使用 getStream 更新对象?

javascript - 使用边界条件检查二维数组中的附近点

javascript - 使用 Google Earth Engine 将每日数据减少到每月