Najczęstsze pytania

Pytania ogólne

Mam problem, potrzebuję pomocy.

Opublikuj pytanie zgodnie z tym przewodnikiem, podając jak najwięcej informacji (zobacz przewodnik Stack Overflow dotyczący zadawania dobrych pytań). Zwykle oznacza to, że:

  • wysyłając link do skryptu w edytorze kodu (kliknij przycisk „Pobierz link”, aby go uzyskać);

  • udostępnianie zasobów potrzebnych do uruchomienia skryptu,

  • w przypadku nieudanych zadań wsadowych zgłoś identyfikator nieudanego zadania. Identyfikatory zadań wyglądają tak: 4C25GIJBMB52PXTEJTF4JLGL. Znajdziesz je na karcie Zadanie w edytorze kodu. Więcej informacji

Gdzie mogę przeczytać o architekturze Earth Engine?

Zapoznaj się z tym artykułem: Gorelick i in. 2017.

Zobacz strony EDU i Materiały szkoleniowe.

Zapoznaj się z tym bezpłatnym kursem EE autorstwa Ujavala Gandhiego, który zawiera film z wprowadzeniem do teledetekcji.

Programowanie w Earth Engine

Jakie są typowe błędy kodowania?

Zapoznaj się z przewodnikiem po debugowaniu.

Dlaczego pojawia się błąd „... nie jest funkcją”?

Ten błąd występuje, gdy Earth Engine nie może znaleźć wywołanej metody. Sprawdź te typowe przyczyny:

Pisownia lub wielkość liter: w metodach wielkość liter ma znaczenie. Sprawdź pisownię w dokumentacji API.

Error: img.normalizedDiff(...) -> Correct: img.normalizedDifference(...)

Brak rzutowania typu: wartości zwracane przez funkcje takie jak .get() są ogólnymi instancjami ee.ComputedObject i muszą być rzutowane jawnie. Zobacz Rzutowanie nieznanego typu obiektu.

Error: dict.get('val').add(5) -> Correct: ee.Number(dict.get('val')).add(5)

Mieszanie metod klienta i serwera: upewnij się, że nie używasz standardowych metod JavaScriptu ani Pythona (takich jak .push() lub .append()) w obiektach Earth Engine. Zobacz Unikanie mieszania funkcji klienta i serwera.

Error: list.push(4) or list.append(4) -> Correct: list.add(4)

Niedostępne metody: jeśli obiekt jest prawidłowo wpisany, a metoda istnieje w dokumentacji lub działała wcześniej, ale teraz nie działa, zgłoś błąd.

Dlaczego nie mogę używać podstawowych działań matematycznych, takich jak ee.Image("image") * 2?

W EE nie należy mieszać obiektów ani operacji po stronie serwera i po stronie klienta. Wszystkie operacje na obiektach EE są wykonywane po stronie serwera. Żadne obliczenia po stronie klienta nie będą działać zgodnie z oczekiwaniami. Więcej informacji znajdziesz na tej stronie.

Jak mogę używać pętli for lub instrukcji if/else?

Programowanie w Earth Engine odbywa się przy użyciu języka funkcyjnego, więc pętle i operacje warunkowe powinny być wyrażane za pomocą równoważnych pojęć, takich jak map lub filter. Więcej informacji znajdziesz na tej stronie.

Jak wyświetlać etykiety tekstowe na obrazie lub filmie?

Nie ma wbudowanej obsługi etykiet tekstowych, ale możesz:

Czy mogę używać standardowych palet kolorów?

Użyj zewnętrznego pakietu JS ee-palettes.

Jak utworzyć własną witrynę korzystającą z Earth Engine?

W przypadku podstawowych aplikacji używaj aplikacji Earth Engine. W bardziej złożonych przypadkach możesz tworzyć aplikacje App Engine oparte na EE.

Jak działają identyfikatory map?

Identyfikatory map (w interfejsie API nazywane mapid) to klucze, które umożliwiają klientom pobieranie kafelków mapy. Każdy identyfikator to hasz utworzony przez podanie wyrażenia obrazu do punktu końcowego getMapId. Wynikowe identyfikatory to klucze, które wskazują zarówno wyrażenie obrazu, jak i dane logowania użytkownika, które zostaną użyte do wygenerowania kafelków na późniejszym etapie.

Żądanie kafelków mapy wymaga podania lokalizacji kafelka (x, y, zoom) oraz mapid (klucza do obrazu i danych logowania). Tego samego identyfikatora można używać do wczytywania wielu kafelków mapy. Nie ma limitów dotyczących ponownego użycia kluczy mapid, ale wygasają one po kilku godzinach. Nie podajemy konkretnych informacji o tym, jak długo są one przechowywane, ale każdy napisany przez Ciebie kod powinien być odporny na wygaśnięcie identyfikatora.

