Визуализация изображений

Существует несколько методов ee.Image, которые создают визуальные представления данных изображений в формате RGB, например: visualize(), getThumbURL(), getMap(), getMapId() (используется для отображения карт Colab Folium) и Map.addLayer() (используется для отображения карт в редакторе кода, недоступно для Python). По умолчанию эти методы назначают первые три полосы красному, зеленому и синему цветам соответственно. Растяжение по умолчанию зависит от типа данных в полосах (например, числа с плавающей запятой растягиваются в диапазоне [0, 1], а 16-битные данные – до полного диапазона возможных значений), что может быть как подходящим, так и неподходящим. Чтобы добиться нужного эффекта, можно задать параметры визуализации:

Параметры визуализации изображений
Параметр Описание Тип
bands Разделенный запятыми список из трех названий диапазонов, которые будут сопоставлены с RGB. list
мин. Значения, которые нужно сопоставить с 0 число или список из трех чисел, по одному для каждого диапазона
max Значения, которые нужно сопоставить с 255 число или список из трех чисел, по одному для каждого диапазона
gain Значения, на которые умножается значение каждого пикселя. число или список из трех чисел, по одному для каждого диапазона
bias Значения, которые нужно добавить к каждому DN число или список из трех чисел, по одному для каждого диапазона
gamma Коэффициенты гамма-коррекции число или список из трех чисел, по одному для каждого диапазона
palette Список строк цвета в стиле CSS (только для одноканальных изображений) список шестнадцатеричных строк, разделенных запятыми
opacity Непрозрачность слоя (0.0 – полностью прозрачный, 1.0 – полностью непрозрачный). число
format JPG или PNG. string

Композитные RGB-изображения

Ниже показано, как использовать параметры для стилизации изображения Landsat 8 в виде композитного изображения в ложных цветах:

Редактор кода (JavaScript)

// Load an image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');

// 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.setCenter(-122.1899, 37.5010, 10); // San Francisco Bay
Map.addLayer(image, vizParams, 'false color composite');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load an image.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')

# Define the visualization parameters.
image_viz_params = {
    'bands': ['B5', 'B4', 'B3'],
    'min': 0,
    'max': 0.5,
    'gamma': [0.95, 1.1, 1],
}

# Define a map centered on San Francisco Bay.
map_l8 = geemap.Map(center=[37.5010, -122.1899], zoom=10)

# Add the image layer to the map and display it.
map_l8.add_layer(image, image_viz_params, 'false color composite')
display(map_l8)

В этом примере полоса 'B5' назначена красному цвету, 'B4' – зеленому, а 'B3' – синему.

false_color_sf
Композитное изображение в условных цветах, полученное со спутника Landsat 8. На нем показана область залива Сан-Франциско (Калифорния, США).

Цветовая гамма

Чтобы показать одну полосу изображения в цвете, задайте параметр palette с цветовой шкалой, представленной списком строк цвета в стиле CSS. Подробнее об этом рассказывается в справочной статье. В следующем примере показано, как использовать цвета от голубого ('00FFFF') до синего ('0000FF') для визуализации изображения нормализованного разностного водного индекса (NDWI):

Редактор кода (JavaScript)

// Load an image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');

// Create an NDWI image, define visualization parameters and display.
var ndwi = image.normalizedDifference(['B3', 'B5']);
var ndwiViz = {min: 0.5, max: 1, palette: ['00FFFF', '0000FF']};
Map.addLayer(ndwi, ndwiViz, 'NDWI', false);

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load an image.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')

# Create an NDWI image, define visualization parameters and display.
ndwi = image.normalizedDifference(['B3', 'B5'])
ndwi_viz = {'min': 0.5, 'max': 1, 'palette': ['00FFFF', '0000FF']}

# Define a map centered on San Francisco Bay.
map_ndwi = geemap.Map(center=[37.5010, -122.1899], zoom=10)

