reduceRegion
כדי לקבל נתונים סטטיסטיים של ערכי פיקסלים באזור של ee.Image
, משתמשים ב-image.reduceRegion()
.
כך כל הפיקסלים באזורים האלה מצומצמים לנתון סטטיסטי או לייצוג קומפקטי אחר של נתוני הפיקסלים באזור (למשל, תרשים היסטוגרמה). האזור מיוצג כ-Geometry
, שיכול להיות פוליגון שמכיל הרבה פיקסלים, או נקודה אחת, ובמקרה כזה יהיה רק פיקסל אחד באזור. בכל מקרה, כפי שמוצג באיור 1, הפלט הוא נתון סטטיסטי שמבוסס על הפיקסלים באזור.

ee.Reducer
שהוחל על תמונה ועל אזור.דוגמה לקבלת נתונים סטטיסטיים של פיקסלים באזור של תמונה באמצעות reduceRegion()
: חיפוש הערכים הספקטרליים הממוצעים של קומפוזיט של 5 שנים של Landsat בתוך גבולות היער המחטני של סיירה נבדה (איור 2):
// Load input imagery: Landsat 7 5-year composite. var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012'); // Load an input region: Sierra Nevada. var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3') .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada')) .first()); // Reduce the region. The region parameter is the Feature geometry. var meanDictionary = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), scale: 30, maxPixels: 1e9 }); // The result is a Dictionary. Print it. print(meanDictionary);
כדי לאלץ את החישוב, פשוט מדפיסים את התוצאה, שעורך הקוד יציג כ-Dictionary
במסוף. הפלט אמור להיראות כך:
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563

שימו לב שבדוגמה הזו, כדי לציין את ההקטנה, מציינים את הערכים של reducer
(ee.Reducer.mean()
), geometry
(region.geometry()
), scale
(30 מטרים) ו-maxPixels
למספר המקסימלי של פיקסלים להזנה למצמצם. תמיד צריך לציין את קנה המידה בקריאות ל-reduceRegion()
. הסיבה לכך היא שבתהליכי עיבוד מורכבים, שעשויים לכלול נתונים ממקורות שונים עם סולמות שונים, סולם הפלט לא יקבע באופן חד-משמעי מהקלטים. במקרה כזה, סולם ברירת המחדל הוא 1 מעלה, וכתוצאה מכך בדרך כלל מתקבלות תוצאות לא מספקות. בדף הזה מוסבר איך Earth Engine מטפלת בהתאמה לעומס.
יש שתי דרכים להגדיר את קנה המידה: על ידי ציון הפרמטר scale
או על ידי ציון CRS וטרנספורמציה של CRS. (במילון מפורט מידע נוסף על מערכות CRS ועל טרנספורמציות של מערכות CRS). לדוגמה, הפחתת meanDictionary
(למעלה) שווה לביטוי הבא:
// As an alternative to specifying scale, specify a CRS and a CRS transform. // Make this array by constructing a 4326 projection at 30 meters, // then copying the bounds of the composite, from composite.projection(). var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563]; // Perform the reduction, print the result. print(image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), crs: 'EPSG:4326', crsTransform: affine, maxPixels: 1e9 }));
באופן כללי, מספיק לציין את הסולם, וכך הקוד יהיה קריא יותר. כדי לקבוע אילו פיקסלים להזין למצמצם, מערכת Earth Engine מבצעת קודם רסטרציה של האזור. אם מציינים קנה מידה ללא מערכת קואורדינטות, האזור עובר רסטריזציה בתצוגה המקורית של התמונה, ומותאמת לרזולוציה שצוינה. אם מציינים גם מערכת קואורדינטות וגם קנה מידה, האזור יתבצע רסטורציה על סמך אלה.
פיקסלים באזור
הפיקסלים נקבעים כפי שהם נמצאים באזור (ומקבלים משקל) לפי הכללים הבאים, שחלים על התצוגה המפורטת והמיקום שצוינו:
- מקטינים ללא משקל (למשל
ee.Reducer.count()
אוee.Reducer.mean().unweighted()
): הפיקסלים נכללים אם מרכז המסה שלהם נמצא באזור והמסכה של התמונה שונה מאפס. - מקטיני משקל (למשל
ee.Reducer.mean()
): פיקסלים נכללים אם לפחות (כמעט) 0.5% מהפיקסל נמצאים באזור, והמסכה של התמונה שונה מאפס. המשקל שלהם הוא המינימום של המסכה של התמונה והחלק (המשוער) של הפיקסל שמכוסה על ידי האזור.
הפרמטר maxPixels
נדרש כדי שהחישוב יושלם. אם הפרמטר הזה לא נכלל בדוגמה, תופיע הודעת שגיאה שנראית בערך כך:
יש כמה אפשרויות כדי לעקוף את השגיאות האלה: להגדיל את maxPixels
, כמו בדוגמה, להגדיל את scale
או להגדיר את bestEffort
כ-true. הפעולה הזו מחשבת באופן אוטומטי סולם חדש (גדול יותר) כך שלא יחרגו מ-maxPixels
. אם לא מציינים את maxPixels
, המערכת משתמשת בערך ברירת המחדל.