Tworzenie tych identyfikatorów wiąże się z przechowywaniem niewielkiej ilości danych i weryfikacją danych logowania, dlatego najlepiej jest używać ich ponownie tak długo, jak to możliwe. Nie ma limitu interfejsu API powiązanego konkretnie z punktem końcowym getMapId, ale każdy przepływ pracy, który obejmuje tworzenie obiektów mapid z częstotliwością zbliżoną do częstotliwości pobierania kafelków, prawdopodobnie działa nieprawidłowo. Earth Engine nie ma punktu końcowego interfejsu API do usuwania, wyświetlania ani zarządzania tymi identyfikatorami, ponieważ są to zasoby tymczasowe.

Dlaczego ee.Algorithms.If() drukuje zarówno przypadek prawda, jak i fałsz?

function a() { print("true"); }
function b() { print("false"); }
// Prints 'true' and 'false'.
ee.Algorithms.If(true, a(), b());

Algorytm If() działa tak samo jak każdy inny algorytm w Earth Engine, ponieważ wszystkie jego argumenty muszą zostać ocenione, zanim sam algorytm będzie mógł zostać uruchomiony. Algorytm otrzymuje wyniki trueCase i falseCase, a następnie wybiera i zwraca jeden z nich na podstawie argumentu condition. Obie ścieżki muszą jednak zostać wykonane, aby te wartości zostały przekazane do algorytmu.

Pojawia się błąd „Rozmiar ładunku żądania przekracza limit”

Próbujesz wysłać do Earth Engine bardzo duże żądanie. Zwykle dzieje się tak, gdy kod używa wielu pętli „for” po stronie klienta lub tworzy kolekcję FeatureCollection z wielu obiektów geometrycznych. W tym drugim przypadku zamiast tworzyć takie geometrie w skrypcie, wygeneruj plik CSV, który je zawiera, i prześlij go do zasobu tabeli.

Jaka jest różnica między ee.Image.clip() a ee.Filter.bounds()?

Zobacz ten wątek na GIS Stack Exchange. Funkcja ee.Image.clip() maskuje piksele, które nie przecinają danego obiektu ee.Geometry lub ee.Feature, dzięki czemu są przezroczyste w wizualizacjach i wykluczone z obliczeń. Można to sobie wyobrazić jako odcinanie pikseli od obrazu.

Funkcja ee.Filter.bounds() odfiltrowuje obiekty ee.Image z ee.ImageCollection na podstawie przecięcia obrazu z ee.Geometry lub ee.Feature. Służy do ograniczania zakresu analizy tylko do obrazów, które przecinają dany region, co pomaga optymalizować wyrażenia.

Jak przekonwertować piksele obrazu na kolekcje obiektów, z jednym obiektem na piksel?

Użyj funkcji ee.Image.sample(). Przykłady użycia znajdziesz na stronie z dokumentacją interfejsu API funkcji.

Jaka jest różnica między ee.ImageCollection.merge() a ee.ImageCollection.combine()?

Funkcja ee.ImageCollection.merge() scala wszystkie obrazy z 2 kolekcji w jedną kolekcję, niezależnie od tego, czy ich obrazy mają zbieżne pasma, metadane, CRS czy skalę. Jest to połączenie 2 kolekcji. Metoda combine() łączy pasma pasujących obrazów z 2 kolekcji w jedną kolekcję. Pasujące obrazy mają ten sam identyfikator (właściwość system:index). Jest to wewnętrzne połączenie 2 kolekcji na podstawie identyfikatora obrazu, w którym pasma z pasujących obrazów są łączone. W przypadku pasujących obrazów pasma z obrazu dodatkowego są dołączane do obrazu głównego (zastępowanie jest opcjonalne). Jeśli nie ma pasujących obrazów, zwracana jest pusta kolekcja.

Jak filtrować kolekcje obrazów według wielu przedziałów dat?

Zobacz ten wątek na GIS Stack Exchange. Możesz merge() kilka kolekcji lub użyć ee.Filter.or().

Jak utworzyć ramkę ograniczającą wokół danego punktu?

// Buffer the point by a chosen radius and then get the bounding box.
var LNG = -117.298;
var LAT = 45.162;
var point = ee.Geometry.Point([LNG, LAT]);
var buffer = point.buffer(30000); // half of box width as buffer input
var box = buffer.bounds(); // draw a bounding box around the buffered point
Map.centerObject(box);
Map.addLayer(point);
Map.addLayer(box);

// Map the buffer and bounds procedure over a point feature collection.
var pointCol = ee.FeatureCollection([
  ee.Feature(ee.Geometry.Point([LNG + 1, LAT])),
  ee.Feature(ee.Geometry.Point([LNG - 1, LAT]))
]);
var boxCol = pointCol.map(function(feature) {
  var box = feature.buffer(30000).bounds();
  return feature.setGeometry(box.geometry());
});
Map.addLayer(boxCol);

Data Catalog

Can you add dataset X?

Zgłoś błąd dotyczący prośby o zbiór danych zgodnie z przewodnikiem po prośbach o zbiór danych.

Możesz też przesłać dane do folderu domowego Earth Engine. Zobacz Importowanie danych rastrowych i Importowanie danych tabeli.

Istniejący zbiór danych ma nową wersję.

Zgłoś błąd zbioru danych zgodnie z przewodnikiem po prośbach o zbiory danych i wskaż, że prosisz o aktualizację zbioru danych.

Istniejący zbiór danych nie jest aktualizowany lub brakuje w nim zasobów.

