使用javascript计算哨兵2的NDVI

时间:2021-04-11 07:13:25

标签: javascript sentinel gee

我是 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 行”。 另外,我有一个小问题,我应该如何在右侧的任务栏上显示所需的数据?这是我之前说的正确代码。 有人可以向我解释我做错了什么吗?提前致谢! 另外,我有一个小问题,我应该如何在右侧的任务栏上显示所需的数据?

0 个答案:

没有答案