Obiekty Earth Engine

Znasz już JavaScript. Dowiedz się, jak umieszczać obiekty i typy proste JavaScriptu w kontenerach Earth Engine, aby wysyłać je na serwer i przetwarzać w Google.

Strings

Zdefiniuj np. ciąg znaków, a następnie umieść go w kontenerze ee.String(), który ma zostać wysłany do Earth Engine:

Edytor kodu (JavaScript)

// Define a string, then put it into an EE container.
var aString = 'To the cloud!';
var eeString = ee.String(aString);
print('Where to?', eeString);

Pomyśl o ee.Thing jako o kontenerze na element, który istnieje na serwerze. W tym przykładzie najpierw definiowany jest ciąg znaków, a potem umieszczany w kontenerze. Możesz też zdefiniować kontener i jego zawartość jednocześnie. Na przykład:

Edytor kodu (JavaScript)

// Define a string that exists on the server.
var serverString = ee.String('This is on the server.');
print('String on the server:', serverString);

Chociaż pierwszy argument funkcji print() jest tylko ciągiem znaków na kliencie, drugi argument jest faktycznie wysyłany na serwer w celu oceny, a następnie odsyłany.

Numbers

Użyj ee.Number(), aby utworzyć obiekty liczbowe na serwerze. Na przykład użyj metody JavaScript Math.E, aby utworzyć stałą wartość na serwerze:

Edytor kodu (JavaScript)

// Define a number that exists on the server.
var serverNumber = ee.Number(Math.E);
print('e=', serverNumber);

Metody ee.String() i ee.Number() to konstruktory. Konstruktor przyjmuje argument (i ewentualnie inne parametry), umieszcza go w kontenerze i zwraca kontener oraz jego zawartość jako obiekt Earth Engine, którym możesz manipulować w kodzie. Każdy konstruktor zaczynający się od ee zwraca obiekt Earth Engine.

Metody obiektów Earth Engine

Pamiętaj, że po utworzeniu obiektu Earth Engine musisz używać metod Earth Engine do jego przetwarzania. W tym przykładzie nie możesz użyć funkcji Math.log() w JavaScript do przetworzenia tego obiektu Earth Engine. Musisz użyć odpowiedniej metody zdefiniowanej dla elementu ee.Number:

Edytor kodu (JavaScript)

// Use a built-in function to perform an operation on the number.
var logE = serverNumber.log();
print('log(e)=', logE);

W tym przykładzie log() to metoda obiektu ee.Number. (Aby wyświetlić listę wszystkich metod dla każdego typu obiektu Earth Engine, np. ee.Number > log(), użyj karty Dokumenty po lewej stronie edytora kodu). Pamiętaj, że metody obiektów Earth Engine zwracają inne obiekty Earth Engine.

Listy

Aby przekształcić listę JavaScriptu w obiekt ee.List na serwerze, możesz umieścić literał JavaScriptu w kontenerze, tak jak w przypadku liczb i ciągów znaków. Earth Engine udostępnia też wygodne metody po stronie serwera do tworzenia sekwencji liczb. Na przykład:

Edytor kodu (JavaScript)

// Make a sequence the hard way.
var eeList = ee.List([1, 2, 3, 4, 5]);
// Make a sequence the easy way!
var sequence = ee.List.sequence(1, 5);
print('Sequence:', sequence);

Obiekty ee.List istnieją tylko na serwerze, więc do interakcji z nimi używaj funkcji udostępnianych przez Earth Engine. Aby na przykład pobrać coś z listy, użyj metody get() obiektu ee.List:

Edytor kodu (JavaScript)

// Use a method on an ee.List to extract a value.
var value = sequence.get(2);
print('Value at index 2:', value);

Przesyłanie

Czasami Earth Engine nie zna typu obiektu zwracanego przez metodę. Jako programista wiesz, że zmienna value w poprzednim przykładzie jest obiektem liczbowym. Jeśli jednak spróbujesz użyć metody add() obiektu ee.Number, pojawi się błąd podobny do tego:

Jest to typowe w przypadku funkcji get(), która może zwracać różnego rodzaju obiekty Earth Engine. Aby to poprawić, użyj konstruktora ee.Number, aby rzutować wynik:

Edytor kodu (JavaScript)

// Cast the return value of get() to a number.
print('No error:', ee.Number(value).add(3));

Słowniki