Przed zgłoszeniem problemu sprawdź, czy wybrane zasoby rzeczywiście istnieją w witrynie dostawcy zbioru danych. Więcej informacji znajdziesz w przewodniku po brakujących obrazach.

Jeśli szukasz zasobu, filtrując ImageCollection, upewnij się, że filtry nie są zbyt restrykcyjne.

W szczególności pamiętaj, że:

  • Dane Sentinel-2 SR (dane poziomu 2) nie zostały wygenerowane przez ESA dla wczesnych scen poziomu 1.

  • Landsat nie obejmuje całego świata przed 2000 r.

Istniejący zbiór danych zawiera nieprawidłowe wartości.

Opublikuj post na forum dla deweloperów. Dołącz skrypt, który powiększa komponent do oryginalnej rozdzielczości i wyraźnie pokazuje, które wartości są nieprawidłowe. Wyjaśnij, gdzie dokładnie zauważyłeś(-aś) alternatywną wartość.

Gdzie jeszcze mogę zapytać o zbiory danych?

Jeśli masz pytania dotyczące zbiorów danych NASA, odwiedź forum NASA Earth Data.

Jeśli masz pytania dotyczące zestawów narzędzi działających na zbiorach danych Copernicus, odwiedź fora S1, S2 i S3.

Jak duży jest katalog EE?

W październiku 2023 r. katalog zawierał ponad 1000 zbiorów danych. Rozmiar na dysku przekracza 90 petabajtów (po uwzględnieniu kompresji bezstratnej).

Jak często aktualizowane są dane w EE?

Zwykle wszystkie bieżące zbiory danych są aktualizowane co najmniej raz dziennie (choć nie wszystkie takie zbiory danych zawierają nowe dane każdego dnia). Niektóre zbiory danych są aktualizowane kilka razy dziennie. Nie ma jednak zasady, która zapewniałaby obecność najnowszych zasobów w katalogu.

Jak wyświetlić zawartość katalogu EE za pomocą kodu?

Lista zbiorów danych jest eksportowana w formacie STAC do zasobnika Google Cloud Storage gs://earthengine-stac. Plik wpisu to catalog.json.

Czy mogę używać danych lub zdjęć z Map Google do analizy?

Google nie licencjonuje ani nie sprzedaje danych mapy podstawowej do analizy.

Jak sprawdzić datę przetworzenia zasobu?

Właściwość zasobu 'system:version' to sygnatura czasowa pozyskania sformatowana jako mikrosekundy od epoki uniksowej. Oto przykład, który konwertuje sygnaturę czasową pozyskania obrazu Landsat na format zrozumiały dla człowieka.

var image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508');
print('Ingest date', ee.Date(image.getNumber('system:version').divide(1000)));

Czy katalog Earth Engine zawiera metadane JSON-LD?

Tak, metadane JSON-LD są umieszczone na stronach HTML katalogu. Na przykład strona Sentinel-2 zawiera ten blok:

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [{
      "@type": "ListItem",
      "position": 1,
      "name": "Earth Engine Data Catalog",
      "item": "https://developers.google.com/earth-engine/datasets"
    },{
      "@type": "ListItem",
      "position": 2,
      "name": "Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-1C",
      "item": "https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_HARMONIZED"
    }]
  }
  </script>

Landsat

Jak jest zaimplementowany algorytm simpleComposite?

Implementacja po stronie serwera jest odpowiednikiem tego kodu JavaScript.

Jak mogę utworzyć kompozycje bez chmur na podstawie danych o współczynniku odbicia powierzchni Landsat?

Dane Landsat Level 2 (współczynnik odbicia powierzchni) mają kilka pasm jakości, których można użyć do maskowania chmur i innych niepożądanych artefaktów obrazu. Przykład użycia tych pasm do przetwarzania obrazów Landsat 8 SR i tworzenia kompozytu bez chmur znajdziesz w tym poście na GIS Stack Exchange. Ta sama procedura jest używana do tworzenia kompozytu bez chmur do wykorzystania w przykładach klasyfikacji nadzorowanej w Przewodniku dla programistów.

Czy konieczna jest harmonizacja współczynnika odbicia powierzchni Landsat między czujnikami?

Roy i in., 2016 included an analysis of reflectance differences between Landsat 7-8 TOA and surface reflectance. Opublikowali współczynniki OLS i RMA, aby czytelnicy mogli przekształcać wartości współczynnika odbicia danych z jednego czujnika na inny. Ostatnie zdanie artykułu brzmi: „Chociaż różnice między czujnikami są niewielkie, mogą mieć znaczący wpływ w zależności od zastosowania danych Landsat”. Analiza ta została jednak przeprowadzona na podstawie danych sprzed rozpoczęcia zbierania danych.

