Понимание того, как Earth Engine обрабатывает масштаб, имеет решающее значение для интерпретации научных результатов, полученных с помощью Earth Engine. Здесь масштаб означает разрешение в пикселях. В отличие от других платформ ГИС и обработки изображений, масштаб анализа определяется на основе выходных данных, а не входных данных. В частности, когда вы делаете запрос на результаты, изображение для отображения или статистику, например, вы указываете масштаб, в котором данные вводятся для анализа. Эта концепция проиллюстрирована на рисунке 1.
Пирамиды изображений
Ресурсы изображений в Earth Engine существуют в нескольких масштабах в виде пирамид изображений . Политика построения пирамид (представленная пунктирными линиями на рисунке 1) определяет, как каждый пиксель на данном уровне пирамиды вычисляется из агрегирования блока пикселей 2x2 на следующем более низком уровне. Для изображений с непрерывными значениями значения пикселей верхних уровней пирамиды представляют собой среднее значение пикселей на следующем более низком уровне. Для изображений с дискретными значениями значения пикселей верхних уровней пирамиды представляют собой выборку (обычно верхний левый пиксель) пикселей на следующем более низком уровне.
Самый нижний уровень пирамиды изображений представляет данные изображения в собственном разрешении, когда они попадают в Earth Engine. Во время приема данные агрегируются (в соответствии с политикой построения пирамиды) для создания более высоких уровней пирамиды. Данные объединяются до тех пор, пока все изображение не уместится в плитку размером 256x256 пикселей. Когда вы используете изображение в своем коде, Earth Engine выбирает уровень пирамиды с ближайшим масштабом, меньшим или равным масштабу, указанному в вашем анализе, и выполняет повторную выборку (по умолчанию используя ближайшего соседа) по мере необходимости.
Масштаб анализа
Масштаб анализа в Earth Engine определяется на основе «вытягивания». Масштаб, в котором запрашиваются входные данные для вычислений, определяется на основе выходных данных. Например, если вы добавляете изображение в редактор кода или элемент карты Geemap, уровень масштабирования карты определяет масштаб, в котором входные данные запрашиваются из пирамиды изображений. Для других вычислений вы указываете scale
в качестве аргумента. Например, используя NIR-диапазон изображения Landsat с собственным разрешением 30 метров:
Редактор кода (JavaScript)
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select('B4'); var printAtScale = function(scale) { print('Pixel value at '+scale+' meters scale', image.reduceRegion({ reducer: ee.Reducer.first(), geometry: image.geometry().centroid(), // The scale determines the pyramid level from which to pull the input scale: scale }).get('B4')); }; printAtScale(10); // 0.10394100844860077 printAtScale(30); // 0.10394100844860077 printAtScale(50); // 0.09130698442459106 printAtScale(70); // 0.1150854229927063 printAtScale(200); // 0.102478988468647 printAtScale(500); // 0.09072770178318024
import ee import geemap.core as geemap
Колаб (Питон)
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select('B4') def print_at_scale(scale): display( f'Pixel value at {scale} meters scale', image.reduceRegion( reducer=ee.Reducer.first(), geometry=image.geometry().centroid(), # The scale determines the pyramid level from which to pull the input scale=scale, ).get('B4'), ) print_at_scale(10) # 0.10394100844860077 print_at_scale(30) # 0.10394100844860077 print_at_scale(50) # 0.09130698442459106 print_at_scale(70) # 0.1150854229927063 print_at_scale(200) # 0.102478988468647 print_at_scale(500) # 0.09072770178318024
Обратите внимание, что в этом примере значение пикселя в постоянном месте (центроиде изображения) меняется в зависимости от масштаба. Это связано с тем, что для разных масштабов выбираются разные уровни пирамиды. Для аналогичных масштабов повторная выборка ближайшего соседа приводит к тому, что возвращается то же значение пикселя. Важным моментом является то, что при изменении масштаба запрашиваются разные входные изображения.
Когда вы визуализируете изображение, добавляя его на карту, Earth Engine определяет масштаб по уровню масштабирования. Рассмотрим следующий простой пример, в котором просто отображается изображение Landsat:
Редактор кода (JavaScript)
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); Map.centerObject(image, 17); Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.35}, 'image');
import ee import geemap.core as geemap
Колаб (Питон)
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') m = geemap.Map() m.center_object(image, 17) m.add_layer(image, {'bands': ['B4', 'B3', 'B2'], 'max': 0.35}, 'image') m
Карта начинает увеличиваться настолько, что пиксели исходного разрешения становятся отчетливо видны. Достаточно сильное уменьшение масштаба не приведет к отображению тех же пикселей, а вместо этого отобразит более высокие уровни пирамиды изображения. Также стоит отметить, что редактор кода и карты Geemap используют проекцию Меркатора карт (EPSG:3857) , поэтому перед отображением также необходимо перепроецировать соответствующий уровень пирамиды изображений. Узнайте больше о том, как Earth Engine обрабатывает проекции, из документа проекций .