Scatter Plot между 2 изображениями Google Earth Engine - PullRequest
0 голосов
/ 30 июня 2019

У меня есть 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());

enter image description here

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

\\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]

Для RZSC_250m:

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, данные выглядят сглаженными и странными (много деталей потеряно).enter image description here

1 Ответ

1 голос
/ 30 июня 2019

Если я правильно понимаю, вам нужен точечный график, где одна ось представляет значение в 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 элементов» или «Превышен лимит памяти пользователя»)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...