Ulepszenia wprowadzone podczas ponownego przetwarzania kolekcji 1 i 2 mogą wpływać na relacje między czujnikami, ale według naszej wiedzy nie przeprowadzono analiz podobnych do Roy i in. (2016) w przypadku danych z kolekcji 1 lub 2. Pomimo braku formalnej analizy wydaje się, że wśród wpływowych użytkowników Landsat panuje ogólna zgoda co do tego, że w przypadku danych Collection 2, Level 2 (współczynnik odbicia powierzchni) nie jest wymagana żadna korekta. Na przykład w odpowiedzi na pytanie dotyczące potrzeby harmonizacji Collection 2, Level 2 Mike Wulder z zespołu Landsat Science Team zauważył, że w zależności od charakteru interesującego zastosowania (w tym mapowania pokrycia terenu i wykrywania zmian) produkty Collection 2 dotyczące współczynnika odbicia powierzchni są bardzo odpowiednie i niezawodne, bez konieczności dostosowywania czujników.

Jak zamaskować chmury i ich cienie na zdjęciach MSS?

Zewnętrzny moduł msslib do edytora kodu JavaScript zawiera implementację algorytmu MSScvm, a także inne przydatne funkcje do przeglądania i przygotowywania danych MSS.

Zarządzanie danymi

Kto jest właścicielem przesyłanych przeze mnie danych?

Zgodnie z Warunkami korzystania z usługi Earth Engine klienci są właścicielami danych, które przesyłają do Earth Engine.

Nie mogę przesłać danych.

Sprawdź stan zadania przesyłania w panelu Lista zadań w prawym górnym rogu edytora kodu. Możesz też wyświetlić stronę zadania.

Jeśli nie ma zadania, prawdopodobnie próbowano przesłać plik za pomocą edytora kodu, ale z powodu problemu z siecią przesyłanie pliku nie zostało zakończone, więc zadanie nie zostało utworzone. Spróbuj użyć innej przeglądarki lub innego komputera.

Jeśli zadanie się nie powiedzie, sprawdź wyświetlany błąd. Jeśli nie ma konkretnego komunikatu o błędzie, najpierw sprawdź, czy plik nie jest uszkodzony, uruchamiając gdalinfo w przypadku plików rastrowych lub ogr2ogr w przypadku plików wektorowych. Te polecenia spróbują odczytać wszystkie dane z plików źródłowych i wyświetlą błędy, jeśli pliki są uszkodzone.

Przykładowe wywołanie gdalinfo:

gdalinfo -mm -stats -checksum file.tif

Przykładowe wywołanie ogr2ogr, które przekonwertuje in.shp na out.csv:

ogr2ogr -lco GEOMETRY=AS_WKT -f CSV out.csv in.shp

Jeśli plik wygląda na prawidłowy, opublikuj identyfikator nieudanego zadania jako tekst (nie jako zrzut ekranu) na liście adresowej dla deweloperów. Identyfikatory zadań mają ten format: 4C25GIJBMB52PXTEJTF4JLGL. Jeśli to możliwe, udostępnij plik źródłowy do publicznego odczytu. Jeśli jest to plik prywatny, udostępnij go tylko użytkownikowi earthengine@google.com, jeśli chcesz, aby zespół Earth Engine go sprawdził. Jeśli nie możesz udostępnić pliku źródłowego, podaj przynajmniej dane wyjściowe polecenia gdalinfo -mm -stats -checksum.

Jeśli Earth Engine nie obsługuje określonego odwzorowania, przed przesłaniem danych musisz je ponownie odwzorować, np. za pomocą gdalwarp.

How do I upload a file in NetCDF or another unsupported raster format?

Do Earth Engine można przesyłać tylko pliki GeoTIFF. Inne formaty zgodne z GDAL można przekonwertować na GeoTIFF za pomocą gdal_translate. Przykład:

gdal_translate -co COMPRESS=DEFLATE file.nc file.tif

Pamiętaj, że niektóre pliki NetCDF lub HDF składają się z wielu podzbiorów danych, które można wykryć za pomocą gdalinfo. W tym przypadku polecenie gdal_translate będzie wyglądać tak (zwróć uwagę na ścieżkę w cudzysłowie):

gdal_translate HDF4_EOS:EOS_GRID:"/tmp/MCD12Q1.A2001001.h00v08.005.2011055224312.hdf":MOD12Q1:Land_Cover_Type_1 file.tif

Pliki NetCDF czasami nie zawierają projekcji rozpoznawanej przez GDAL. W takim przypadku musisz ustawić rzut i zakres przestrzenny w wierszu poleceń gdal_translate. Przykład:

gdal_translate -a_srs EPSG:4326 -a_ullr -180 90 180 -90 file.nc file.tid

Jakich algorytmów kompresji mogę używać w przypadku przesyłanych plików GeoTIFF?

Pliki GeoTIFF można przesyłać po skompresowaniu za pomocą DEFLATE, JPEG, JPEG-XL/JXL, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WEBP lub ZSTD. Pliki COG, które Earth Engine odczytuje na miejscu (za pomocą ee.Image.loadGeoTIFF() lub jako zasoby oparte na COG), mogą używać kompresji DEFLATE, JPEG, LZW, PACKBITS, ZSTD lub nie używać kompresji (patrz Sprawdzone metody dotyczące COG). ZSTD to dobry wybór, ponieważ szybko dekompresuje, a jednocześnie zapewnia dobrą kompresję większości obrazów.