# Add the image layer to the map and display it.
map_ndwi.add_layer(ndwi, ndwi_viz, 'NDWI')
display(map_ndwi)

Обратите внимание, что в этом примере параметры min и max указывают диапазон значений пикселей, к которым должна применяться палитра. Промежуточные значения растягиваются линейно.

Обратите внимание, что в примере для редактора кода параметру show присвоено значение false. В результате слой будет невидимым при добавлении на карту. Его можно снова включить в Менеджере слоев в правом верхнем углу карты редактора кода.

ndwi_sf
Landsat 8 NDWI, район залива Сан-Франциско, США. Голубым цветом обозначены низкие значения, синим – высокие.

Сохранение цветовых палитр по умолчанию

Чтобы сохранить палитры цветов на изображении классификации и не применять их каждый раз, можно задать два свойства строкового изображения со специальными именами для каждой полосы классификации.

Например, если у вашего изображения есть полоса 'landcover' с тремя значениями (0, 1 и 2), соответствующими классам "вода", "лес" и "другое", вы можете задать следующие свойства, чтобы при визуализации по умолчанию для каждого класса показывался определенный цвет (на значения, используемые в анализе, это не повлияет):

  • landcover_class_values="0,1,2"
  • landcover_class_palette="0000FF,00FF00,AABBCD"

См. страницу "Объекты", чтобы узнать, как задавать метаданные объектов.

Маски

С помощью image.updateMask() можно задать прозрачность отдельных пикселей на основе того, где пиксели в изображении маски не равны нулю. Пиксели, равные нулю в маске, исключаются из вычислений, а непрозрачность устанавливается равной 0 для отображения. В следующем примере используется пороговое значение NDWI (информацию о пороговых значениях см. в разделе Операции отношения), чтобы обновить маску на ранее созданном слое NDWI:

Редактор кода (JavaScript)

// Mask the non-watery parts of the image, where NDWI < 0.4.
var ndwiMasked = ndwi.updateMask(ndwi.gte(0.4));
Map.addLayer(ndwiMasked, ndwiViz, 'NDWI masked');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Mask the non-watery parts of the image, where NDWI < 0.4.
ndwi_masked = ndwi.updateMask(ndwi.gte(0.4))

# Define a map centered on San Francisco Bay.
map_ndwi_masked = geemap.Map(center=[37.5010, -122.1899], zoom=10)

# Add the image layer to the map and display it.
map_ndwi_masked.add_layer(ndwi_masked, ndwi_viz, 'NDWI masked')
display(map_ndwi_masked)

Изображения для визуализации

Используйте метод image.visualize(), чтобы преобразовать изображение в 8-битное RGB-изображение для отображения или экспорта. Например, чтобы преобразовать композитное изображение в ложных цветах и NDWI в трехканальные изображения, используйте следующий код:

Редактор кода (JavaScript)

// Create visualization layers.
var imageRGB = image.visualize({bands: ['B5', 'B4', 'B3'], max: 0.5});
var ndwiRGB = ndwiMasked.visualize({
  min: 0.5,
  max: 1,
  palette: ['00FFFF', '0000FF']
});

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

image_rgb = image.visualize(bands=['B5', 'B4', 'B3'], max=0.5)
ndwi_rgb = ndwi_masked.visualize(min=0.5, max=1, palette=['00FFFF', '0000FF'])

Мозаика

Чтобы добиться различных картографических эффектов, можно использовать маскирование и imageCollection.mosaic() (подробнее об этом рассказывается в разделе Мозаика). Метод mosaic() отрисовывает слои в выходном изображении в соответствии с их порядком во входной коллекции. В следующем примере используется mosaic(), чтобы объединить маскированный NDWI и композит ложных цветов и получить новую визуализацию:

Редактор кода (JavaScript)

