从Google Earth Engine的图片集中获取一系列特定参数

问题描述

我有一个类似的图片集:

ImageCollection : {
  features : [
    0 : {
      type: Image,id: MOdis/006/MOD11A1/2019_01_01,properties : {
        LST_Day_1km   : 12345,LST_Night_1km : 11223,system:index  : "2019-01-01",system:asset_size: 764884189,system:footprint: LinearRing,system:time_end: 1546387200000,system:time_start: 1546300800000
      },1 : { ... }
    2 : { ... }
    ...
  ],...
]

如何从此集合中获取具有特定属性的对象数组?喜欢:

[
  {
    LST_Day_1km   : 12345,system:index  : "2019-01-01"
  },{
    LST_Day_1km   : null,system:index  : "2019-01-02"
  }
  ...
];

我尝试了ImageCollection.aggregate_array(property),但一次只允许一个参数。

问题在于“ LST_Day_1km”的长度与“ system:index”的长度不同,因为“ LST_Day_1km”包含空值,因此在单独获取数组后很难合并它们。

谢谢!

解决方法

每当您想从Earth Engine中的集合中提取数据时,通常一种直接有效的策略是首先安排数据以 single 属性的形式出现在Google的功能/图像上该收藏集,使用map

var wanted = ['LST_Day_1km','LST_Night_1km','system:index'];
var augmented = imageCollection.map(function (image) {
  return image.set('dict',image.toDictionary(wanted));
});

然后,正如您已经熟悉的那样,只需使用aggregate_array来提取该属性的值:

var list = augmented.aggregate_array('dict');
print(list);

可运行的完整示例:

var imageCollection = ee.ImageCollection('MODIS/006/MOD11A1')
    .filterDate('2019-01-01','2019-01-07')
    .map(function (image) {
      // Fake values to match the question
      return image.set('LST_Day_1km',1).set('LST_Night_1km',2)
    });
print(imageCollection);

// Add a single property whose value is a dictionary containing
// all the properties we want.
var wanted = ['LST_Day_1km',image.toDictionary(wanted));
});
print(augmented.first());

// Extract that property.
var list = augmented.aggregate_array('dict');
print(list);

https://code.earthengine.google.com/ffe444339d484823108e23241db04629