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.