Aby zastosować kompresję ZSTD podczas korzystania z gdal_translate, dodaj te opcje. Jeśli dane zawierają wartości zmiennoprzecinkowe, zmień PREDICTOR na 3. (Jeśli chcesz zarejestrować pliki jako COG zamiast je przesyłać, zapoznaj się z przewodnikiem po rejestracji COG).

gdal_translate in.tif out.tif \
  -co BIGTIFF=YES \
  -co TILED=YES \
  -co BLOCKXSIZE=512 \
  -co BLOCKYSIZE=512 \
  -co COMPRESS=ZSTD \
  -co PREDICTOR=2 \
  -co ZSTD_LEVEL=16 \
  -co INTERLEAVE=BAND \
  -co NUM_THREADS=ALL_CPUS

Pozyskiwanie rastra trwa od kilku dni i nie zostało zakończone.

Za pomocą gdalinfo sprawdź, czy plik ma ustawioną tę opcję GDAL: INTERLEAVE=PIXEL. W przypadku plików z tą opcją i wieloma pasmami przetwarzanie może nigdy się nie zakończyć, ponieważ układ takich plików bardzo spowalnia odczyt.

Przed przesłaniem spróbuj przekonwertować takie pliki na układ z przeplotem pasm:

gdal_translate -co "INTERLEAVE=BAND" src.tif dst.tif

Dotyczy to pozyskiwania danych. Zasoby COG obsługują oba rodzaje przeplotu (patrz pliki jednopasmowe i wielopasmowe).

Przesłane przeze mnie rastry nie pasują do mapy podstawowej.

Jeśli dane są nieco przesunięte względem mapy podstawowej, odwzorowanie prawdopodobnie ma nieprawidłowy układ odniesienia (założenie dotyczące kształtu Ziemi). Dzieje się tak najczęściej w przypadku projekcji sinusoidalnej, której nie można w pełni zakodować w metadanych GDAL. Jeśli wiesz, jakie powinno być docelowe odwzorowanie (np. SR-ORG:6974 w przypadku plików korzystających z odwzorowania sinusoidalnego MODIS), ustaw flagę --crs podczas przesyłania z wiersza poleceń lub pole crs w pliku manifestu przesyłania.

Jeśli dane wydają się mocno zniekształcone lub znajdują się w zupełnie niewłaściwym miejscu, prawdopodobnie odwzorowanie lub przekształcenie afiniczne jest nieprawidłowe.

Mój raster wyświetla się tylko nad półkulą wschodnią.

Prawdopodobnie przesłano globalny raster, który obejmuje zakres długości geograficznej [0, 360]. Earth Engine wymaga jednak, aby rastry mieściły się w zakresie [-180, 180]. Przed przetworzeniem zamień lewą i prawą połowę rastra. Zapoznaj się z tymi sugestiami GIS Stack Exchange.

Dlaczego przetworzony obraz klasyfikacji wygląda na nakrapiany?

Prawdopodobnie użyto domyślnej zasady piramidy MEAN. W przypadku obrazów klasyfikacyjnych należy używać zasady piramidy MODE. W przypadku obrazów QA/maski bitowej należy używać zasady piramidy SAMPLE.

Pojawia się ten błąd: No data value -128.0 cannot be applied to band #0 of type Short<0, 255>.

GDAL nie może traktować pasm jednobajtowych jako zawierających liczby całkowite ze znakiem, więc odczytuje je jako liczby całkowite bez znaku. Byłoby to sprzeczne z ujemnymi wartościami braku danych.

Jeśli wartości są liczbami całkowitymi ze znakiem, użyj przesyłania pliku manifestu i dodaj to do sekcji zestawu kafelków zawierającej Twój plik: data_type: "INT8"

Jeśli wartości są liczbami całkowitymi bez znaku, plik ma nieprawidłową wartość nodata. Możesz ją zastąpić podczas przesyłania prawidłową wartością danych (lub wartością, która nigdy nie występuje, jeśli taka istnieje). Możesz też użyć gdal_translate -a_nodata, aby zmienić wartość nodata, lub gdal_edit.py -unsetnodata, aby ją usunąć.

Jak przesłać plik w formacie GeoJSON lub innym nieobsługiwanym formacie wektorowym?

Użyj ogr2ogr, aby przekonwertować formaty zgodne z OGR na CSV lub SHP. Przykład:

or2ogr -f "ESRI Shapefile" file.shp file.kml

Pamiętaj, że w przesłanych plikach CSV kolumna geometrii może zawierać GeoJSON.

Chcę przesłać dane za pomocą Pythona lub przesłać wiele plików jednocześnie.

Użyj przesyłania z wiersza poleceń. Takie przesyłanie wymaga, aby pliki źródłowe zostały najpierw umieszczone w zasobniku GCS (Google Cloud Storage). Korzystanie z GCS jest bezpłatne, jeśli nie przekroczysz limitów poziomu bezpłatnego – zobacz stronę z cenami.

Chcę przesłać dużą mozaikę rastrową podzieloną na wiele kafelków.

Jeśli wszystkie pliki mają tę samą projekcję i rozmiar piksela, po prostu prześlij je razem do tego samego zasobu – zostaną automatycznie połączone w mozaikę.

