Понимание tileScale в Earth Engine
Во многих функциях Earth Engine, таких как Image.reduceRegionsили Image.sample, есть аргумент, называемый tileScale. Документация API обычно интерпретирует это как:
Коэффициент масштабирования, используемый для уменьшения размера плитки агрегирования; использование большего размера tileScale (например, 2 или 4) может позволить вычислениям, в которых не хватает памяти по умолчанию.
Хотя это, кажется, хорошо задокументировано, я все еще не понимаю, как tileScale влияет на окончательный результат вычислений.
- Что
tileScaleделать? tileScaleРазделяет ли изображение фрагменты перед вычислением?- Это влияет на масштаб?
Ниже приведен пример кода для работы ( ссылка на код ).
// Getting the image of the region of interest
var roi = ee.Geometry.Point([1.864578244475683, 14.492292970253338]);
var image = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
.filterDate('2019-01-01', '2019-01-31')
.filterBounds(roi)
.select(['B5', 'B4', 'B3'])
.toBands()
.rename(['B5', 'B4', 'B3']);
// Checking it out
print(image);
// Define the visualization parameters.
var vizParams = {
bands: ['B5', 'B4', 'B3'],
min: 0,
max: 0.5,
gamma: [0.95, 1.1, 1]
};
// Center the map and display the image.
Map.centerObject(image, 9);
Map.addLayer(image, vizParams, 'false color composite');
// Computing the band means at 30 meters and tileScale of 1: (Computation succeeded)
var control = image.reduceRegion({
reducer:ee.Reducer.mean(),
scale : 30,
tileScale: 1,
maxPixels:1e13
});
print(control, 'first scenario');
// Computing the band means at 5 meters and tileScale of 1: (Computation succeeded)
var scenario2 = image.reduceRegion({
reducer:ee.Reducer.mean(),
scale: 5,
tileScale: 1,
maxPixels: 1e13
});
print(scenario2, 'second scenario');
// Computing the band means at 5 meters and tileScale of 16: (Computation Error: Computation timed out.)
var scenario3 = image.reduceRegion({
reducer:ee.Reducer.mean(),
scale: 5,
tileScale: 16,
maxPixels: 1e13
});
print(scenario3, 'third scenario');
Ответы
Что делает tileScale? Разделяет ли tileScale изображение перед вычислением?
Да.
Всякий раз, когда вы выполняете такую операцию, как reduceRegionвычисление одного или нескольких уменьшенных значений из изображения, пиксели изображения, которые поступают в редуктор, вычисляются в плитках (точно так же, как плитки, используемые для просмотра на карте), редуктор применяется к этим плиткам пикселей для получения промежуточных результатов, а затем эти промежуточные результаты объединяются вместе.
Установка более высокого значения tileScaleуменьшает размер этих плиток. Это значит, что:
- Каждая плитка использует меньше памяти (поэтому меньше вероятность того, что вычислениям не хватит памяти).
- Есть больше плиток, для установки которых требуется больше времени (поэтому вычисления займут больше времени).
Это влияет на масштаб?
Если вы имеете в виду разрешение / размер изображения в пикселях: нет. Если вычисление завершается успешно, результат всегда должен быть одинаковым независимо от tileScale(за исключением небольших различий из-за порядка операций с плавающей запятой).