Wizualizacja obrazu

Istnieje wiele metod ee.Image, które generują wizualne reprezentacje danych obrazu w RGB, na przykład: visualize(), getThumbURL(), getMap(), getMapId() (używane w wyświetlaniu mapy Folium w Colabie) oraz Map.addLayer() (używane w wyświetlaniu mapy w Edytorze kodu, niedostępne w Pythonie). Domyślnie te metody przypisują pierwsze 3 pasma odpowiednio do kolorów czerwonego, zielonego i niebieskiego. Domyślne rozciąganie jest określane na podstawie typu danych w pasmach (np. dane typu float są rozciągane w zakresie [0, 1], a dane 16-bitowe są rozciągane do pełnego zakresu możliwych wartości), co może być odpowiednie lub nie. Aby uzyskać pożądane efekty wizualizacji, możesz podać parametry wizualizacji:

Parametry wizualizacji obrazu
Parametr Opis Typ
pasm Lista nazw 3 pasm rozdzielona przecinkami, które mają zostać zmapowane na RGB lista
min Wartości do mapowania na 0 liczba lub lista 3 liczb, po jednej dla każdego pasma
max Wartości do zmapowania na 255 liczba lub lista 3 liczb, po jednej dla każdego pasma
gain Wartości, przez które należy pomnożyć każdą wartość piksela liczba lub lista 3 liczb, po jednej dla każdego pasma
uprzedzanie Wartości do dodania do każdego DN liczba lub lista 3 liczb, po jednej dla każdego pasma
gamma Współczynniki korekcji gamma liczba lub lista 3 liczb, po jednej dla każdego pasma
palette Lista ciągów znaków kolorów w stylu CSS (tylko w przypadku obrazów jednopasmowych) lista ciągów szesnastkowych rozdzielona przecinkami
przezroczystość Przezroczystość warstwy (0,0 – całkowicie przezroczysta, 1,0 – całkowicie nieprzezroczysta). liczba
format „jpg” lub „png” ciąg znaków

kompozyty RGB,

Poniżej przedstawiamy użycie parametrów do nadania obrazowi Landsat 8 stylu w postaci kompozycji w kolorach fałszywych:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

W tym przykładzie pasmo 'B5' ma kolor czerwony, 'B4' – zielony, a 'B3' – niebieski.

false_color_sf
Zdjęcie kompozytowe Landsat 8 w fałszywych kolorach przedstawiające zatokę w San Francisco w Kalifornii w USA.

Palety kolorów

Aby wyświetlić jeden pasek obrazu w kolorze, ustaw parametr palette za pomocą rampy kolorów reprezentowanej przez listę ciągów znaków kolorów w stylu CSS. (Więcej informacji znajdziesz w tej dokumentacji). Ten przykład pokazuje, jak za pomocą kolorów od turkusowego ('00FFFF') do niebieskiego ('0000FF') renderować obraz znormalizowanego wskaźnika różnicy wody (NDWI):

Edytor kodu (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);

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

W tym przykładzie parametry minmax wskazują zakres wartości pikseli, do których należy zastosować paletę. Wartości pośrednie są rozciągane liniowo.

Zwróć też uwagę, że w przykładzie w Edytorze kodu parametr show ma wartość false. W efekcie widoczność warstwy jest wyłączona, gdy zostanie dodana do mapy. Można go zawsze włączyć ponownie za pomocą Menedżera warstw w prawym górnym rogu mapy w Edytorze kodu.

ndwi_sf
Landsat 8 NDWI, obszar Zatoki San Francisco, USA. Kolorem cyjanowym zaznaczono niskie wartości, a niebieskim – wysokie.

Zapisywanie domyślnych palet kolorów

Aby zapisać palety kolorów na obrazie klasyfikacji, aby nie trzeba było pamiętać o ich zastosowaniu, możesz ustawić 2 właściwości łańcucha znaków o specjalnych nazwach dla każdego pasma klasyfikacji.

Jeśli np. obraz zawiera pasmo o nazwie 'landcover'z 3 wartościami 0, 1 i 2 odpowiadającymi klasom „woda”, „las” i „inne”, możesz ustawić te właściwości, aby domyślna wizualizacja pokazywała określony kolor dla każdej klasy (nie wpłynie to na wartości użyte w analizie):

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

