在 Google Earth Engine 中对 ImageCollection 的图像进行排名

问题描述 投票:0回答:1

我正在 Google Earth Engine (GEE) 中编写代码,从 NASA/GPM_L3/IMERG_MONTHLY_V06 获取 2000 年至 2021 年间的每月降水量。然后,我构建一个由 12 张图像组成的图像集合,其中包含每个月的最高观测值对于每个像素。

我想做的是创建一个新的图像集合,其中包含每个图像的值与其他图像的值相比的排名索引。

例如,如果图像集合给出以下结果: 一月:0.25, 二月:0.23 三月:0.45, ... 十二月:0.1

获取包含值的新图像集合: 一月:2, 二月:3, 三月: 1, ... 12 月:12 日

到目前为止我所做的是这个,但我的排名是堆叠的:

var startDate = '2000-06-01';
var endDate = '2021-09-01';

var im_col = 'NASA/GPM_L3/IMERG_MONTHLY_V06';
var band = 'precipitation';

var dataset = ee.ImageCollection(im_col)
                .filterDate(startDate, endDate)
                .select(band)
                .map(function(image) {
                  return image.set('system:time_start', image.get('system:time_start'));
                });

var startYear = ee.Date(startDate).get('year');
var endYear = ee.Date(endDate).get('year');
var totalYears = endYear.subtract(startYear);

var addAttributes = function(image) {
  var year = ee.Date(image.get('system:time_start')).get('year');
  return image.set({
    'year': year,
    'n': totalYears
  });
};

var datasetWithAttributes = dataset.map(addAttributes);
var yearRange = ee.List.sequence(startYear, endYear);


var monthlyMaxCollection = ee.Dictionary({});

for (var month = 1; month <= 12; month++) {
  var maxImage = dataset
    .filter(ee.Filter.calendarRange(month, month, 'month'))
    .max();
  
  monthlyMaxCollection = monthlyMaxCollection.set(ee.Number(month).format(), maxImage);
}

var monthlyMaxList = monthlyMaxCollection.values();

var monthlyMaxListCol = ee.ImageCollection.fromImages(monthlyMaxList);

print(monthlyMaxListCol);

有人知道吗?

javascript ranking operation libgee
1个回答
0
投票

这有效:

var arrayImage = monthlyMaxListCol.toArray();
var sortedArray = arrayImage.arraySort();
var numImages = monthlyMaxListCol.size();
var nthLowestCollection = ee.ImageCollection(ee.List.sequence(0, numImages.subtract(1)).map(function(n) {
  var intN = ee.Number(n).toInt();
  var nthLowest = sortedArray.arraySlice(0, intN, intN.add(1)).arrayProject([0]).arrayFlatten([['prec']]);
  return nthLowest;
}));
© www.soinside.com 2019 - 2024. All rights reserved.