// Mosaic the visualization layers and display (or export).
var mosaic = ee.ImageCollection([imageRGB, ndwiRGB]).mosaic();
Map.addLayer(mosaic, {}, 'mosaic');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Mosaic the visualization layers and display (or export).
mosaic = ee.ImageCollection([image_rgb, ndwi_rgb]).mosaic()

# Define a map centered on San Francisco Bay.
map_mosaic = geemap.Map(center=[37.5010, -122.1899], zoom=10)

# Add the image layer to the map and display it.
map_mosaic.add_layer(mosaic, None, 'mosaic')
display(map_mosaic)

В этом примере конструктору ImageCollection передается список из двух изображений. Порядок элементов в списке определяет порядок отрисовки изображений на карте.

mosaic_sf
Мозаика из композитного изображения Landsat 8 в ложных цветах и NDWI. Район залива Сан-Франциско, США.

Обрезка

Метод image.clip() позволяет создавать картографические эффекты. В следующем примере мозаика, созданная ранее, обрезается до произвольной буферной зоны вокруг города Сан-Франциско:

Редактор кода (JavaScript)

// Create a circle by drawing a 20000 meter buffer around a point.
var roi = ee.Geometry.Point([-122.4481, 37.7599]).buffer(20000);

// Display a clipped version of the mosaic.
Map.addLayer(mosaic.clip(roi), null, 'mosaic clipped');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Create a circle by drawing a 20000 meter buffer around a point.
roi = ee.Geometry.Point([-122.4481, 37.7599]).buffer(20000)
mosaic_clipped = mosaic.clip(roi)

# Define a map centered on San Francisco.
map_mosaic_clipped = geemap.Map(center=[37.7599, -122.4481], zoom=10)

# Add the image layer to the map and display it.
map_mosaic_clipped.add_layer(mosaic_clipped, None, 'mosaic clipped')
display(map_mosaic_clipped)

В предыдущем примере обратите внимание, что координаты передаются в конструктор Geometry, а длина буфера задана как 20 000 метров. Подробнее о геометрии…

clipped_sf
Мозаика, показанная выше, обрезана до буфера вокруг Сан-Франциско, Калифорния, США.

Отрисовка категориальных карт

Палитры также полезны для рендеринга карт с дискретными значениями, например карт растительного покрова. Если классов несколько, используйте палитру, чтобы задать для каждого из них свой цвет. (В этом контексте может быть полезен метод image.remap(), который преобразует произвольные ярлыки в последовательные целые числа). В следующем примере палитра используется для отображения категорий растительного покрова:

Редактор кода (JavaScript)

// Load 2012 MODIS land cover and select the IGBP classification.
var cover = ee.Image('MODIS/061/MCD12Q1/2012_01_01')
  .select('LC_Type1');

// Define a palette for the 17 distinct land cover classes.
var igbpPalette = [
  '152106', '225129', '369b47', '30eb5b', '387242', // forest
  '6a2325', 'c3aa69', 'b76031', 'd9903d', '91af40',  // shrub, grass
  '111149', // wetlands
  'cdb33b', // croplands
  'cc0013', // urban
  '33280d', // crop mosaic
  'd7cdcc', // snow and ice
  'f7e084', // barren
  'aec3d4'  // water
];

// Specify the min and max labels and the color palette matching the labels.
Map.setCenter(-99.229, 40.413, 5);
Map.addLayer(cover,
             {min: 1, max: 17, palette: igbpPalette},
             'IGBP classification');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load 2012 MODIS land cover and select the IGBP classification.
cover = ee.Image('MODIS/061/MCD12Q1/2012_01_01').select('LC_Type1')

# Define a palette for the 17 distinct land cover classes.
igbp_palette = [
    '152106',
    '225129',
    '369b47',
    '30eb5b',
    '387242',  # forest
    '6a2325',
    'c3aa69',
    'b76031',
    'd9903d',
    '91af40',  # shrub, grass
    '111149',  # wetlands
    'cdb33b',  # croplands
    'cc0013',  # urban
    '33280d',  # crop mosaic
    'd7cdcc',  # snow and ice
    'f7e084',  # barren
    'aec3d4',  # water
]

