Eksportowanie obrazów

Obrazy z Earth Engine możesz eksportować w GeoTIFF lub TFRecord. Więcej opcji wyjściowych znajdziesz w sekcji Parametry konfiguracji.

Przykładowa konfiguracja

Zacznij od określenia danych obrazu, które zostaną wyeksportowane:

Edytor kodu (JavaScript)

// Load a landsat image and select three bands.
var landsat = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_123032_20140515')
  .select(['B4', 'B3', 'B2']);

// Create a geometry representing an export region.
var geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236]);

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Load a landsat image and select three bands.
landsat = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_123032_20140515').select(
    ['B4', 'B3', 'B2']
)

# Create a geometry representing an export region.
geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236])

Następnie określ parametry projekcji, które będą używane w kolejnych eksportach. Używamy parametru crs do określania układu współrzędnych, oraz parametru crsTransform do precyzyjnego określania siatki pikseli. Parametr crsTransform to lista parametrów z macierzy transformacji afinicznej w kolejności wierszowej [xScale, xShearing, xTranslation, yShearing, yScale, yTranslation]. Początek obrazu jest określany przez wartości xTranslation i yTranslation, a rozmiar piksela obrazu – przez wartości xScale i yScale. Zobacz przykłady macierzy afinicznych.

Edytor kodu (JavaScript)

// Retrieve the projection information from a band of the original image.
// Call getInfo() on the projection to request a client-side object containing
// the crs and transform information needed for the client-side Export function.
var projection = landsat.select('B2').projection().getInfo();

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Retrieve the projection information from a band of the original image.
# Call getInfo() on the projection to request a client-side object containing
# the crs and transform information needed for the client-side Export function.
projection = landsat.select('B2').projection().getInfo()

Ustawianie parametru scale

Aby ułatwić sobie pracę, możesz określić parametr scale, a Earth Engine obliczy za Ciebie parametr crsTransform. Jednak samo ustawienie skali obrazu nie określa początku projekcji i może spowodować przesunięcie obrazu względem innego obrazu o tym samym rozmiarze piksela.

Powodem potencjalnego przesunięcia jest to, że parametr scale służy do wypełniania wartości xScale i yScale parametru crsTransform, ale wartości xTranslation i yTranslation są obliczane tak, aby po podzieleniu przez odpowiednie wartości xScale i yScale reszta wynosiła zero. Te parametry określają siatkę pikseli, w której początek projekcji znajduje się w rogu piksela. Ta konwencja różni się od parametrów translacji używanych przez niektórych dostawców danych, którzy używają siatek przesuniętych względem początku projekcji. Na przykład obrazy Landsat udostępniane przez USGS używają parametrów translacji przesuniętych o 1/2 piksela od początku projekcji (przesunięcie o 15 m w przypadku pasm 30 m), a obrazy Sentinel-2 udostępniane przez ESA używają parametrów translacji wyrównanych z początkiem projekcji. Jeśli parametr crsTransform określony w eksporcie nie pasuje do parametru crsTransform oryginalnego obrazu, piksele wyjściowe zostaną ponownie próbkowane (domyślnie przy użyciu najbliższego sąsiada), co spowoduje przesunięcie wynikowego obrazu względem oryginalnego.

Podsumowując, jeśli chcesz dopasować piksele wyeksportowanego obrazu do konkretnego obrazu, użyj parametrów crs i crsTransform, aby mieć pełną kontrolę nad siatką.

na Dysk

Aby wyeksportować obraz na konto Dysku, użyj funkcji Export.image.toDrive(). Jeśli na przykład chcesz wyeksportować fragmenty obrazu Landsat, określ region do wyeksportowania, a następnie wywołaj funkcję Export.image.toDrive():

Edytor kodu (JavaScript)

// Export the image, specifying the CRS, transform, and region.
Export.image.toDrive({
  image: landsat,
  description: 'imageToDriveExample_transform',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry
});

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Export the image, specifying the CRS, transform, and region.
task = ee.batch.Export.image.toDrive(
    image=landsat,
    description='imageToDriveExample_transform',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
)
task.start()

Po uruchomieniu tego kodu na karcie Zadania w Edytorze kodu zostanie utworzone zadanie eksportu. Aby je rozpocząć, kliknij przycisk Uruchom obok zadania. (Więcej informacji o Menedżerze zadań znajdziesz w sekcji Edytor kodu kod). Obraz zostanie utworzony na Twoim koncie Dysku w określonym formacie fileFormat.

do Cloud Storage

Aby wyeksportować obraz do zasobnika Cloud Storage Google Cloud Storage, użyj funkcji Export.image.toCloudStorage(). Aby wyeksportować obraz Landsat z poprzedniego przykładu do Cloud Storage zamiast na Dysk, użyj tego kodu:

Edytor kodu (JavaScript)

// Export the image to Cloud Storage.
Export.image.toCloudStorage({
  image: landsat,
  description: 'imageToCloudExample',
  bucket: 'your-bucket-name',
  fileNamePrefix: 'exampleExport',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry
});

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Export the image to Cloud Storage.
task = ee.batch.Export.image.toCloudStorage(
    image=landsat,
    description='imageToCloudExample',
    bucket='your-bucket-name',
    fileNamePrefix='exampleExport',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
)
task.start()

Podobnie jak w przypadku eksportu na Dysk, eksport rozpocznij na karcie Zadania. Lokalizacja zasobnika Cloud Storage może mieć wpływ na wydajność i koszty przechowywania. Więcej informacji znajdziesz w artykule z odpowiedziami na najczęstsze pytania dotyczącym kwestii lokalizacji.

do komponentu

Aby wyeksportować obraz jako komponent w folderze komponentów Earth Engine, użyj funkcji Export.image.toAsset(). Aby zarządzać zasobami Earth Engine lub sprawdzić, ile limitu miejsca na dane wykorzystujesz, użyj Menedżera zasobów. Poniższy przykład pokazuje eksportowanie fragmentów obrazu Landsat przy użyciu różnych zasad tworzenia piramid dla tego samego pasma. Zasady tworzenia piramid określają, jak Earth Engine oblicza wersje komponentu o niższej rozdzielczości. Więcej informacji o tym, jak Earth Engine obsługuje wiele rozdzielczości, znajdziesz w dokumencie dotyczącym skali.

Edytor kodu (JavaScript)

// Get band 4 from the Landsat image, copy it.
var band4 = landsat.select('B4').rename('b4_mean')
  .addBands(landsat.select('B4').rename('b4_sample'))
  .addBands(landsat.select('B4').rename('b4_max'));

// Export the image to an Earth Engine asset.
Export.image.toAsset({
  image: band4,
  description: 'imageToAssetExample',
  assetId: 'exampleExport',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry,
  pyramidingPolicy: {
    'b4_mean': 'mean',
    'b4_sample': 'sample',
    'b4_max': 'max'
  }
});

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Get band 4 from the Landsat image, copy it.
band_4 = (
    landsat.select('B4')
    .rename('b4_mean')
    .addBands(landsat.select('B4').rename('b4_sample'))
    .addBands(landsat.select('B4').rename('b4_max'))
)

# Export the image to an Earth Engine asset.
task = ee.batch.Export.image.toAsset(
    image=band_4,
    description='imageToAssetExample',
    assetId='projects/your-project/assets/exampleExport',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
    pyramidingPolicy={
        'b4_mean': 'mean',
        'b4_sample': 'sample',
        'b4_max': 'max',
    },
)
task.start()

Możesz podać domyślne zasady tworzenia piramid dla każdego pasma, które nie zostało wyraźnie określone, używając klucza '.default'. Możesz też przekazać tylko klucz '.default'. Aby na przykład ustawić dla wszystkich pasm domyślne zasady tworzenia piramid „sample” , użyj {'.default': 'sample'}.

Parametry konfiguracji

Zwróć uwagę, że słownik parametrów konfiguracji przekazywany do funkcji Export.image zawiera parametr scale (w metrach) oraz region eksportu jako ee.Geometry. Wyeksportowany obraz będzie obejmował określony region z pikselami w określonej skali. Jeśli nie zostanie to wyraźnie określone, układ współrzędnych wyjściowych zostanie pobrany z pierwszego pasma eksportowanego obrazu.

Możesz też określić dimensions, crs lub crsTransform wyeksportowanego obrazu. Więcej informacji o parametrach crs i crsTransform znajdziesz w słowniku. Aby na przykład uzyskać blok pikseli dokładnie wyrównany z innym źródłem danych, określ parametry dimensions, crs i crsTransform. Aby uzyskać blok pikseli o predefiniowanym rozmiarze (np. miniaturę o wymiarach 256 x 256 pikseli), który obejmuje region, określ parametry dimensions i region.

Format wyjściowy obrazu możesz określić za pomocą parametru fileFormat ('GeoTIFF' domyślnie), jeśli miejscem docelowym nie jest toAsset().

Parametr formatOptions

Inne opcje konfiguracji są ustawiane za pomocą parametru formatOptions, który powinien być słownikiem z kluczami odpowiadającymi innym opcjom formatu, specyficznym dla każdego formatu fileFormat, jak opisano poniżej.

GeoTIFF

GeoTIFF zoptymalizowany pod kątem chmury

