אובייקטים של Earth Engine

עכשיו, אחרי שהבנתם איך להשתמש ב-JavaScript, אתם יכולים ללמוד איך להכניס אובייקטים ב-JavaScript ופרימיטיבים לקונטיינרים של Earth Engine כדי לשלוח אותם לשרת ולעבד אותם ב-Google.

מיתרים

לדוגמה, מגדירים מחרוזת ואז מכניסים אותה למאגר ee.String() כדי לשלוח אותה ל-Earth Engine:

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

אפשר לחשוב על ee.Thing כמאגר של פריט שקיים בשרת. בדוגמה הזו, המחרוזת מוגדרת קודם, ואז מוכנסת למאגר. אפשר גם להגדיר את המאגר ואת התוכן שלו בבת אחת. לדוגמה:

Code Editor (JavaScript)

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

למרות שהארגומנט הראשון של print() הוא רק מחרוזת בצד הלקוח, הארגומנט השני נשלח בפועל לשרת כדי להעריך אותו, ואז נשלח בחזרה.

מספרים

משתמשים ב-ee.Number() כדי ליצור אובייקטים של מספרים בשרת. לדוגמה, אפשר להשתמש ב-method של JavaScript‏ Math.E כדי ליצור ערך קבוע בשרת:

Code Editor (JavaScript)

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

ה-methods‏ ee.String() ו-ee.Number() הן constructors. פונקציית constructor מקבלת את הארגומנט שלה (ואולי גם פרמטרים אחרים), מכניסה אותו למאגר ומחזירה את המאגר ואת התוכן שלו כאובייקט של Earth Engine שאפשר לשנות בקוד. כל פונקציית constructor שמתחילה ב-ee מחזירה אובייקט של Earth Engine.

שיטות באובייקטים של Earth Engine

שימו לב שאחרי שיוצרים אובייקט של Earth Engine, צריך להשתמש בשיטות של Earth Engine כדי לעבד אותו. בדוגמה הזו, אי אפשר להשתמש ב-Math.log() של JavaScript כדי לעבד את האובייקט הזה של Earth Engine. צריך להשתמש בשיטה המקבילה שמוגדרת ל-ee.Number:

Code Editor (JavaScript)

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

בדוגמה הזו, log() היא שיטה לאובייקט ee.Number. (כדי לראות רשימה של כל השיטות לכל סוג אובייקט של Earth Engine, משתמשים בכרטיסייה Docs בצד שמאל של עורך הקוד, לדוגמה ee.Number > log()). שימו לב שהשיטות של אובייקטים ב-Earth Engine מחזירות אובייקטים אחרים של Earth Engine.

רשימות

כדי להפוך רשימת JavaScript לאובייקט ee.List בשרת, אפשר להכניס ליטרל של JavaScript למאגר, כמו עם מספרים ומחרוזות. ב-Earth Engine יש גם שיטות נוחות בצד השרת ליצירת רצפים של מספרים. לדוגמה:

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

מכיוון שהאובייקטים של ee.List קיימים רק בשרת, צריך להשתמש בפונקציות שסופקו על ידי Earth Engine כדי לבצע איתם אינטראקציה. לדוגמה, כדי להוציא משהו מהרשימה, משתמשים ב-method‏ get() של האובייקט ee.List:

Code Editor (JavaScript)

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

Cast

לפעמים, ל-Earth Engine אין מידע על סוג האובייקט שמוחזר מ-method. אתם, בתור המתכנתים, יודעים שהמשתנה value בדוגמה הקודמת הוא אובייקט מספרי. אבל אם תנסו להשתמש ב-method‏ add() של ee.Number, תופיע שגיאה כמו:

זה קורה הרבה עם הפונקציה get(), שיכולה להחזיר כל מיני אובייקטים של Earth Engine. כדי לתקן את זה, משתמשים ב-constructor של ee.Number כדי להמיר את התוצאה:

Code Editor (JavaScript)

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

מילונים

אפשר ליצור Dictionary ב-Earth Engine מאובייקט ב-JavaScript, כמו מחרוזות, מספרים ורשימות. בזמן הבנייה, אפשר להשתמש בפונקציונליות של JavaScript כדי לאתחל את האובייקט של Earth Engine. במקרה הזה, ee.Dictionary נוצר ישירות מאובייקט ליטרלי של JavaScript:

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

בדוגמה הזו, שימו לב שאחרי שיש לכם ee.Dictionary, אתם צריכים להשתמש בשיטות ב-ee.Dictionary כדי לקבל ערכים (בניגוד למילון JavaScript בשיעור הקודם). באופן ספציפי, get(key) מחזירה את הערך שמשויך ל-key. מכיוון שסוג האובייקט שמוחזר על ידי get() יכול להיות כל דבר, אם אתם רוצים לעשות משהו עם האובייקט חוץ מלהדפיס אותו, אתם צריכים להמיר אותו לסוג הנכון. חשוב גם לשים לב שה-method keys() מחזיר ee.List.

תאריכים

אובייקטים של תאריכים הם הדרך שבה Earth Engine מייצג זמן. כמו בדוגמאות הקודמות, חשוב להבחין בין אובייקט Date ב-JavaScript לבין אובייקט ee.Date ב-Earth Engine. יוצרים ee.Date ממחרוזת, מ-Date של JavaScript או באמצעות שיטות סטטיות שסופקו על ידי הכיתה ee.Date. (פרטים נוספים זמינים בקטע Date בכרטיסייה Docs). בדוגמה הזו אפשר לראות איך יוצרים תאריכים ממחרוזות או מתאריך ב-JavaScript שמייצג אלפיות שנייה מאז חצות ב-1 בינואר 1970:

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

תאריכים שימושיים לסינון אוספים, במיוחד כארגומנטים של השיטה filterDate(). מידע נוסף על מיון אוספים זמין בקטע הזה בדף "תחילת העבודה".

סטייה מהנושא: העברת פרמטרים לפי שם

אפשר להעביר ארגומנטים לשיטות של Earth Engine לפי הסדר. לדוגמה, כדי ליצור ee.Date משנה, חודש ויום, אפשר להעביר פרמטרים של השיטה הסטטית fromYMD() בסדר הבא: שנה, חודש, יום:

Code Editor (JavaScript)

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

לחלופין, אפשר להעביר את הפרמטרים לפי שם, בכל סדר. יכול להיות שזה ידרוש יותר קוד, אבל זה יכול לשפר את הקריאוּת ואת היכולת להשתמש בקוד שוב. כדי להעביר פרמטרים לפי שם, מעבירים אובייקט ב-JavaScript שבו המפתחות של האובייקט הם השמות של הפרמטרים של השיטה, והערכים הם הארגומנטים של השיטה. לדוגמה:

Code Editor (JavaScript)

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

שימו לב ששמות המאפיינים של האובייקט (המפתחות) תואמים לשמות שצוינו במסמכי התיעוד של ee.Date.fromYMD(). שימו לב גם שאפשר לשמור את האובייקט שמועבר כארגומנט במשתנה לשימוש חוזר, כמו שמוצג בדוגמה לאובייקט ב-JavaScript.

עכשיו יש לכם מספיק ידע בסיסי ב-JavaScript כדי להתחיל להשתמש ב-Earth Engine. בדף Client vs. Server יש הסבר מפורט יותר על אובייקטים של JavaScript לעומת אובייקטים של Earth Engine.

בקטע הבא, תוכלו לקרוא מידע נוסף על מושגים של תכנות פונקציונלי כדי להשתמש ביעילות בלולאות for, בתנאי if/else ובאיטרציות ב-Earth Engine.