# Define a map centered on the United States.
map_palette = geemap.Map(center=[40.413, -99.229], zoom=5)

# Add the image layer to the map and display it. Specify the min and max labels
# and the color palette matching the labels.
map_palette.add_layer(
    cover, {'min': 1, 'max': 17, 'palette': igbp_palette}, 'IGBP classes'
)
display(map_palette)
landcover_palettized
Почвенно-растительный покров MODIS 2012 с использованием классификации IGBP.

Дескрипторы стилизованных слоев

Для отрисовки изображений можно использовать дескриптор стилизованного слоя (SLD). Предоставьте image.sldStyle() XML-описание символов и цветов изображения, в частности элемента RasterSymbolizer. Подробнее RasterSymbolizerоб элементе … Например, чтобы отобразить карту растительного покрова, описанную в разделе "Отрисовка категориальных карт", с помощью SLD, используйте:

Редактор кода (JavaScript)

var cover = ee.Image('MODIS/061/MCD12Q1/2012_01_01').select('LC_Type1');

// Define an SLD style of discrete intervals to apply to the image.
var sld_intervals =
'<RasterSymbolizer>' +
  '<ColorMap type="intervals" extended="false">' +
    '<ColorMapEntry color="#152106" quantity="1" label="Evergreen Needleleaf Forest"/>' +
    '<ColorMapEntry color="#225129" quantity="2" label="Evergreen Broadleaf Forest"/>' +
    '<ColorMapEntry color="#369b47" quantity="3" label="Deciduous Needleleaf Forest"/>' +
    '<ColorMapEntry color="#30eb5b" quantity="4" label="Deciduous Broadleaf Forest"/>' +
    '<ColorMapEntry color="#387242" quantity="5" label="Mixed Deciduous Forest"/>' +
    '<ColorMapEntry color="#6a2325" quantity="6" label="Closed Shrubland"/>' +
    '<ColorMapEntry color="#c3aa69" quantity="7" label="Open Shrubland"/>' +
    '<ColorMapEntry color="#b76031" quantity="8" label="Woody Savanna"/>' +
    '<ColorMapEntry color="#d9903d" quantity="9" label="Savanna"/>' +
    '<ColorMapEntry color="#91af40" quantity="10" label="Grassland"/>' +
    '<ColorMapEntry color="#111149" quantity="11" label="Permanent Wetland"/>' +
    '<ColorMapEntry color="#cdb33b" quantity="12" label="Cropland"/>' +
    '<ColorMapEntry color="#cc0013" quantity="13" label="Urban"/>' +
    '<ColorMapEntry color="#33280d" quantity="14" label="Crop, Natural Veg. Mosaic"/>' +
    '<ColorMapEntry color="#d7cdcc" quantity="15" label="Permanent Snow, Ice"/>' +
    '<ColorMapEntry color="#f7e084" quantity="16" label="Barren, Desert"/>' +
    '<ColorMapEntry color="#aec3d4" quantity="17" label="Water"/>' +
  '</ColorMap>' +
'</RasterSymbolizer>';
Map.addLayer(cover.sldStyle(sld_intervals), {}, 'IGBP classification styled');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

cover = ee.Image('MODIS/061/MCD12Q1/2012_01_01').select('LC_Type1')

