我是 GEE 和 Javascript 的新手。我正在尝试执行一个简单的任务:从 2015 年到 2021 年计算并导出 Sentinel 2 的 ndvi,。这是我的代码:
var s2 = ee.ImageCollection("COPERNICUS/S2_SR"),
s2_cloud = ee.ImageCollection("COPERNICUS/S2_CLOUD_PROBABILITY"),
point = /* color: #98ff00 */ee.Geometry.Point([117.34081098192927, 23.95611396961109]);
/**
*
* remove cloud by probability bands
*
* */
function rmCloudByProbability(image, thread) {
var prob = image.select("probability");
return image.updateMask(prob.lte(thread));
}
/**
*
* scale image
*
* */
function scaleImage(image) {
var time_start = image.get("system:time_start");
image = image.divide(10000);
image = image.set("system:time_start", time_start);
return image;
}
function getMergeImages(primary, secondary) {
var join = ee.Join.inner();
var filter = ee.Filter.equals({
leftField: 'system:index',
rightField: 'system:index'
});
var joinCol = join.apply(primary, secondary, filter);
joinCol = joinCol.map(function(image) {
var img1 = ee.Image(image.get("primary"));
var img2 = ee.Image(image.get("secondary"));
return img1.addBands(img2);
});
return ee.ImageCollection(joinCol);
}
function main() {
var startDate = "2017-03-28";
var endDate = "2021-04-08";
Map.centerObject(point, 8);
var s2Imgs1 = s2.filterDate(startDate, endDate)
.filterBounds(point)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 80))
.map(scaleImage);
var s2Imgs2 = s2_cloud.filterDate(startDate, endDate)
.filterBounds(point);
var s2Imgs = getMergeImages(s2Imgs1, s2Imgs2);
s2Imgs = s2Imgs.map(function(image) {
return rmCloudByProbability(image, 50);
});
print("s2Imgs",s2Imgs);
Map.addLayer(s2Imgs.first(), {min:0, max:0.3, bands:["B4", "B3", "B2"]}, "cloud");
}
main(); (The previous code here is correct)
function NDVI_V1(s2Imgs) {
var nir =s2Imgs.select("B8");
var red =s2Imgs.select("B4");
var ndvi = nir.subtract(red).divide(nir.add(red));
return ndvi;
}
print(" ndvi", ndvi);
错误消息显示“NDVI 未在此范围内定义。在,第 58 行,第 34 行”。 另外,我有一个小问题,我应该如何在右侧的任务栏上显示所需的数据?这是我之前说的正确代码。 有人可以向我解释我做错了什么吗?提前致谢! 另外,我有一个小问题,我应该如何在右侧的任务栏上显示所需的数据?