Visualização de imagens

Há vários métodos ee.Image que produzem representações visuais RGB de dados de imagem, por exemplo: visualize(), getThumbURL(), getMap(), getMapId() (usado na exibição de mapas do Folium do Colab) e Map.addLayer() (usado na exibição de mapas do editor de código, não disponível para Python). Por padrão, esses métodos atribuem as três primeiras bandas a vermelho, verde e azul, respectivamente. O alongamento padrão é baseado no tipo de dados nas faixas (por exemplo, números flutuantes são esticados em [0, 1], dados de 16 bits são esticados para o intervalo completo de valores possíveis), que pode ou não ser adequado. Para conseguir os efeitos de visualização desejados, forneça parâmetros de visualização:

Parâmetros de visualização de imagens
Parâmetro Descrição Tipo
bandas Lista delimitada por vírgulas de três nomes de faixas a serem mapeadas para RGB list
min Valores a serem mapeados para 0 número ou lista de três números, um para cada faixa
max Valores a serem mapeados para 255 número ou lista de três números, um para cada faixa
ganho Valores para multiplicar cada valor de pixel número ou lista de três números, um para cada faixa
viés Valores a serem adicionados a cada DN número ou lista de três números, um para cada faixa
gama Fatores de correção de gama número ou lista de três números, um para cada faixa
palette Lista de strings de cores no estilo CSS (somente imagens de banda única) lista separada por vírgulas de strings hexadecimais
opacidade A opacidade da camada (0,0 é totalmente transparente e 1,0 é totalmente opaco) número
formato "jpg" ou "png" string

Compósitos RGB

O exemplo a seguir ilustra o uso de parâmetros para estilizar uma imagem Landsat 8 como uma composição de cores falsas:

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

Neste exemplo, a banda 'B5' é atribuída a vermelho, 'B4' é atribuída a verde e 'B3' é atribuída a azul.

false_color_sf
Composição de cores falsas do Landsat 8 da área da baía de São Francisco, Califórnia, EUA.

Paletas de cores

Para mostrar uma única banda de uma imagem em cores, defina o parâmetro palette com uma rampa de cores representada por uma lista de strings de cores no estilo CSS. Consulte esta referência para mais informações. O exemplo a seguir ilustra como usar cores de ciano ('00FFFF') a azul ('0000FF') para renderizar uma imagem do índice de diferença normalizada de água (NDWI, na sigla em inglês):

Editor de código (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);

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

Neste exemplo, os parâmetros min e max indicam o intervalo de valores de pixel em que a paleta precisa ser aplicada. Os valores intermediários são esticados linearmente.

Além disso, o parâmetro show é definido como false no exemplo do editor de código. Isso resulta na visibilidade da camada desativada quando ela é adicionada ao mapa. Ele pode ser ativado novamente usando o Layer Manager no canto superior direito do mapa do editor de código.

ndwi_sf
Landsat 8 NDWI, área da baía de São Francisco, EUA. Ciano são valores baixos, azul são valores altos.

Como salvar paletas de cores padrão

Para salvar paletas de cores em uma imagem de classificação, sem precisar aplicá-las, defina duas propriedades de imagem de string com nomes especiais para cada faixa de classificação.

Por exemplo, se a imagem tiver uma faixa chamada 'landcover' com três valores 0, 1 e 2 correspondentes às classes "água", "floresta" e "outros", você pode definir as propriedades a seguir para que a visualização padrão mostre uma cor especificada para cada classe (os valores usados na análise não serão afetados):

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

Consulte a página de gerenciamento de recursos para saber como definir metadados de recursos.

Mascaramento

É possível usar image.updateMask() para definir a opacidade de pixels individuais com base em pixels de uma imagem de máscara que não são iguais a zero. Os pixels iguais a zero na máscara são excluídos das computações, e a opacidade é definida como 0 para exibição. O exemplo a seguir usa um limite de NDWI (consulte a seção Operações relacionais para informações sobre limites) para atualizar a máscara na camada NDWI criada anteriormente:

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

Imagens de visualização

Use o método image.visualize() para converter uma imagem em RGB de 8 bits para exibição ou exportação. Por exemplo, para converter a composição de falsa cor e a NDWI em imagens de exibição de três bandas, use:

Editor de código (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']
});

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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'])

Mosaicking

É possível usar o mascaramento e o imageCollection.mosaic() (consulte a seção "Mosaico" para mais informações) para conseguir vários efeitos cartográficos. O método mosaic() renderiza camadas na imagem de saída de acordo com a ordem na coleção de entrada. O exemplo a seguir usa mosaic() para combinar o NDWI mascarado e a composição de cores falsas e gerar uma nova visualização:

Editor de código (JavaScript)

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

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

Neste exemplo, observe que uma lista das duas imagens de visualização é fornecida ao construtor ImageCollection. A ordem da lista determina a ordem em que as imagens são renderizadas no mapa.

mosaic_sf
Mosaico de um composto de cores falsas e NDWI do Landsat 8. Área da baía de São Francisco, EUA.

Corte

O método image.clip() é útil para criar efeitos cartográficos. O exemplo a seguir recorta o mosaico criado anteriormente para uma zona de buffer arbitrária em torno da cidade de São Francisco:

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

No exemplo anterior, as coordenadas são fornecidas ao construtor Geometry,e o comprimento do buffer é especificado como 20.000 metros. Saiba mais sobre geometrias na página Geometrias.

