如何将多个站点(点几何)组合在一起作为要素集合,以在所有站点上执行NDVI变化计算?

时间:2019-11-28 02:13:47

标签: javascript google-earth-engine landsat

我是堆栈溢出和javascript的新手,所以提前致歉。

总体目标:使用Landsat 8图像采集来计算8个站点上NDVI随时间的变化(年际和年内)。与其将每个站点分开进行计算,不如将它们组合在一起,然后一次对所有站点进行NDVI计算(但要分别获取每个站点的结果)。

初始目标单个网站的过滤器。因此,在执行NDVI计算之前,我需要首先过滤并减少landat 8图像集合(以去除云朵,获取正确的日期等),包括使用.filterBounds()来按地点进行空间过滤,如代码中所示下面。当我运行代码时,地图窗口中仅列出了最后一个站点(站点5D)中的一个图像,并且控制台中没有错误消息。

//import the image collection
var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_RT');

//define a list of geometry points with co-ordinates as the 8 distinct sites
var siteList = [
    ee.Feature(/* color: #166f12 */ee.Geometry.Point (135.78877, -15.146215), {name: 'site1A'}), 
    ee.Feature(/* color: #1f921a */ee.Geometry.Point (135.836993, -15.171145), {name: 'site1B'}),
    ee.Feature(/* color: #1c73d5 */ee.Geometry.Point (136.434148, -15.647369), {name: 'site2A'}),
    ee.Feature(/* color: #144882 */ee.Geometry.Point (136.441971, -15.650919), {name: 'site2B'}), 
    ee.Feature(/* color: #de2626 */ee.Geometry.Point (140.853576, -17.422561), {name: 'site4A'}), 
    ee.Feature(/* color: #911919 */ee.Geometry.Point (140.89625, -17.340024), {name: 'site4B'}), 
    ee.Feature(/* color: #23cf7b */ee.Geometry.Point (141.665424, -15.027324), {name: 'site5A'}),
    ee.Feature(/* color: #228c58 */ee.Geometry.Point (141.660919, -14.996538), {name: 'site5D'})
    ];

// Create a FeatureCollection from the list and print it.
var sites = ee.FeatureCollection(siteList);
print(sites);

//Define the image
var image = ee.Image(l8
  .filterDate("2014-07-01", "2016-09-30")
  .filterBounds(sites)
  .sort("CLOUD_COVER")
  .first());
print("Landsat 8:", image);

var vis = {min: 0, max: 14000, bands:['B5', 'B4', 'B3']};
Map.addLayer(image, vis,'Sites test');

问题:如脚本所示,并按照GEE教程和其他SO答案,我已将站点定义为点几何,将其放入列表中,然后定义了{{1} }作为网站列表。但是显然有些不正确。 如何更改脚本以使其正常工作?

我考虑了一种可能的解决方法,即通过ee.FeatureCollection()WRS_PATH过滤图像集合以获取距离站点最近的图像。然后将“ roi's”定义为多边形的几何形状,并在多边形内进行NDVI计算(我想将WRS_ROW图像转换为多边形。

希望这是足够的信息。

1 个答案:

答案 0 :(得分:0)

由于只使用var x = 1; return x; /*OR*/ console.log("Hello World"); 功能选择了一张图像,因此您只能看到一张图像。

您需要在这里做很多事情,但是这里有一些球门柱:

  1. 使用first和自定义函数为图像集中的每个图像创建NDVI复合图像。
  2. 在图像集中将单个日期的合成物拼接起来(这有点棘手,您可能必须定义并迭代特定的图像日期)。
  3. 使用例如按日期从合成物中创建图像mapiterate。 (您必须以某种方式将日期存储在图像名称中,以便您知道每个乐队在最终产品中指的日期)。
  4. 在要素集合和您创建的多波段图像上使用addBands,以获取每个图像波段的每个点的值。