Aby wyeksportować GeoTIFF zoptymalizowany pod kątem chmury, przekaż literał JavaScript dla formatOptions w którym klucz cloudOptimized ma wartość true. Kontynuując poprzedni przykład:

Edytor kodu (JavaScript)

// Export a cloud-optimized GeoTIFF.
Export.image.toDrive({
  image: landsat,
  description: 'imageToCOGeoTiffExample',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry,
  fileFormat: 'GeoTIFF',
  formatOptions: {
    cloudOptimized: true
  }
});

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Export a cloud-optimized GeoTIFF.
task = ee.batch.Export.image.toDrive(
    image=landsat,
    description='imageToCOGeoTiffExample',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
    fileFormat='GeoTIFF',
    formatOptions={'cloudOptimized': True},
)
task.start()

GeoTIFF-y zoptymalizowane pod kątem chmury można ponownie wczytać z Cloud Storage do Image lub zarejestrować jako komponenty. Pełne specyfikacje i opcje eksportu znajdziesz w omówieniu GeoTIFF-ów zoptymalizowanych pod kątem chmury (COG).

Nodata

Wartość nodata GeoTIFF-u określ za pomocą klucza noData w parametrze formatOptions. Na przykład:

Edytor kodu (JavaScript)

// Set a nodata value and replace masked pixels around the image edge with it.
var noDataVal = -9999;
landsat = landsat.unmask(noDataVal);

Export.image.toDrive({
  image: landsat,
  description: 'imageNoDataExample',
  crs: projection.crs,
  scale: 2000,  // large scale for minimal demo
  region: landsat.geometry(),  // full image bounds
  fileFormat: 'GeoTIFF',
  formatOptions: {
    noData: noDataVal,
  }
});

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

# Set a nodata value and replace masked pixels around the image edge with it.
no_data_val = -9999
landsat = landsat.unmask(no_data_val)

task = ee.batch.Export.image.toDrive(
    image=landsat,
    description='imageNoDataExample',
    crs=projection['crs'],
    scale=2000,  # large scale for minimal demo
    region=landsat.geometry(),  # full image bounds
    fileFormat='GeoTIFF',
    formatOptions={'noData': no_data_val},
)
task.start()

Pamiętaj, że wartość nodata powinna mieścić się w prawidłowym zakresie dla parametru PixelType obrazu. Wartość PixelType możesz sprawdzić, drukując metadane obrazu i sprawdzając właściwość data_type pierwszego pasma. Możesz też ustawić parametr PixelType obrazu, rzutując dane na określony typ, np. za pomocą metod obrazu toShort() lub toInt().

TFRecord

Zobacz stronę formatu danych TFRecord.

maxPixels

Parametr maxPixels ma zapobiegać przypadkowemu tworzeniu bardzo dużych eksportów. Jeśli wartość domyślna jest zbyt niska dla docelowego obrazu wyjściowego, możesz zwiększyć wartość parametru maxPixels. Na przykład:

Export.image.toDrive({
  image: landsat,
  description: 'maxPixelsExample',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry,
  maxPixels: 1e9
});

Eksportowanie dużych plików

Jeśli obraz wyjściowy jest duży, zostanie wyeksportowany jako kilka plików. Jeśli eksportujesz do GeoTIFF-ów, obraz jest dzielony na kafelki. Nazwa pliku każdego kafelka będzie miała postać baseFilename-yMin-xMin, gdzie xMin i yMin to współrzędne każdego kafelka w obrębie ogólnej ramki ograniczającej wyeksportowanego obrazu.

Jeśli eksportujesz do TFRecord, do plików zostaną dodane sufiksy -00000, -00001,... -0000N dla N+1 plików. Zachowanie tej kolejności jest ważne, jeśli zamierzasz przeprowadzić wnioskowanie na podstawie plików i przesłać prognozy z powrotem do Earth Engine jako obraz. Szczegóły znajdziesz w artykule Przesyłanie obrazów jako plików TFRecord files.

Eksportowanie obrazów w takiej postaci, w jakiej są wyświetlane w Edytorze kodu

Aby wyeksportować obrazy w takiej postaci, w jakiej są renderowane na ekranie w Earth Engine, utwórz obrazy wizualizacji zgodnie z opisem w sekcjach Obrazy wizualizacji oraz Łączenie i tworzenie mozaik. Ponieważ Edytor kodu używa układu współrzędnych 'EPSG:3857' CRS, określ układ współrzędnych 'EPSG:3857' w eksporcie, aby uzyskać obraz w tej samej projekcji co obraz wyświetlany na mapie w Edytorze kodu. Szczegółowe informacje o określaniu rozdzielczości i układu współrzędnych danych wyjściowych znajdziesz w sekcji Konfigurowanie eksportu obrazów.