# Define an SLD style of discrete intervals to apply to the image.
sld_intervals = """
<RasterSymbolizer>
  <ColorMap  type="intervals" extended="false" >
    <ColorMapEntry color="#152106" quantity="1" label="Evergreen Needleleaf Forest"/>
    <ColorMapEntry color="#225129" quantity="2" label="Evergreen Broadleaf Forest"/>
    <ColorMapEntry color="#369b47" quantity="3" label="Deciduous Needleleaf Forest"/>
    <ColorMapEntry color="#30eb5b" quantity="4" label="Deciduous Broadleaf Forest"/>
    <ColorMapEntry color="#387242" quantity="5" label="Mixed Deciduous Forest"/>
    <ColorMapEntry color="#6a2325" quantity="6" label="Closed Shrubland"/>
    <ColorMapEntry color="#c3aa69" quantity="7" label="Open Shrubland"/>
    <ColorMapEntry color="#b76031" quantity="8" label="Woody Savanna"/>
    <ColorMapEntry color="#d9903d" quantity="9" label="Savanna"/>
    <ColorMapEntry color="#91af40" quantity="10" label="Grassland"/>
    <ColorMapEntry color="#111149" quantity="11" label="Permanent Wetland"/>
    <ColorMapEntry color="#cdb33b" quantity="12" label="Cropland"/>
    <ColorMapEntry color="#cc0013" quantity="13" label="Urban"/>
    <ColorMapEntry color="#33280d" quantity="14" label="Crop, Natural Veg. Mosaic"/>
    <ColorMapEntry color="#d7cdcc" quantity="15" label="Permanent Snow, Ice"/>
    <ColorMapEntry color="#f7e084" quantity="16" label="Barren, Desert"/>
    <ColorMapEntry color="#aec3d4" quantity="17" label="Water"/>
  </ColorMap>
</RasterSymbolizer>"""

# Apply the SLD style to the image.
cover_sld = cover.sldStyle(sld_intervals)

# Define a map centered on the United States.
map_sld_categorical = geemap.Map(center=[40.413, -99.229], zoom=5)

# Add the image layer to the map and display it.
map_sld_categorical.add_layer(cover_sld, None, 'IGBP classes styled')
display(map_sld_categorical)

Чтобы создать изображение визуализации с цветовой шкалой, задайте для типа ColorMap значение ramp. В следующем примере сравниваются типы interval и ramp для отрисовки ЦМР:

Редактор кода (JavaScript)

// Load SRTM Digital Elevation Model data.
var image = ee.Image('CGIAR/SRTM90_V4');

// Define an SLD style of discrete intervals to apply to the image. Use the
// opacity keyword to set pixels less than 0 as completely transparent. Pixels
// with values greater than or equal to the final entry quantity are set to
// fully transparent by default.
var sld_intervals =
  '<RasterSymbolizer>' +
    '<ColorMap type="intervals" extended="false" >' +
      '<ColorMapEntry color="#0000ff" quantity="0" label="0 ﹤ x" opacity="0" />' +
      '<ColorMapEntry color="#00ff00" quantity="100" label="0 ≤ x ﹤ 100" />' +
      '<ColorMapEntry color="#007f30" quantity="200" label="100 ≤ x ﹤ 200" />' +
      '<ColorMapEntry color="#30b855" quantity="300" label="200 ≤ x ﹤ 300" />' +
      '<ColorMapEntry color="#ff0000" quantity="400" label="300 ≤ x ﹤ 400" />' +
      '<ColorMapEntry color="#ffff00" quantity="900" label="400 ≤ x ﹤ 900" />' +
    '</ColorMap>' +
  '</RasterSymbolizer>';

// Define an sld style color ramp to apply to the image.
var sld_ramp =
  '<RasterSymbolizer>' +
    '<ColorMap type="ramp" extended="false" >' +
      '<ColorMapEntry color="#0000ff" quantity="0" label="0"/>' +
      '<ColorMapEntry color="#00ff00" quantity="100" label="100" />' +
      '<ColorMapEntry color="#007f30" quantity="200" label="200" />' +
      '<ColorMapEntry color="#30b855" quantity="300" label="300" />' +
      '<ColorMapEntry color="#ff0000" quantity="400" label="400" />' +
      '<ColorMapEntry color="#ffff00" quantity="500" label="500" />' +
    '</ColorMap>' +
  '</RasterSymbolizer>';