Obiekt Dictionary Earth Engine możesz utworzyć z obiektu JavaScript, tak jak w przypadku ciągów znaków, liczb i list. Podczas tworzenia możesz użyć funkcji JavaScriptu, aby zainicjować obiekt Earth Engine. W tym przypadku obiekt ee.Dictionary jest tworzony bezpośrednio z obiektu literału JavaScriptu:

Edytor kodu (JavaScript)

// Make a Dictionary on the server.
var dictionary = ee.Dictionary({
  e: Math.E,
  pi: Math.PI,
  phi: (1 + Math.sqrt(5)) / 2
});

// Get some values from the dictionary.
print('Euler:', dictionary.get('e'));
print('Pi:', dictionary.get('pi'));
print('Golden ratio:', dictionary.get('phi'));

// Get all the keys:
print('Keys: ', dictionary.keys());

Zwróć uwagę, że w tym przykładzie po uzyskaniu obiektu ee.Dictionary musisz użyć metod w obiekcie ee.Dictionary, aby uzyskać wartości (w przeciwieństwie do słownika JavaScriptu w poprzedniej lekcji). W szczególności funkcja get(key) zwraca wartość powiązaną z elementem key. Ponieważ typ obiektu zwracanego przez get() może być dowolny, jeśli chcesz z nim coś zrobić poza wydrukowaniem, musisz przekształcić go w odpowiedni typ. Pamiętaj też, że metoda keys() zwraca wartość ee.List.

Daty

Obiekty daty to sposób, w jaki Earth Engine reprezentuje czas. Podobnie jak w poprzednich przykładach ważne jest rozróżnienie obiektu JavaScriptu Date i obiektu Earth Engine ee.Date. Utwórz obiekt ee.Date na podstawie ciągu znaków, obiektu JavaScript Date lub za pomocą metod statycznych udostępnianych przez klasę ee.Date. (Szczegółowe informacje znajdziesz w sekcji Data na karcie Dokumenty). Ten przykład pokazuje tworzenie dat z ciągów znaków lub daty JavaScript reprezentującej milisekundy od północy 1 stycznia 1970 r.:

Edytor kodu (JavaScript)

// Define a date in Earth Engine.
var date = ee.Date('2015-12-31');
print('Date:', date);

// Get the current time using the JavaScript Date.now() method.
var now = Date.now();
print('Milliseconds since January 1, 1970', now);

// Initialize an ee.Date object.
var eeNow = ee.Date(now);
print('Now:', eeNow);

Daty są przydatne do filtrowania kolekcji, zwłaszcza jako argumenty metody filterDate(). Więcej informacji o sortowaniu kolekcji znajdziesz w tej sekcji strony Pierwsze kroki.

Dygresja: przekazywanie parametrów według nazwy

Argumenty do metod Earth Engine można przekazywać w odpowiedniej kolejności. Na przykład aby utworzyć obiekt ee.Date na podstawie roku, miesiąca i dnia, możesz przekazać parametry metody statycznej fromYMD() w kolejności rok, miesiąc, dzień:

Edytor kodu (JavaScript)

var aDate = ee.Date.fromYMD(2017, 1, 13);
print('aDate:', aDate);

Możesz też przekazywać parametry według nazwy w dowolnej kolejności. Chociaż może to być więcej kodu, może poprawić czytelność i możliwość ponownego użycia. Aby przekazać parametry według nazwy, przekaż obiekt JavaScriptu, w którym klucze obiektu są nazwami parametrów metody, a wartości są argumentami metody. Na przykład:

Edytor kodu (JavaScript)

var theDate = ee.Date.fromYMD({
  day: 13,
  month: 1,
  year: 2017
});
print('theDate:', theDate);

Zwróć uwagę, że nazwy właściwości obiektu (klucze) są zgodne z nazwami podanymi w ee.Date.fromYMD()dokumentacji. Pamiętaj też, że obiekt przekazywany jako argument można zapisać w zmiennej do ponownego użycia, jak pokazano w przykładzie obiektu JavaScript.

Masz już wystarczającą wiedzę o JavaScript, aby zacząć korzystać z Earth Engine. Więcej informacji o różnicach między obiektami JavaScript i Earth Engine znajdziesz na tej stronie.

W następnej sekcji dowiesz się więcej o koncepcjach programowania funkcyjnego, które pozwolą Ci efektywnie korzystać z pętli for, warunków if/else i iteracji w Earth Engine.