Dane GCS AlphaEarth Foundations

Zasobnik GCS gs://alphaearth_foundations zawiera pliki COG (Cloud Optimized GeoTIFF), które razem tworzą roczny zbiór danych Satellite Embedding AlphaEarth Foundations. Zawiera osadzenia roczne z lat 2017–2025 włącznie.

Google zobowiązuje się do ciągłego tworzenia rocznych warstw osadzania danych satelitarnych i będzie powiadamiać z co najmniej rocznym wyprzedzeniem o wszelkich przewidywanych zmianach w dostarczaniu tych danych, pod warunkiem ciągłej dostępności strumieni danych wejściowych z USGS i ESA, na których opiera się tworzenie zbioru danych.

Licencja

Ten zbiór danych jest objęty licencją CC-BY 4.0 i wymaga podania następującego tekstu atrybucji: „Zbiór danych AlphaEarth Foundations Satellite Embedding został utworzony przez Google i Google DeepMind”.

Ten zasobnik jest skonfigurowany jako „płatność po stronie żądającego”, więc pobieranie danych może wiązać się z opłatami za ruch wychodzący i innymi opłatami.

Struktura katalogu

Są one podzielone na katalogi według roku. Każdy katalog roczny jest podzielony na 120 podkatalogów, po jednym na każdą strefę UTM. Nazwy podkatalogów odzwierciedlają numer strefy i półkulę (N lub S).

W każdym katalogu znajduje się kilka plików COG. Te pliki zawierają wszystkie dane pikseli dla danej strefy UTM.

Struktura pliku

Każdy plik ma wymiary 8192 x 8192 pikseli i 64 kanały. Wartość każdego piksela po zastosowaniu mapowania dekwantyzacji (patrz poniżej) została znormalizowana tak, aby jej długość euklidesowa wynosiła 1.

Pliki zawierają warstwy przeglądowe o rozdzielczości 4096 x 4096 pikseli, 2048 x 2048 pikseli itd., aż do warstwy przeglądowej najwyższego poziomu o rozdzielczości 1 x 1 piksel. Te warstwy podglądu są tworzone tak, aby każdy piksel podglądu był średnią pikseli o najwyższej rozdzielczości znajdujących się pod nim. Wartość średniej została znormalizowana do długości 1.

Kanały odpowiadają kolejno osiom A00A63 zbioru danych osadzania satelitarnego. W COGs również używa się tych nazw kanałów.

Wartość każdego piksela w przypadku każdego kanału jest 8-bitową liczbą całkowitą ze znakiem. Sposób mapowania tych wartości na wartości natywne (w zakresie [-1, 1]) osadzeń jest wyjaśniony w sekcji De-quantization (Odwantyzacja).

Wartość -128 odpowiada zamaskowanemu pikselowi. Jeśli jest on obecny na jednym kanale, będzie obecny na wszystkich kanałach. Odzwierciedla to wartość COG (czyli wartość NoData ustawioną na -128).

Nazwa każdego pliku zawiera też pewne informacje. Weźmy na przykład plik o nazwiegs://alphaearth_foundations/satellite_embedding/v1/annual/2019/1S/x8qqwcsisbgygl2ry-0000008192-0000000000.tiff. Jak widać z nazwy pliku, jest on częścią rocznego osadzania z 2019 r. dla strefy UTM 1S (strefa 1, półkula południowa). Nazwa pliku podstawowego, x8qqwcsisbgygl2ry-0000008192-0000000000, służy do powiązania tego pliku z odpowiednią nazwą obrazu osadzonego satelity Earth Engine. W tym przykładzie ten plik odpowiada części obrazu Earth EngineGOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL/x8qqwcsisbgygl2ry. Dwie części dziesiętne nazwy pliku określają, gdzie wartości tego pliku COG znajdują się względem obrazu Earth Engine, jako przesunięcie w osi Y, a następnie przesunięcie w osi X. W tym przypadku punkt początkowy piksela COG znajduje się w pozycji (0, 8192) względem punktu początkowego obrazu Earth Engine. Wynika to z konieczności podzielenia każdego obrazu Earth Engine (który ma wymiary 16384 x 16384 piksele), aby powstałe pliki COG nie były zbyt duże.

De-kwantyzacja

Aby przekształcić surową 8-bitową wartość ze znakiem (która będzie mieścić się w zakresie od -127 do 127 włącznie, ponieważ -128 jest zarezerwowane jako wartość „brak danych”) w każdym kanale każdego piksela na wartość zmiennoprzecinkową gotową do analizy (która będzie mieścić się w zakresie od -1 do 1), należy wykonać mapowanie

  • podziel przez 127,5
  • kwadrat
  • pomnóż przez znak pierwotnej wartości,

W NumPy będzie to wyglądać tak:

  # values is a NumPy array of raw pixel values
  de_quantized_values = ((values / 127.5) ** 2) * np.sign(values)