Jeśli pliki mają różne odwzorowania lub rozmiary pikseli, nie można ich połączyć w jeden zasób rastrowy. Zamiast tego prześlij każdy kafelek jako osobny zasób do tego samego ImageCollection, który można połączyć w mozaikę za pomocą ImageCollection.mosaic().

Próbuję przesłać mozaikę i pojawiają się błędy dotyczące niedopasowanych kafelków.

Kafelki mozaik rastrowych Earth Engine muszą mieć tę samą projekcję i rozmiar piksela. Dodatkowo kafelki muszą być dokładnie wyrównane do granic pikseli.

Próbuję przesłać plik z zasobnika GCS, ale Earth Engine nie może go znaleźć.

Być może do przesyłania do GCS i połączenia z Earth Engine użyto różnych kont Google. Upewnij się, że plik GCS jest możliwy do odczytania przez konto, którego używasz do łączenia się z Earth Engine. Jeśli wielokrotne logowanie w przeglądarce powoduje problemy, połącz się z Earth Engine w oknie przeglądarki incognito.

Chcę wyeksportować wiele zasobów naraz.

Każdy obraz musisz wyeksportować osobno.

Chcę przenieść lub usunąć Folder lub ImageCollection za pomocą jednego polecenia.

earthengine rm -r usuwa folder lub kolekcję i całą zawartość, ale po jednym zasobie naraz, więc usunięcie dużej kolekcji może potrwać kilka godzin. Aby przyspieszyć ten proces, usuń elementy podrzędne równolegle za pomocą skryptu, a następnie usuń element nadrzędny (patrz Praca z dużymi kolekcjami). To samo podejście sprawdza się w przypadku każdej płaskiej kolekcji lub folderu. Folder zawierający inne foldery lub kolekcje musi zostać opróżniony od dołu do góry, ponieważ kontenera nie można usunąć, dopóki nie jest pusty. Aby przenieść, użyj mv w ten sam sposób.

Chcę uzyskać bezpośredni dostęp do danych Earth Engine spoza EE.

QGIS ma wtyczkę Earth Engine.

GDAL ma sterownik Earth Engine.

Inne systemy mogą korzystać z interfejsu API typu REST EE.

Chcę zaktualizować część zasobu Earth Engine bez ponownego pozyskiwania go w całości.

Nie można aktualizować danych rastrowych ani wektorowych przesłanych do EE. Można aktualizować tylko właściwości metadanych zasobu. Wyjątkiem są zasoby COG, które można wskazać w zaktualizowanym pliku Cloud Storage, rejestrując je ponownie z włączonym zastępowaniem.

Tracę dostęp do konta. Co mam zrobić z zasobami?

Jeśli zasady pierwotnego konta zezwalają na przenoszenie danych, udostępnij zasoby innemu kontu, a następnie skopiuj je, aby stały się własnością nowego konta. Jeśli chcesz przenieść wiele zasobów, użyj narzędzia do kopiowania w wierszu poleceń.

Jeśli konto zostanie usunięte, zasoby, które do niego należą, nie będą już dostępne.

Wyeksportowany obraz jest w niewłaściwym miejscu.

W przypadku niektórych odwzorowań, takich jak sinusoidalne lub stożkowe, pliki GeoTIFF czasami nie mogą przechowywać wszystkich niezbędnych parametrów odwzorowania. W takim przypadku wyeksportowany plik będzie wyświetlany w niewłaściwym miejscu w narzędziach GIS na komputerze lub po ponownym zaimportowaniu do EE.

Aby rozwiązać ten problem, określ parametr eksportu crs, który dobrze współpracuje z plikami GeoTIFF – na przykład użyj kodu EPSG dla strefy UTM zawierającej interesujący Cię obszar.

Wyeksportowane zasoby kolekcji obiektów nie zachowują ustawionych przeze mnie właściwości.

Żadne funkcje Export.table.* nie zachowują właściwości na poziomie tabeli w danych wyjściowych. Wiele formatów wyjściowych (np. CSV, GeoJSON) nie obsługuje takich metadanych. Funkcja Export.table.toAsset może obsługiwać właściwości na poziomie tabeli, ale obecnie tego nie robi.

Tabele eksportowane na Dysk w formacie CSV są konwertowane na format XLSX.

W zależności od ustawień Dysku Google tabele CSV eksportowane z Earth Engine mogą być konwertowane na pliki XLSX z niezamierzonymi skutkami, takimi jak konwersje typów danych. Aby zmienić zachowanie podczas kolejnych eksportów, wykonaj te czynności.

  1. W Dysku Google w internecie kliknij ikonę ustawień w prawym górnym rogu.
  2. Kliknij Ustawienia.
  3. Przewiń do opcji „Konwertuj przesyłane pliki na format edytora Dokumentów Google” i odznacz ją.

pliki GeoTIFF zoptymalizowane pod kątem chmury (COG),

Więcej informacji znajdziesz w omówieniu COG i przewodniku po rejestracji COG.

Udostępniłem(-am) zasób oparty na COG, ale moi współpracownicy otrzymują błąd uprawnień.