// Add the image to the map using both the color ramp and interval schemes.
Map.setCenter(-76.8054, 42.0289, 8);
Map.addLayer(image.sldStyle(sld_intervals), {}, 'SLD intervals');
Map.addLayer(image.sldStyle(sld_ramp), {}, 'SLD ramp');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load SRTM Digital Elevation Model data.
image = ee.Image('CGIAR/SRTM90_V4')

# Define an SLD style of discrete intervals to apply to the image.
sld_intervals = """
    <RasterSymbolizer>
      <ColorMap type="intervals" extended="false" >
        <ColorMapEntry color="#0000ff" quantity="0" label="0"/>
        <ColorMapEntry color="#00ff00" quantity="100" label="1-100" />
        <ColorMapEntry color="#007f30" quantity="200" label="110-200" />
        <ColorMapEntry color="#30b855" quantity="300" label="210-300" />
        <ColorMapEntry color="#ff0000" quantity="400" label="310-400" />
        <ColorMapEntry color="#ffff00" quantity="1000" label="410-1000" />
      </ColorMap>
    </RasterSymbolizer>"""

# Define an sld style color ramp to apply to the image.
sld_ramp = """
    <RasterSymbolizer>
      <ColorMap type="ramp" extended="false" >
        <ColorMapEntry color="#0000ff" quantity="0" label="0"/>
        <ColorMapEntry color="#00ff00" quantity="100" label="100" />
        <ColorMapEntry color="#007f30" quantity="200" label="200" />
        <ColorMapEntry color="#30b855" quantity="300" label="300" />
        <ColorMapEntry color="#ff0000" quantity="400" label="400" />
        <ColorMapEntry color="#ffff00" quantity="500" label="500" />
      </ColorMap>
    </RasterSymbolizer>"""

# Define a map centered on the United States.
map_sld_interval = geemap.Map(center=[40.413, -99.229], zoom=5)

# Add the image layers to the map and display it.
map_sld_interval.add_layer(
    image.sldStyle(sld_intervals), None, 'SLD intervals'
)
map_sld_interval.add_layer(image.sldStyle(sld_ramp), None, 'SLD ramp')
display(map_sld_interval)

SLD также полезны для растягивания значений пикселей, чтобы улучшить визуализацию непрерывных данных. Например, следующий код сравнивает результаты произвольного линейного растяжения с минимально-максимальной нормализацией и выравниванием гистограммы:

Редактор кода (JavaScript)

// Load a Landsat 8 raw image.
var image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318');

// Define a RasterSymbolizer element with '_enhance_' for a placeholder.
var template_sld =
  '<RasterSymbolizer>' +
    '<ContrastEnhancement><_enhance_/></ContrastEnhancement>' +
    '<ChannelSelection>' +
      '<RedChannel>' +
        '<SourceChannelName>B5</SourceChannelName>' +
      '</RedChannel>' +
      '<GreenChannel>' +
        '<SourceChannelName>B4</SourceChannelName>' +
      '</GreenChannel>' +
      '<BlueChannel>' +
        '<SourceChannelName>B3</SourceChannelName>' +
      '</BlueChannel>' +
    '</ChannelSelection>' +
  '</RasterSymbolizer>';

// Get SLDs with different enhancements.
var equalize_sld = template_sld.replace('_enhance_', 'Histogram');
var normalize_sld = template_sld.replace('_enhance_', 'Normalize');

// Display the results.
Map.centerObject(image, 10);
Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 15000}, 'Linear');
Map.addLayer(image.sldStyle(equalize_sld), {}, 'Equalized');
Map.addLayer(image.sldStyle(normalize_sld), {}, 'Normalized');

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load a Landsat 8 raw image.
image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318')

