Диаграмма рассеяния между двумя изображениями Google Earth Engine

У меня есть 2 изображения с высоким разрешением в Google Earth Engine. Я хочу построить разброс между этими двумя изображениями. Но я получаю сообщение об ошибке Missing required arguments to function seriesByRegion(): reducer. Я не знаю, как это исправить (или это из-за изображений).

Сначала я импортировал геометрию и свое изображение:

var RZSC = ee.Image("users/chandrakant/Max_RZSC_Layer_Trail_3"),
    geometry = /* color: #d6cbbb */ee.Geometry.Polygon(
        [[[-81.375, -56.125],
          [-34.625, -56.125],
          [-34.625, 12.625],
          [-81.375, 12.625]]]);

Затем я визуализировал изображение

var vizParams = {
  bands: ['b1'],
  min: 0.0,
  max: 1500.0,
  palette: ['blue', 'green', 'red']
};
Map.setCenter(6.746, 46.529, 10);
Map.addLayer(RZSC.clip(geometry), vizParams, 'Rootzone Storage Capacity');
Map.centerObject(RZSC);
print('RZSC Projection, crs, and crs_transform:', RZSC.projection());

Визуализировал мое изображение MODIS

var MODIStc = ee.ImageCollection('MODIS/051/MOD44B')
                  .filter(ee.Filter.date('2000-01-01', '2017-12-01')).mean();
var percentTreeCover = MODIStc.select('Percent_Tree_Cover');
var percentTreeCoverVis = {
  min: 0.0,
  max: 100.0,
  palette: ['bbe029', '0a9501', '074b03'],
};
Map.setCenter(6.746, 46.529, 2);
Map.addLayer(percentTreeCover.clip(geometry), percentTreeCoverVis, 'Percent Tree Cover');
print('MOD44B Projection, crs, and crs_transform:', percentTreeCover.projection());
\\Here I added Water Mask
var waterOcc = ee.Image("JRC/GSW1_0/GlobalSurfaceWater").select('occurrence'),
    jrc_data0 = ee.Image("JRC/GSW1_0/Metadata").select('total_obs').lte(0),
    waterOccFilled = waterOcc.unmask(0).max(jrc_data0),
    waterMask = waterOccFilled.lt(50);

Здесь я перепроецировал изображение (RZSC) на 250 м.

\\Here I tried to increase the resolution from 25km to 250m    
var RZSC_250m = RZSC.resample('bilinear').reproject({
  crs: RZSC.projection().crs(),
  scale: 250
});
Map.addLayer(RZSC_250m.clip(geometry).updateMask(waterMask), vizParams, 'RZSC_250m');
print('RZSC_250m Projection, crs, and crs_transform:', RZSC_250m.projection());

введите описание изображения здесь

Пробовал здесь диаграмму рассеяния

\\Tried to plot scatterplot here (I want just the basic scatter plot between 2 variables)
var chart = ui.Chart.image.seriesByRegion(RZSC, MODIStc, 
                ee.Reducer.mean(),250, 'nd').setChartType('ScatterChart');
print(chart);

Я получаю ошибку: Error generating chart: Collection.map, argument 'collection': Invalid type. Expected: FeatureCollection. Actual: Image<[Percent_Tree_Cover]>. и Collection.map, argument 'collection': Invalid type. Expected: FeatureCollection. Actual: Image<[Percent_Tree_Cover]>.

Дополнительная информация: Кроме того, я не знаю почему, но размеры MODIStc и RZSC_250m разные. Для MODIStc:

bands: List (1 element)
0: "Percent_Tree_Cover", double ∈ [0, 255], EPSG:4326, 48x73 px
id: Percent_Tree_Cover
crs: EPSG:4326
crs_transform: [1,0,0,0,1,0]
data_type: double ∈ [0, 255]
dimensions: [48,73]
origin: [-82,-59]

Для РЗСК_250м:

bands: List (1 element)
0: "b1", float, EPSG:4326, 20818x28371 px
id: b1
crs: EPSG:4326
crs_transform: List (6 elements)
data_type: float
dimensions: [20818,28371]
origin: [-36235,-6107]

Кроме того, когда я пытаюсь использовать reproject в MODIStc, данные выглядят сглаженными и странными (многие детали теряются). введите описание изображения здесь


person Ep1c1aN    schedule 30.06.2019    source источник
comment
Ваша вторая строка снизу var chart = ui.Chart.image.seriesByRegion(RZSC, MODIStc_250m, ee.Reducer.mean(),250, 'nd').setChartType('ScatterChart'); не соответствует формату GEE ui.Chart.image.seriesByRegion(imageCollection, regions, reducer, band, scale, xProperty, seriesProperty)   -  person Kevin    schedule 30.06.2019
comment
@Kevin. Спасибо за ваше предложение, но на этот раз я совершенно не обращаю внимания на формат GEE и тот факт, что существует так много способов (я не уверен, правильный ли мой или нет). Я недавно начал использовать движок Google Earth, примерно 4 дня назад, так что я был бы признателен за немного больше контекста. Мне не удалось найти примеры или литературу, которые могли бы мне помочь.   -  person Ep1c1aN    schedule 30.06.2019
comment
Я попытался улучшить вопрос более подробной информацией. Может быть, это поможет.   -  person Ep1c1aN    schedule 30.06.2019


Ответы (1)


Если я правильно понимаю, вам нужен график рассеяния, где одна ось представляет значение в RZSC, а другая ось представляет значение в MODIStc. Кроме того, каждая точка на диаграмме должна содержать пару значений в одном и том же пикселе.

Для этого вам понадобится ui.Chart.feature.byFeature, а не ui.Chart.image.seriesByRegion, как вы используете.

Чтобы использовать ui.Chart.feature.byFeature, вам нужно будет создать FeatureCollection, который имеет 2 свойства: одно содержит значения всех пикселей в RZSC, а другое - значения всех соответствующих пикселей в MODIStc. Ниже приведен пример кода, чтобы получить это:

var combined_image = RZSC.addBands(MODIStc)
var region = ee.Geometry.Rectangle(-83, -20, -31, 13)
var sample = combined_image.sampleRegions(region, null, 250)
var chart = ui.Chart.feature.byFeature(sample, 'b1', 'Percent_Tree_Cover')
    .setChartType('ScatterChart')
print(chart)

В приведенном выше коде я создал переменную region, которая представляет интересующую область (Южная Америка) на основе вашего образца изображения. Вы можете изменить это на то, что хотите (наверное, весь мир, я думаю).

Кроме того, вам может потребоваться увеличить значение масштаба (в настоящее время 250 в приведенном выше коде) или уменьшить интересующую вас область, если GEE вызывает любую ошибку памяти (например, «Запрос на сбор данных прерван после накопления более 5000 элементов» или «Превышен предел пользовательской памяти. ')

Надеюсь это поможет.

person Kevin    schedule 30.06.2019
comment
Спасибо, Кевин. Ваш код был для меня актуален. Единственная проблема, с которой я столкнулся, заключалась в том, что «запрос коллекции прерван после накопления более 5000 элементов» или «превышен предел пользовательской памяти», как вы и ожидали. Но это ограничение движка Google Earth. Я хотел бы услышать какие-нибудь альтернативы этому (если вы их знаете, сохраняя масштаб 250–1000), так как уменьшение масштаба всей карты ›1000 значительно ухудшит результаты. - person Ep1c1aN; 01.07.2019
comment
@ Ep1c1aN: Чтобы сохранить желаемый масштаб и поддерживать большую область интересов, можно экспортировать результат на свой Диск, а не рисовать на платформе GEE. Например, Export.table.toDrive(sample) экспортирует данные sample в файл csv (то же самое можно сделать и для изображения). Затем вы можете нарисовать диаграмму рассеяния, например, в Excel. GEE не имеет (или имеет намного более высокий) лимит на экспорт. - person Kevin; 01.07.2019