clipped_sf
O mosaico mostrado acima, cortado para um buffer em torno de São Francisco, Califórnia, EUA.

Renderizar mapas categóricos

As paletas também são úteis para renderizar mapas de valores discretos, por exemplo, um mapa de cobertura de terra. No caso de várias classes, use a paleta para fornecer uma cor diferente para cada uma delas. O método image.remap() pode ser útil nesse contexto para converter rótulos arbitrários em números inteiros consecutivos. O exemplo a seguir usa uma paleta para renderizar as categorias de capa de landing page:

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap

Colab (Python)

# 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
Cobertura de terra MODIS 2012 usando a classificação IGBP.

Descritores de camadas estilizados

É possível usar um Descriptor de Camada Estilosa (SLD, na sigla em inglês) para renderizar imagens para exibição. Forneça ao image.sldStyle() uma descrição em XML da simbolização e coloração da imagem, especificamente o elemento RasterSymbolizer. Saiba mais sobre o elemento RasterSymbolizer neste link. Por exemplo, para renderizar o mapa de cobertura da terra descrito na seção "Renderização de mapas categóricos" com um SLD, use:

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap

Colab (Python)

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)

Para criar uma imagem de visualização com uma rampa de cores, defina o tipo de ColorMap como "ramp". O exemplo a seguir compara os tipos "intervalo" e "rampa" para renderizar um DEM:

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

Os SLDs também são úteis para esticar valores de pixel e melhorar as visualizações de dados contínuos. Por exemplo, o código abaixo compara os resultados de um alongamento linear arbitrário com uma "Normalização" mínima-máxima e uma equalização de "Histograma":

Editor de código (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');

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)

Observações sobre o uso de SLDs no Earth Engine:

  • O OGC SLD 1.0 e o OGC SE 1.1 são compatíveis.
  • O documento XML transmitido pode ser completo ou apenas o elemento RasterSymbolizer e abaixo.
  • As bandas podem ser selecionadas pelos nomes ou índice do Earth Engine ("1", "2", ...).
  • Os mecanismos de alongamento de contraste de histograma e normalização não são compatíveis com imagens de pontos flutuantes.
  • A opacidade só é considerada quando é 0,0 (transparente). Valores de opacidade diferentes de zero são tratados como completamente opacos.
  • No momento, a definição de OverlapBehavior é ignorada.
  • No momento, não há suporte para o mecanismo ShadedRelief.
  • No momento, não há suporte para o mecanismo ImageOutline.
  • O elemento Geometry é ignorado.
  • A imagem de saída terá metadados histogram_bandname se a equalização ou a normalização do histograma for solicitada.

Imagens de miniatura

Use o método ee.Image.getThumbURL() para gerar uma imagem de miniatura PNG ou JPEG para um objeto ee.Image. A impressão do resultado de uma expressão que termina com uma chamada para getThumbURL() resulta na impressão de um URL. Ao acessar o URL, os servidores do Earth Engine começam a gerar a miniatura solicitada. A imagem é exibida em um navegador quando o processamento é concluído. Para fazer o download, selecione as opções adequadas no menu de contexto do clique com o botão direito do mouse.

thumbnail_in_browser
Modelo de elevação digital do SRTM exibido como uma miniatura PNG em um navegador.

O método getThumbURL() inclui parâmetros, descritos na tabela de parâmetros de visualização acima. Além disso, ele usa argumentos dimensions, region e crs opcionais que controlam a extensão espacial, o tamanho e a projeção de exibição da miniatura.

Parâmetros adicionais para ee.Image.getThumbURL() com observação sobre o formato
Parâmetro Descrição Tipo
dimensions Dimensões da miniatura em unidades de pixel. Se um único número inteiro for fornecido, ele vai definir o tamanho da dimensão de aspecto maior da imagem e dimensionar a dimensão menor proporcionalmente. O padrão é 512 pixels para a dimensão de proporção de imagem maior. Um único número inteiro ou string no formato: 'LARGURAxALTURA'
region A região geoespacial da imagem a ser renderizada. A imagem inteira por padrão ou os limites de uma geometria fornecida. GeoJSON ou uma lista bidimensional com pelo menos três coordenadas de ponto que definem um anel linear
crs A projeção de destino, por exemplo, "EPSG:3857". O padrão é WGS84 ("EPSG:4326"). String
formato Define o formato da miniatura como PNG ou JPEG. O formato PNG padrão é implementado como RGBA, em que o canal Alfa representa pixels válidos e inválidos, definidos pelo mask() da imagem. Os pixels inválidos são transparentes. O formato JPEG opcional é implementado como RGB, em que os pixels de imagem inválidos são preenchidos com zero nos canais RGB. String: "png" ou "jpg"

Uma imagem de banda única vai ser definida como escala de cinza, a menos que um argumento palette seja fornecido. Uma imagem de várias bandas vai usar a visualização RGB das três primeiras bandas por padrão, a menos que um argumento bands seja fornecido. Se apenas duas faixas forem fornecidas, a primeira será mapeada para vermelho, a segunda para azul, e o canal verde será preenchido com zero.

Confira a seguir uma série de exemplos que demonstram várias combinações de argumentos de parâmetro getThumbURL(). Clique nos URLs impressos quando você executar este script para conferir as miniaturas.

Editor de código (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);

Configuração do Python

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

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)