W Earth Engine odpowiednia operacja to

  var de_quantized_values = values.divide(127.5).pow(2).multiply(values.signum());

Tworzenie piramid z próbkowaniem w dół

Jeśli zamierzasz utworzyć własne wersje o niższej rozdzielczości lub zewnętrzne podglądy z warstwy o podstawowej rozdzielczości tych plików COG (np. po połączeniu kilku plików w mozaikę), musisz wykonać te czynności. Standardowe techniki tworzenia piramid rastrowych (np. używanie narzędzia gdaladdo z opcją -r average na surowych wartościach całkowitych) nie dadzą prawidłowych wyników.

  1. De-quantize: przekonwertuj surowe 8-bitowe liczby całkowite na liczby zmiennoprzecinkowe za pomocą metody opisanej w sekcji De-quantization (Odwzorowanie na liczby zmiennoprzecinkowe).
  2. Sumowanie wektorów: wykonaj sumę elementów wektorów po odkwantyzowaniu.
  3. Normalizacja: oblicz normę euklidesową wektora sumy i podziel ją przez normę, aby ponownie znormalizować wektor do długości jednostkowej.
import numpy as np

# Assuming 'raw_values' is a NumPy array of shape (N, 64)
# containing the raw signed 8-bit integers from N pixels.
# N = 4 for a 2x2 aggregation, for example.

# 1. De-quantize
de_quantized_values = ((raw_values / 127.5) ** 2) * np.sign(raw_values)

# 2. Sum the de-quantized vectors
sum_vec = np.sum(de_quantized_values, axis=0)  # Shape (64,)

# 3. Normalize the sum vector
norm = np.linalg.norm(sum_vec)
# Add epsilon to prevent division by zero
pyramided_vec = sum_vec / (norm + 1e-9)

# 'pyramided_vec' is the correctly downsampled 64-dimensional unit vector.

Warstwy przeglądowe w plikach COG zostały wygenerowane przy użyciu tej procedury. Jeśli odpowiadają Twoim potrzebom, możesz od razu ich użyć bez dodatkowych obliczeń.

Manifest i indeks

Listę plików w tym zbiorze danych znajdziesz w gs://alphaearth_foundations/satellite_embedding/v1/annual/manifest.txt.

Ponieważ na podstawie nazw plików nie można określić, jakiego obszaru świata dotyczą, udostępniliśmy też indeks w 3 formatach (GeoParquet, GeoPackage i CSV) w plikach gs://alphaearth_foundations/satellite_embedding/v1/annual/aef_index.parquet, gs://alphaearth_foundations/satellite_embedding/v1/annual/aef_index.gpkggs://alphaearth_foundations/satellite_embedding/v1/annual/aef_index.csv. Ten indeks zawiera 1 wpis dla każdego pliku w zbiorze danych. Informacje podane o każdym pliku to:

  • geometria pliku w formacie WGS84 (czyli EPSG:4326). W formularzu CSV jest to kolumna WKT. Szczegóły obliczeń znajdziesz w sekcji Przetwarzanie geometrii.
  • crs: układ współrzędnych strefy UTM, do której należy obraz, w postaci kodu EPSG, np. EPSG:32610.
  • year: rok, którego dotyczy obraz.
  • utm_zone: strefa UTM obrazu, np. 10N.
  • utm_west, utm_south, utm_east, utm_north: granice UTM surowej tablicy pikseli. Nie uwzględnia to przetwarzania geometrii i obejmuje wszystkie piksele, niezależnie od tego, czy są prawidłowe.
  • wgs84_west, wgs84_south, wgs84_east, wgs84_north: minimalna i maksymalna długość i szerokość geograficzna geometrii WGS84.

Przetwarzanie geometrii

Tablica pikseli jest natywnie w pewnej strefie UTM, więc w tej strefie UTM pole ograniczające tablicy pikseli jest prostym prostokątem. Ta ramka ograniczająca jest przekształcana w wielokąt w systemie WGS84. Ten wielokąt zawiera wiele dodatkowych punktów, dzięki czemu jego krawędzie ściśle przylegają do zakrzywionych linii w WGS84, w które przekształcają się proste linie w UTM. Ten wielokąt nie uwzględnia ważności pikseli na obrazie, a jedynie granice tablicy pikseli obrazu.

Wielokąt jest następnie przycinany do minimalnej i maksymalnej długości geograficznej strefy UTM obrazu. W praktyce może to spowodować, że nie uwzględni on kilku prawidłowych pikseli, które wykraczają poza krawędź strefy UTM. Pominięcie tych pikseli w indeksie nie powinno powodować żadnych problemów: obszar ten powinien być pokryty przez obraz z sąsiedniej strefy UTM.

Pamiętaj, że przycinanie do minimalnej i maksymalnej długości geograficznej strefy UTM oznacza, że żaden wielokąt nie przecina południka zerowego, co powinno nieco uprościć przetwarzanie tego pliku.