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–2024 włącznie.
Licencja
Ten zbiór danych jest objęty licencją CC-BY 4.0 i wymaga podania tego tekstu atrybucji: „Zbiór danych AlphaEarth Foundations Satellite Embedding został utworzony przez Google i Google DeepMind”.
Ten zasobnik jest skonfigurowany jako „płatność przez żą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 piksela. Te warstwy przeglądowe są tworzone w taki sposób, aby każdy piksel przeglądowy był średnią pikseli o najwyższej rozdzielczości znajdujących się pod nim, przy czym wielkość średniej została znormalizowana do długości 1.
Kanały odpowiadają kolejno osiom A00–A63 zbioru danych osadzania satelitarnego. W COGS też używamy tej nazwy kanałów.
Wartość każdego piksela w przypadku każdego kanału jest 8-bitową liczbą całkowitą ze znakiem. Sposób, w jaki te wartości są mapowane na wartości natywne (w zakresie [-1, 1]) osadzeń, opisaliśmy poniżej.
Wartość -128 odpowiada zamaskowanemu pikselowi. Jeśli występuje w jednym kanale, będzie występować we wszystkich kanałach. Odzwierciedla to wartość COG (czyli wartość NoData ustawioną na -128).
Nazwa każdego pliku również zawiera pewne informacje. Weźmy na przykład plik o nazwiegs://alphaearth_foundations/satellite_embedding/v1/annual/2019/1S/x8qqwcsisbgygl2ry-0000008192-0000000000.tiff.
Jak opisano powyżej, ten plik jest częścią rocznego osadzania z 2019 roku i znajduje się w strefie UTM 1S (strefa 1, półkula południowa). Podstawowa nazwa pliku, x8qqwcsisbgygl2ry-0000008192-0000000000, służy do powiązania tego pliku z odpowiednią nazwą obrazu osadzonego z 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ę w stosunku do obrazu Earth Engine, jako przesunięcie w osi Y, a następnie przesunięcie w osi X. W tym przypadku piksel COG znajduje się w punkcie (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 się mieścić w zakresie od -127 do 127 włącznie, ponieważ wartość -128 jest zarezerwowana jako wartość „brak danych”) w każdym kanale każdego piksela na wartość zmiennoprzecinkową gotową do analizy (która będzie się mieścić 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ć podaną niżej procedurę. Standardowe techniki tworzenia piramid rastrowych (np. używanie gdaladdo z opcją -r average na surowych wartościach całkowitych) nie dadzą prawidłowych wyników.
- Odwróć kwantyzację: przekonwertuj surowe 8-bitowe liczby całkowite na liczby zmiennoprzecinkowe, korzystając z metody opisanej powyżej.
- Sumowanie wektorów: wykonaj sumę elementów wektorów po odkwantyzowaniu.
- Normalizacja: oblicz normę euklidesową wynikowego 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 podglądu w plikach COG zostały wygenerowane przy użyciu tej procedury. Jeśli spełniają Twoje potrzeby, możesz po prostu ich użyć i nie wykonywać żadnych 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.gpkg i gs://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. Poniżej znajdziesz szczegółowe informacje o sposobie obliczania tej geometrii. crs: układ współrzędnych strefy UTM, do której należy ten 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 układzie WGS84, w które przekształcają się proste linie w układzie UTM. Ten wielokąt nie uwzględnia ważności/nieważ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 kilku prawidłowych pikseli, które wystają 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 antypołudnika, co powinno nieco uprościć przetwarzanie tego pliku.