Obiekty Earth Engine

Teraz, gdy znasz już JavaScript, dowiedz się, jak umieszczać obiekty w JavaScripcie i elementy podstawowe JavaScriptu w kontenerach Earth Engine, aby wysyłać je na serwer i przetwarzać w Google.

Strings

Możesz na przykład zdefiniować ciąg znaków, a następnie umieścić go w kontenerze ee.String(), aby wysłać go 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);

Możesz traktować ee.Thing jako kontener na element, który istnieje na serwerze. W tym przykładzie ciąg znaków jest najpierw definiowany, a następnie 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 wysyłany do serwera w celu oceny, a następnie odsyłany z powrotem.

Numbers

Użyj ee.Number(), aby utworzyć obiekty liczbowe na serwerze. Możesz na przykład użyć 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 pobiera argument (i ewentualnie inne parametry), umieszcza go w kontenerze i zwraca kontener oraz jego zawartość jako obiekt Earth Engine, którym można manipulować w kodzie. Każdy konstruktor zaczynający się od ee zwraca obiekt Earth Engine.

Metody dotyczące obiektów Earth Engine

Pamiętaj, że po utworzeniu obiektu Earth Engine musisz użyć metod Earth Engine, aby go przetworzyć. W tym przykładzie nie możesz użyć funkcji Math.log() JavaScriptu do przetworzenia tego obiektu Earth Engine. Musisz użyć odpowiedniej metody zdefiniowanej dla 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() jest metodą obiektu ee.Number. (Użyj karty Dokumentacja po lewej stronie edytora kodu, aby wyświetlić listę wszystkich metod dla każdego typu obiektu Earth Engine, np. ee.Number > log()). 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ż po stronie serwera wygodne metody 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. Na przykład, aby 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:

Często zdarza się to w przypadku funkcji get(), która może zwracać różne rodzaje obiektów 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 w JavaScripcie, podobnie 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 JavaScript:

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());

Zauważ, że w tym przykładzie po uzyskaniu obiektu ee.Dictionary musisz użyć metod obiektu ee.Dictionary, aby uzyskać wartości (inaczej niż w przypadku słownika JavaScriptu w poprzedniej lekcji). Konkretnie get(key) zwraca wartość powiązaną z key. Ponieważ typ obiektu zwracanego przez get() może być dowolny, jeśli chcesz wykonać na obiekcie jakąkolwiek operację inną niż drukowanie, musisz rzutować go na odpowiedni typ. Pamiętaj też, że metoda keys() zwraca obiekt ee.List.

Daty

Obiekty daty to sposób, w jaki Earth Engine reprezentuje czas. Podobnie jak w poprzednich przykładach, ważne jest, aby odróżnić obiekt JavaScriptu Date od obiektu Earth Engine ee.Date. Utwórz obiekt ee.Date z ciągu znaków, z obiektu Date JavaScriptu lub za pomocą metod statycznych udostępnianych przez klasę ee.Date. (szczegółowe informacje znajdziesz w sekcji Data na karcie Dokumentacja). Ten przykład ilustruje 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 na stronie Pierwsze kroki.

Dygresja: przekazywanie parametrów według nazwy

Argumenty metod Earth Engine można przekazywać w kolejności, na przykład aby utworzyć ee.Date z 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. Może to wymagać więcej kodu, ale może poprawić czytelność i możliwość ponownego użycia. Aby przekazać parametry według nazwy, przekaż obiekt w JavaScripcie, 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 dokumentacji ee.Date.fromYMD(). Pamiętaj też, że obiekt przekazywany jako argument można zapisać w zmiennej do ponownego użycia, jak pokazano w przykładzie obiektu w JavaScripcie.

Masz już wystarczającą wiedzę o JavaScript, aby zacząć korzystać z Earth Engine. Więcej informacji o obiektach JavaScriptu i Earth Engine znajdziesz na stronie Klient a serwer.

W następnej sekcji dowiesz się więcej o koncepcjach programowania funkcyjnego, aby skutecznie używać pętli for, warunków if/else i iteracji w Earth Engine.