Aby dowiedzieć się, jak ustawić metadane zasobu, przejdź na stronę zarządzania komponentami.

Zamaskowanie

Za pomocą atrybutu image.updateMask() możesz ustawić przezroczystość poszczególnych pikseli na podstawie tego, czy piksele w obrazie maski mają wartość niezerową. Piksele o wartości 0 w masce są wykluczane z obliczeń, a przezroczystość jest ustawiana na 0. W tym przykładzie do zaktualizowania maski w warstwie NDWI utworzonej wcześniej użyto progu NDWI (informacje o progach znajdziesz w sekcji Operacje relacyjne).

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

Obrazy wizualizacji

Użyj metody image.visualize(), aby przekonwertować obraz na 8-bitowy obraz RGB do wyświetlania lub eksportowania. Aby na przykład przekonwertować kompozyt na podstawie nieprawdziwych kolorów i NDWI na obrazy wyświetlane w 3 pasmach, użyj:

Edytor kodu (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']
});

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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

Aby uzyskać różne efekty kartograficzne, możesz użyć maskowania i imageCollection.mosaic() (informacje o mozaikowaniu znajdziesz w sekcji Mozaikowanie). Metoda mosaic() renderuje warstwy obrazu wyjściowego zgodnie z ich kolejnością w zbiorze wejściowym. W tym przykładzie funkcja mosaic() służy do połączenia zamaskowanego NDWI i kompozycji z fałszywymi kolorami w nowej wizualizacji:

Edytor kodu (JavaScript)

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

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

W tym przykładzie konstruktorowi ImageCollection przekazywana jest lista 2 wizualizacji. Kolejność na liście określa kolejność, w jakiej obrazy są renderowane na mapie.

mosaic_sf
Mozaika złożona z kompozycji w fałszywych kolorach i NDWI z danych satelity Landsat 8. San Francisco, USA.

Przycinanie

Metoda image.clip() jest przydatna do uzyskiwania efektów kartograficznych. W tym przykładzie mozaika utworzona wcześniej jest ograniczona do dowolnej strefy buforowej wokół miasta San Francisco:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

W poprzednim przykładzie zwróć uwagę, że współrzędne są przekazywane do konstruktora Geometry,a długość bufora jest określona jako 20 tys. metrów. Więcej informacji o geometriach znajdziesz na stronie Geometria.

clipped_sf
Wyświetlona powyżej mozaika została przycięta do obszaru wokół San Francisco w Kalifornii w Stanach Zjednoczonych.

Renderowanie map kartezjalnych

Palety są też przydatne do renderowania map z wartościami dyskretnymi, np. mapy pokrycia terenu. W przypadku wielu zajęć użyj palety, aby przypisać inny kolor do każdego z nich. (w tym kontekście przydatna może być metoda image.remap(), która służy do konwertowania dowolnych etykiet na kolejne liczby całkowite). W tym przykładzie paleta jest używana do renderowania kategorii okładek:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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
Pokrywa ziemi na podstawie danych MODIS z 2012 r. z użyciem klasyfikacji IGBP.

Opisy stylizowanych warstw

Do renderowania obrazów na potrzeby wyświetlania możesz użyć opisanego stylowo opisu warstwy (SLD). Prześlij do image.sldStyle() opis XML symbolizacji i kolorystyki obrazu, w szczególności elementu RasterSymbolizer. Więcej informacji o elemencie RasterSymbolizer znajdziesz tutaj. Aby na przykład wyrenderować mapę pokrycia terenu opisaną w sekcji Renderowanie map sytuacyjnych za pomocą SLD, użyj:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

Aby utworzyć obraz wizualizacji z rampą kolorów, ustaw typ ColorMap na „rampa”. W tym przykładzie porównujemy typy „interval” i „ramp” do renderowania DEM:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

Wartości te są też przydatne do rozciągania wartości pikseli w celu poprawy wizualizacji danych ciągłych. Na przykład poniższy kod porównuje wyniki dowolnego liniowego rozciągnięcia z normalizacją min-max i wyrównaniem „Histogram”:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