# Define a RasterSymbolizer element with '_enhance_' for a placeholder.
template_sld = """
<RasterSymbolizer>
  <ContrastEnhancement><_enhance_/></ContrastEnhancement>
  <ChannelSelection>
    <RedChannel>
      <SourceChannelName>B5</SourceChannelName>
    </RedChannel>
    <GreenChannel>
      <SourceChannelName>B4</SourceChannelName>
    </GreenChannel>
    <BlueChannel>
      <SourceChannelName>B3</SourceChannelName>
    </BlueChannel>
  </ChannelSelection>
</RasterSymbolizer>"""

# Get SLDs with different enhancements.
equalize_sld = template_sld.replace('_enhance_', 'Histogram')
normalize_sld = template_sld.replace('_enhance_', 'Normalize')

# Define a map centered on San Francisco Bay.
map_sld_continuous = geemap.Map(center=[37.5010, -122.1899], zoom=10)

# Add the image layers to the map and display it.
map_sld_continuous.add_layer(
    image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 15000}, 'Linear'
)
map_sld_continuous.add_layer(image.sldStyle(equalize_sld), None, 'Equalized')
map_sld_continuous.add_layer(
    image.sldStyle(normalize_sld), None, 'Normalized'
)
display(map_sld_continuous)

При использовании SLD в Earth Engine следует учитывать следующее:

  • Поддерживаются OGC SLD 1.0 и OGC SE 1.1.
  • Передаваемый XML-документ может быть полным или содержать только элемент RasterSymbolizer и ниже.
  • Каналы можно выбирать по их названиям в Earth Engine или по индексу ('1', '2' и т. д.).
  • Механизмы растяжения контраста Histogram и Normalize не поддерживаются для изображений с плавающей запятой.
  • Непрозрачность учитывается, только если она равна 0,0 (прозрачный). Ненулевые значения прозрачности обрабатываются как полностью непрозрачные.
  • Определение OverlapBehavior в настоящее время игнорируется.
  • Механизм ShadedRelief в настоящее время не поддерживается.
  • Механизм ImageOutline в настоящее время не поддерживается.
  • Элемент Geometry игнорируется.
  • Если запрашивается выравнивание или нормализация гистограммы, выходное изображение будет содержать метаданные histogram_bandname.

Значки видео

Используйте метод ee.Image.getThumbURL(), чтобы создать значок в формате PNG или JPEG для объекта ee.Image. Если вы выведете на печать результат выражения, которое заканчивается вызовом getThumbURL(), то будет напечатан URL. При переходе по URL-адресу серверы Earth Engine начинают генерировать запрошенный значок на лету. После завершения обработки изображение будет показано в браузере. Его можно скачать, выбрав нужные параметры в контекстном меню, которое открывается при нажатии правой кнопкой мыши.

thumbnail_in_browser
Цифровая модель рельефа SRTM, показанная в браузере в виде уменьшенного изображения PNG.

Метод getThumbURL() включает параметры, описанные в таблице параметров визуализации выше. Кроме того, он принимает необязательные аргументы dimensions, region и crs, которые управляют пространственной протяженностью, размером и проекцией отображения значка.

Дополнительные параметры для ee.Image.getThumbURL() с примечанием о формате
Параметр Описание Тип
dimensions Размеры значка в пикселях. Если указано одно целое число, оно определяет размер большей стороны изображения, а меньшая сторона масштабируется пропорционально. По умолчанию для большего размера изображения используется значение 512 пикселей. Одно целое число или строка в формате: 'WIDTHxHEIGHT'
регион Геопространственный регион изображения для отрисовки. По умолчанию это все изображение или границы предоставленной геометрии. GeoJSON или двумерный список, содержащий не менее трех координат точек, которые определяют линейное кольцо.
crs Целевая проекция, например EPSG:3857. Значение по умолчанию – WGS84 ('EPSG:4326'). Строка
формат Определяет формат значка (PNG или JPEG). Формат PNG по умолчанию реализован как RGBA, где альфа-канал представляет действительные и недействительные пиксели, определяемые mask() изображения. Недопустимые пиксели прозрачны. Необязательный формат JPEG реализован как RGB, где недопустимые пиксели изображения заполняются нулями по каналам RGB. Строка; png или jpg