Zasób oparty na COG to wskaźnik do plików w zasobniku Cloud Storage, więc współpracownicy muszą mieć uprawnienia do odczytu zarówno zasobu Earth Engine, jak i zasobnika. W zasobniku przyznaj im role Wyświetlający obiekty Cloud Storage i Wyświetlający zasobnik Cloud Storage. Błąd uprawnień dotyczący zasobu, który w innym przypadku jest widoczny, zwykle oznacza, że brakuje jednej z tych ról. Zobacz konfigurowanie uprawnień.

W jakiej lokalizacji zasobnika Cloud Storage należy przechowywać zasoby COG?

Obsługiwanych jest tylko kilka lokalizacji w Stanach Zjednoczonych, a Earth Engine odrzuca żądania rejestracji i odczytu dotyczące zasobników w innych lokalizacjach. Zobacz obsługiwane lokalizacje zasobników.

Zastąpiono plik COG w Cloud Storage. Dlaczego komponent nie wczytuje się lub nadal wyświetla stare dane?

Gdy rejestrujesz COG, Earth Engine przypina generowanie (wersję) obiektu pliku, więc zastąpienie pliku w miejscu nie powoduje aktualizacji zasobu. Ponownie zarejestruj zasób o tej samej nazwie i włącz opcję zastępowania. Nie musisz go najpierw usuwać. Zobacz aktualizowanie, zastępowanie i usuwanie zasobów COG.

Jak sprawdzić, do której wersji pliku odwołuje się mój zasób obsługiwany przez COG?

Metadane zasobu (ee.data.getAsset()) pokazują przypiętą generację jako sufiks w identyfikatorze URI pliku. Zobacz generacje obiektów.

Co się stanie, jeśli usunę plik COG w Cloud Storage, ale nie zasób Earth Engine, lub odwrotnie?

Są niezależne. Usunięcie zasobu Earth Engine nie wpływa na pliki w Cloud Storage, a usunięcie pliku nie wpływa na zasób, ale zwykle sprawia, że jego piksele są nieczytelne. Zobacz niezależne cykle życia.

Jaki jest najszybszy sposób na usunięcie lub zastąpienie dużego pliku ImageCollection opartego na COG?

W interfejsie Earth Engine API nie ma funkcji usuwania zbiorczego ani rekurencyjnego, a polecenie earthengine rm -r usuwa zasoby pojedynczo. Jeśli zastępujesz obrazy, zarejestruj je ponownie z włączonym zastępowaniem, zamiast je usuwać. Jeśli usuwasz obrazy, wykonaj to równolegle za pomocą skryptu. Sposób i skrypt znajdziesz w sekcji Praca z dużymi zbiorami.

Dlaczego moja rejestracja COG nie pojawia się na karcie Zadania?

Rejestrowanie pliku COG to synchroniczne wywołanie interfejsu API, które indeksuje tylko metadane pliku, a nie zadanie zbiorczego pozyskiwania, więc nie tworzy zadania. Zasób będzie dostępny na karcie Zasoby, gdy tylko wywołanie zwróci wynik. Zobacz Przesyłanie prośby o rejestrację.

Czy mogę połączyć kilka plików COG w jeden zasób Earth Engine?

Tylko wtedy, gdy każdy plik zawiera różne pasma tej samej sceny: wymień każdy plik jako osobny zbiór kafelków w pliku manifestu i zmapuj pasma na zbiory kafelków. Nie możesz utworzyć mozaiki z plików przylegających przestrzennie w jeden zasób oparty na COG. Zarejestruj każdy plik jako osobny obraz w ee.ImageCollection i wywołaj mosaic(). Zobacz ograniczenia dotyczące pliku manifestu.

Jakich schematów kompresji, rozmiarów kafelków i typów pikseli mogą używać zasoby oparte na COG?

Informacje o obsługiwanych schematach kompresji, rozmiarach kafelków i typach danych pikseli znajdziesz w artykule o sprawdzonych metodach przygotowywania zewnętrznych plików COG. Pliki w formatach kompresji, których Earth Engine nie może odczytać bezpośrednio jako COG, można nadal przesyłać jako standardowe zasoby.

Pojawia się błąd „Nie udało się odczytać metadanych pliku TIFF w pierwszych 10 000 000 bajtów”.

Earth Engine odczytuje tylko początek pliku podczas jego wczytywania lub rejestrowania. Duże obrazy z wieloma kafelkami i obcięte pliki przekraczają ten limit. Informacje o limicie i sposobie jego przestrzegania znajdziesz w artykule o wybieraniu wymiarów pliku.

Czym różni się ee.Image.loadGeoTIFF() od zarejestrowanego zasobu, gdy plik ulega zmianie?

ee.Image.loadGeoTIFF() odczytuje wersję pliku, która jest aktualna w momencie każdego obliczenia lub żądania fragmentu mapy, więc pobiera zamienniki (nierównomiernie na mapie, ponieważ wyrenderowane fragmenty mapy pozostają w pamięci podręcznej). Zarejestrowany zasób zawsze przypina generację, z którą został zarejestrowany, i musi zostać ponownie zarejestrowany, aby zobaczyć nowy plik, ale w zamian jego ślad i metadane są indeksowane, co umożliwia jego użycie w dużych kolekcjach. Zobacz odczytywanie COG z Cloud Storage.

