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

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

מיתרים

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

עורך הקוד (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 כעל מאגר של פריט שקיים בשרת. בדוגמה הזו, המחרוזת מוגדרת קודם ואז מוכנסת למאגר. אפשר גם להגדיר את מאגר התגים ואת התוכן שלו בבת אחת. לדוגמה:

עורך הקוד (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() כדי ליצור אובייקטים של מספרים בשרת. לדוגמה, אפשר להשתמש בשיטת JavaScript‏ Math.E כדי ליצור ערך קבוע בשרת:

עורך הקוד (JavaScript)

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

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

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

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

עורך הקוד (JavaScript)

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

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

רשימות

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

עורך הקוד (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 מספק כדי ליצור איתם אינטראקציה. לדוגמה, כדי להוציא משהו מהרשימה, משתמשים בשיטה get() של האובייקט ee.List:

עורך הקוד (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 לא יודעת את הסוג של אובייקט שמוחזר משיטה. אתם, כמתכנתים, יודעים שהמשתנה value בדוגמה הקודמת הוא אובייקט מספרי. אבל אם תנסו להשתמש בשיטה add() של ee.Number, תקבלו שגיאה כמו:

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

עורך הקוד (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:

עורך הקוד (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() יכול להיות כל דבר, אם אתם מתכוונים לבצע פעולה כלשהי באובייקט מלבד הדפסה שלו, אתם צריכים להמיר אותו לסוג הנכון. חשוב גם לציין שהשיטה keys() מחזירה ee.List.

התאריכים

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

עורך הקוד (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() לפי הסדר שנה, חודש, יום:

עורך הקוד (JavaScript)

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

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

עורך הקוד (JavaScript)

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

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

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

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