Uwagi dotyczące korzystania z map SLD w Earth Engine:

  • Obsługiwane są OGC SLD 1.0 i OGC SE 1.1.
  • Przekazany dokument XML może być kompletny lub zawierać tylko element RasterSymbolizer.
  • Pasma można wybierać według nazw lub indeksu w Earth Engine („1”, „2”, itd.).
  • Mechanizmy rozciągania kontrastu za pomocą histogramu i normalizacji kontrastu nie są obsługiwane w przypadku obrazów punktowych.
  • Wypełnienie jest brane pod uwagę tylko wtedy, gdy wynosi 0,0 (przezroczyste). Wartości niezerowej przejrzystości są traktowane jako całkowicie nieprzejrzyste.
  • Definicja OverlapBehavior jest obecnie ignorowana.
  • Mechanizm ShadedRelief nie jest obecnie obsługiwany.
  • Mechanizm ImageOutline nie jest obecnie obsługiwany.
  • Element Geometry jest ignorowany.
  • Jeśli zostanie zażądane wyrównanie histogramu lub normalizacja, obraz wyjściowy będzie zawierał metadane histogram_bandname.

miniatury,

Użyj metody ee.Image.getThumbURL(), aby wygenerować miniaturę PNG lub JPEG obiektu ee.Image. Wydrukowanie wyniku wyrażenia kończącego się wywołaniem funkcji getThumbURL() powoduje wydrukowanie adresu URL. Odwiedzenie adresu URL powoduje, że serwery Earth Engine generują na bieżąco żądaną miniaturę. Po zakończeniu przetwarzania obraz wyświetli się w przeglądarce. Można go pobrać, wybierając odpowiednie opcje w menu kontekstowym obrazu.

thumbnail_in_browser
Model wysokości cyfrowej SRTM wyświetlany jako miniatura PNG w przeglądarce.

Metoda getThumbURL() zawiera parametry opisane w tabeli parametrów wizualizacji powyżej. Dodatkowo przyjmuje opcjonalne argumenty dimensions, regioncrs, które kontrolują zakres przestrzenny, rozmiar i projekcję wyświetlania miniatury.

Dodatkowe parametry dla ee.Image.getThumbURL() z uwagą na format
Parametr Opis Typ
wymiary Wymiary miniatury w pikselach. Jeśli podano jedno całkowite, określa ono rozmiar większego wymiaru obrazu, a mniejszy wymiar jest proporcjonalnie skalowany. Domyślnie 512 pikseli dla większego wymiaru obrazu. Pojedyncza liczba całkowita lub ciąg znaków w formacie: 'SZEROKOŚĆxWYSOKOŚĆ'
region Region geoprzestrzenny obrazu do wyrenderowania. Domyślnie cały obraz lub granice podanej geometrii. GeoJSON lub dwuwymiarowa lista co najmniej 3 współrzędnych punktu definiujących pierścień liniowy
crs Projekcja docelowa, np. „EPSG:3857”. Domyślnie jest to WGS84 („EPSG:4326”). Ciąg znaków
format Określa format miniatury jako PNG lub JPEG. Domyślny format PNG jest implementowany jako RGBA, gdzie kanał alfa reprezentuje prawidłowe i nieprawidłowe piksele zdefiniowane przez mask() obrazu. Nieprawidłowe piksele są przezroczyste. Opcjonalny format JPEG jest implementowany jako RGB, gdzie nieprawidłowe piksele obrazu są wypełniane zerami w kanałach RGB. Ciąg znaków: „png” lub „jpg”.

Obraz jednopasmowy będzie domyślnie wyświetlany w szarościach, chyba że zostanie podany argument palette. Obraz wielopasmowy będzie domyślnie wyświetlany w kolorach RGB dla pierwszych trzech pasm, chyba że zostanie podany argument bands. Jeśli podano tylko 2 pasma, pierwsze zostanie zmapowane na czerwony, drugie na niebieski, a kanał zielony zostanie wypełniony zerami.

Poniżej znajdziesz kilka przykładów pokazujących różne kombinacje argumentów parametru getThumbURL(). Aby wyświetlić miniatury, kliknij adresy URL wydrukowane po uruchomieniu tego skryptu.

Edytor kodu (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);

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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