Одноканальное изображение по умолчанию будет отображаться в оттенках серого, если не указан аргумент palette. Для многоканального изображения по умолчанию используется RGB-визуализация первых трех каналов, если не указан аргумент bands. Если указаны только две полосы, первая будет сопоставлена с красным каналом, вторая – с синим, а зеленый канал будет заполнен нулями.

Ниже приведены примеры различных комбинаций аргументов параметра getThumbURL(). Чтобы посмотреть значки, нажмите на URL, которые появятся после выполнения скрипта.

Редактор кода (JavaScript)

// Fetch a digital elevation model.
var image = ee.Image('CGIAR/SRTM90_V4');

// Request a default thumbnail of the DEM with defined linear stretch.
// Set masked pixels (ocean) to 1000 so they map as gray.
var thumbnail1 = image.unmask(1000).getThumbURL({
  'min': 0,
  'max': 3000,
  'dimensions': 500,
});
print('Default extent:', thumbnail1);

// Specify region by rectangle, define palette, set larger aspect dimension size.
var thumbnail2 = image.getThumbURL({
  'min': 0,
  'max': 3000,
  'palette': ['00A600','63C600','E6E600','E9BD3A','ECB176','EFC2B3','F2F2F2'],
  'dimensions': 500,
  'region': ee.Geometry.Rectangle([-84.6, -55.9, -32.9, 15.7]),
});
print('Rectangle region and palette:', thumbnail2);

// Specify region by a linear ring and set display CRS as Web Mercator.
var thumbnail3 = image.getThumbURL({
  'min': 0,
  'max': 3000,
  'palette': ['00A600','63C600','E6E600','E9BD3A','ECB176','EFC2B3','F2F2F2'],
  'region': ee.Geometry.LinearRing([[-84.6, 15.7], [-84.6, -55.9], [-32.9, -55.9]]),
  'dimensions': 500,
  'crs': 'EPSG:3857'
});
print('Linear ring region and specified crs', thumbnail3);

Настройка Python

Информацию о Python API и использовании geemap для интерактивной разработки можно найти на странице Среда Python.

import ee
import geemap.core as geemap

Colab (Python)

# Fetch a digital elevation model.
image = ee.Image('CGIAR/SRTM90_V4')

# Request a default thumbnail of the DEM with defined linear stretch.
# Set masked pixels (ocean) to 1000 so they map as gray.
thumbnail_1 = image.unmask(1000).getThumbURL({
    'min': 0,
    'max': 3000,
    'dimensions': 500,
})
print('Default extent:', thumbnail_1)

# Specify region by rectangle, define palette, set larger aspect dimension size.
thumbnail_2 = image.getThumbURL({
    'min': 0,
    'max': 3000,
    'palette': [
        '00A600',
        '63C600',
        'E6E600',
        'E9BD3A',
        'ECB176',
        'EFC2B3',
        'F2F2F2',
    ],
    'dimensions': 500,
    'region': ee.Geometry.Rectangle([-84.6, -55.9, -32.9, 15.7]),
})
print('Rectangle region and palette:', thumbnail_2)

# Specify region by a linear ring and set display CRS as Web Mercator.
thumbnail_3 = image.getThumbURL({
    'min': 0,
    'max': 3000,
    'palette': [
        '00A600',
        '63C600',
        'E6E600',
        'E9BD3A',
        'ECB176',
        'EFC2B3',
        'F2F2F2',
    ],
    'region': ee.Geometry.LinearRing(
        [[-84.6, 15.7], [-84.6, -55.9], [-32.9, -55.9]]
    ),
    'dimensions': 500,
    'crs': 'EPSG:3857',
})
print('Linear ring region and specified crs:', thumbnail_3)