Edytor kodu

Nie mogę zalogować się w edytorze kodu, ponieważ pojawia się prośba o użycie niewłaściwego konta.

Wyloguj się, wybierz konto zarejestrowane do korzystania z Earth Engine na stronie „Wybierz konto”, a następnie ponownie wybierz to samo konto na drugiej stronie „Wybierz konto, aby przejść do edytora kodu Earth Engine” (dokładne sformułowanie może się różnić).

Chcę zrobić zrzut ekranu mapy świata, ale nie podoba mi się odwzorowanie Merkatora.

Odwzorowanie mapy używane w edytorze kodu to Web Mercator ('EPSG:3857'). Zniekształca rozmiar obiektów oddalonych od równika, przez co regiony na dużych szerokościach geograficznych wydają się znacznie większe niż w rzeczywistości w porównaniu z regionami w pobliżu równika. Nie możesz zmienić odwzorowania obszaru roboczego mapy w edytorze kodu, ale możesz „namalować” obraz w wybranym odwzorowaniu na obszarze roboczym Web Mercator za pomocą metody ee.Image.changeProj. Przykład wyświetlania globalnego modelu DEM na mapie w Edytorze kodu w odwzorowaniu Robinsona znajdziesz na stronie dokumentacji interfejsu API dotyczącej tej metody. Pamiętaj, że tej techniki należy używać tylko do wizualizacji, ponieważ inspektor i narzędzia do rysowania w edytorze kodu nadal działają w Web Mercator.

Skrypt się nie zapisuje (Script error: Unknown commit).

Jeśli podczas zapisywania skryptu pojawi się komunikat Script error: Unknown commit, prawdopodobnie oznacza to, że repozytorium, w którym zapisujesz, nie jest zsynchronizowane. Przyczyna tego stanu jest zmienna i trudna do zidentyfikowania. Aby rozwiązać ten problem, spróbuj odświeżyć listę skryptów za pomocą przycisku w prawym górnym rogu karty Skrypt. Jeśli to nie zadziała, spróbuj utworzyć nowe repozytorium za pomocą przycisku Nowy na karcie Skrypt i zapisz tam skrypt (może być konieczne przeniesienie skryptów do nowego repozytorium z repozytorium, które nie jest zsynchronizowane).

Dlaczego w edytorze kodu widzę powtarzające się błędy 400?

Jeśli w edytorze kodu wielokrotnie pojawiają się błędy 400, wejdź na stronę https://myaccount.google.com/connections, znajdź „Earth Engine Code Editor” na liście aplikacji i usług, wybierz tę pozycję, a następnie kliknij „Usuń wszystkie połączenia z Earth Engine Code Editor” i potwierdź. Następnie otwórz edytor kodu i ponownie przeprowadź uwierzytelnianie.

Jak przywrócić usunięte skrypty i foldery?

Jeśli przypadkowo usuniesz skrypt lub folder w istniejącym repozytorium, pełna historia zatwierdzeń zostanie zachowana w logach Git na naszych serwerach. Usunięte skrypty lub foldery możesz przywrócić, klonując repozytorium lokalnie za pomocą standardowych narzędzi wiersza poleceń Git.

Usunięcie całego repozytorium (users/username/repository) powoduje jednak trwałe usunięcie repozytorium i historii zatwierdzeń z earthengine.googlesource.com. Tej czynności nie można cofnąć ani przywrócić.

Szczegółowe instrukcje generowania danych logowania Git, klonowania repozytorium i przywracania usuniętych plików lub folderów znajdziesz w przewodniku Przywracanie skryptów i migracja repozytorium.

Jak zmienić nazwę katalogu głównego repozytorium skryptów?

Katalog główny skryptu (users/username) jest powiązany z pierwotną rejestracją konta Earth Engine. Nie można zmienić jej nazwy bezpośrednio w backendzie, ponieważ spowodowałoby to uszkodzenie zewnętrznych skryptów lub projektów współpracowników, które importują kod modułowy za pomocą ścieżki require('users/username/repository:...').

Jeśli potrzebujesz nowej przestrzeni nazw, możesz przenieść swoją pracę na nowe konto:

  1. Zarejestruj nowe konto Earth Engine przy użyciu nowej tożsamości Google (co spowoduje wygenerowanie czystego katalogu głównego users/new_username).
  2. Postępuj zgodnie z instrukcjami migracji repozytorium, aby sklonować stare repozytorium i przesłać jego pełną historię do nowego pustego repozytorium.

Istotne kwestie:

  • Moduły publiczne: jeśli masz moduły publiczne, z których korzystają inne osoby, zdecydowanie zalecamy zachowanie starego konta i repozytorium, aby nie zakłócać ich przepływów pracy.
  • Skrypty prywatne: jeśli Twoje skrypty są całkowicie prywatne, możesz zaktualizować instrukcje importu require(), aby odwoływały się do nowej ścieżki repozytorium, a następnie bezpiecznie usunąć stare repozytoria.