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

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

Параметры визуализации изображения
Параметр Описание Тип
группы Список из трех названий полос, разделенных запятыми, которые будут сопоставлены с RGB. список
мин Значения для сопоставления с 0 номер или список из трех номеров, по одному на каждый диапазон
Макс Значения для сопоставления с 255 номер или список из трех номеров, по одному на каждый диапазон
прирост Значения, на которые умножается значение каждого пикселя номер или список из трех номеров, по одному на каждый диапазон
предвзятость Значения, добавляемые к каждому DN номер или список из трех номеров, по одному на каждый диапазон
гамма Гамма-поправочный коэффициент(ы) номер или список из трех номеров, по одному на каждый диапазон
палитра Список цветовых строк в стиле CSS (только для однополосных изображений) список шестнадцатеричных строк, разделенных запятыми
непрозрачность Непрозрачность слоя (0,0 — полностью прозрачный, 1,0 — полностью непрозрачный). число
формат Либо «jpg», либо «png». нить

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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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 . Порядок списка определяет порядок отображения изображений на карте.

мозаика_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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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/051/MCD12Q1/2012_01_01')
  .select('Land_Cover_Type_1');

// Define a palette for the 18 distinct land cover classes.
var igbpPalette = [
  'aec3d4', // water
  '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
  '6f6f6f'  // tundra
];

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

Настройка Python

См. страницу «Среда Python» для получения информации об API Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

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

# Define a palette for the 18 distinct land cover classes.
igbp_palette = [
    'aec3d4',  # water
    '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
    '6f6f6f',  # tundra
]

# 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': 0, '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/051/MCD12Q1/2012_01_01').select('Land_Cover_Type_1');

// Define an SLD style of discrete intervals to apply to the image.
var sld_intervals =
'<RasterSymbolizer>' +
  '<ColorMap type="intervals" extended="false">' +
    '<ColorMapEntry color="#aec3d4" quantity="0" label="Water"/>' +
    '<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="#6f6f6f" quantity="17" label="Tundra"/>' +
  '</ColorMap>' +
'</RasterSymbolizer>';
Map.addLayer(cover.sldStyle(sld_intervals), {}, 'IGBP classification styled');

Настройка Python

См. страницу «Среда Python» для получения информации об API Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

cover = ee.Image('MODIS/051/MCD12Q1/2012_01_01').select('Land_Cover_Type_1')

# Define an SLD style of discrete intervals to apply to the image.
sld_intervals = """
<RasterSymbolizer>
  <ColorMap  type="intervals" extended="false" >
    <ColorMapEntry color="#aec3d4" quantity="0" label="Water"/>
    <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="#6f6f6f" quantity="17" label="Tundra"/>
  </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». В следующем примере сравниваются типы «интервал» и «рампа» для визуализации матрицы высот:

Редактор кода (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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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», ...).
  • Механизмы растяжения контраста «Гистограмма» и «Нормализация» не поддерживаются для изображений с плавающей запятой.
  • Непрозрачность учитывается только тогда, когда она равна 0,0 (прозрачность). Ненулевые значения непрозрачности считаются полностью непрозрачными.
  • Определение OverlapBehavior в настоящее время игнорируется.
  • Механизм ShadedRelief в настоящее время не поддерживается.
  • Механизм ImageOutline в настоящее время не поддерживается.
  • Элемент Geometry игнорируется.
  • Выходное изображение будет иметь метаданные histogram_bandname, если будет запрошено выравнивание или нормализация гистограммы.

Миниатюры изображений

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

миниатюра_в_браузере
Цифровая модель рельефа SRTM отображается в браузере в виде миниатюры PNG.

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

Дополнительные параметры для ee.Image.getThumbURL() с примечанием о формате
Параметр Описание Тип
размеры Размеры миниатюр в пикселях. Если указано одно целое число, оно определяет размер большего аспектного измерения изображения и пропорционально масштабирует меньшее измерение. По умолчанию 512 пикселей для большего размера изображения. Одно целое число или строка в формате: «ШИРИНАxВЫСОТА».
область Геопространственная область изображения для рендеринга. Все изображение по умолчанию или границы предоставленной геометрии. GeoJSON или двумерный список из как минимум трех координат точек, определяющих линейное кольцо.
крс Целевая проекция, например, «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 Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

# 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)