שאלות כלליות
יש לי בעיה, אני צריך עזרה!
פרסמו שאלה לפי ההנחיות במדריך הזה, וספקו כמה שיותר מידע (ראו את המדריך של Stack Overflow לניסוח נכון של שאלות). בדרך כלל זה אומר:
שליחת קישור לסקריפט בכלי לעריכת קוד (לוחצים על הלחצן Get Link כדי לקבל אותו)
לשתף את כל הנכסים שנדרשים להפעלת הסקריפט
במשימות באצווה שנכשלו, מדווחים על המזהה של המשימה שנכשלה. מזהי המשימות נראים כך:
4C25GIJBMB52PXTEJTF4JLGL. אפשר למצוא אותן בכרטיסייה Task (משימה) בעורך הקוד. מידע נוסף
איפה אפשר לקרוא על הארכיטקטורה של Earth Engine?
אפשר לעיין במאמר הזה: Gorelick et al. 2017.
האם יש מדריכים מומלצים ל-Earth Engine שלא נוצרו על ידי Google?
אפשר לעיין בדפים EDU ו-Training Resources.
האם יש מדריכים מומלצים לחישה מרחוק?
הקורס החינמי הזה של EE, מאת אוג'וואל גנדי, כולל סרטון עם מבוא לחישה מרחוק.
תכנות ב-Earth Engine
מהן כמה מהשגיאות הנפוצות בכתיבת קוד?
למה מופיעה הודעת השגיאה "... is not a function"?
השגיאה הזו מתרחשת כש-Earth Engine לא מוצא את השיטה שנקראה. בדקו את הסיבות הנפוצות הבאות:
איות או תלות באותיות רישיות: השיטות תלויות באותיות רישיות. מוודאים שהאיות תואם למאמרי העזרה של ה-API.
Error: img.normalizedDiff(...) -> Correct: img.normalizedDifference(...)
חסרות המרות סוגים: ערכים שמוחזרים מפונקציות כמו .get() הם מופעים גנריים של ee.ComputedObject וצריך להמיר אותם באופן מפורש. מידע נוסף זמין במאמר המרת סוג של אובייקט לא ידוע.
Error: dict.get('val').add(5) -> Correct: ee.Number(dict.get('val')).add(5)
שילוב של שיטות לקוח ושרת: ודאו שאתם לא משתמשים בשיטות רגילות של JavaScript או Python (כמו .push() או .append()) באובייקטים של Earth Engine. מידע נוסף זמין במאמר הימנעות משילוב של פונקציות לקוח ושרת.
Error: list.push(4) or list.append(4) -> Correct: list.add(4)
שיטות לא זמינות: אם האובייקט מוגדר כראוי והשיטה קיימת במסמכי התיעוד או פעלה בעבר אבל עכשיו נכשלת, דווחו על באג.
למה אי אפשר להשתמש בפעולות מתמטיות בסיסיות כמו ee.Image("image") * 2?
ב-EE, לא כדאי לערבב בין אובייקטים או פעולות בצד השרת ובצד הלקוח. כל הפעולות באובייקטים של EE מתבצעות בצד השרת. חישובים בצד הלקוח לא יפעלו כמו שאתם רוצים. לפרטים נוספים
איך אפשר להשתמש בלולאות for או בהצהרות if/else?
התכנות ב-Earth Engine מתבצע באמצעות שפה פונקציונלית, ולכן צריך לבטא לולאות ופעולות מותנות באמצעות מושגים מקבילים כמו map או filter. לפרטים נוספים
איך מציגים תוויות טקסט בתמונה או בסרטון?
אין תמיכה מובנית בתוויות טקסט, אבל אפשר:
- שימוש בחבילת JS של צד שלישי. לצפייה בדוגמה
- משתמשים בחבילת Python של צד שלישי בשם geemap.
- שימוש ב-QGIS כדי לייבא תמונות EE באמצעות הפלאגין EE QGIS
אפשר להשתמש בפלטות צבעים רגילות?
להשתמש בחבילת JS של צד שלישי ee-palettes.
איך יוצרים אתר משלכם שמשתמש ב-Earth Engine?
שימוש באפליקציות של Earth Engine לאפליקציות בסיסיות. במקרים מורכבים יותר, אפשר ליצור אפליקציות App Engine שמבוססות על EE.
איך פועלים מזהי מפות?
מזהי מפות (שנקראים mapid ב-API) הם מפתחות שמאפשרים ללקוחות לאחזר משבצות מפה. כל מזהה הוא גיבוב (hash) שנוצר על ידי שליחת ביטוי תמונה לנקודת הקצה getMapId. המזהים שנוצרים הם מפתחות שמצביעים גם על ביטוי התמונה וגם על פרטי הכניסה של המשתמש, שישמשו ליצירת משבצות בשלב מאוחר יותר.
כדי לבקש משבצות מפה, צריך לציין את המיקום של המשבצת (x, y, zoom) ואת ה-mapid (המפתח לתמונה ולאישורים). אפשר להשתמש באותו מזהה כדי לטעון הרבה משבצות מפה. אין הגבלה על השימוש החוזר במפתחות mapid, אבל התוקף שלהם פג אחרי כמה שעות. אנחנו לא מפרסמים מסגרות זמן ספציפיות לגבי משך הזמן שהם נשארים, אבל כל קוד שאתם כותבים צריך להיות עמיד בפני תפוגת התוקף של המזהה.
כדי ליצור את המזהים האלה צריך לאחסן כמות קטנה של נתונים ולאמת את פרטי הכניסה, ולכן מומלץ להשתמש בהם שוב כמה שיותר זמן. אין מכסת API שמשויכת ספציפית לנקודת הקצה getMapId, אבל אם תהליך העבודה כולל יצירת אובייקטים מסוג mapid בקצב שקרוב לקצב של אחזור המשבצות, כנראה שיש בו בעיה. ל-Earth Engine אין נקודת קצה ל-API להסרה, להצגה או לניהול של המזהים האלה, כי אלה משאבים זמניים.
למה ee.Algorithms.If() מדפיס גם את המקרה הנכון וגם את המקרה השגוי?
function a() { print("true"); }
function b() { print("false"); }
// Prints 'true' and 'false'.
ee.Algorithms.If(true, a(), b());
האלגוריתם If() פועל בדיוק כמו כל אלגוריתם אחר ב-Earth Engine, בכך שצריך להעריך את כל הארגומנטים שלו לפני שהאלגוריתם עצמו יכול לפעול.
האלגוריתם מקבל את התוצאות של trueCase ושל falseCase, ואז בוחר אחת מהן ומחזיר אותה על סמך הארגומנט condition. עם זאת, צריך להריץ את שני הנתיבים כדי שהערכים האלה יועברו לאלגוריתם מלכתחילה.
מוצגת לי השגיאה "גודל המטען הייעודי (payload) של הבקשה חורג מהמגבלה"
ניסית לשלוח ל-Earth Engine בקשה גדולה מאוד. בדרך כלל זה קורה כשהקוד משתמש בהרבה לולאות "for" בצד הלקוח, או יוצר FeatureCollection מהרבה אובייקטים של גיאומטריה. במקרה השני, במקום ליצור גיאומטריות כאלה בסקריפט, יוצרים קובץ CSV שמכיל אותן ומעלים אותו לנכס טבלה.
מה ההבדל בין ee.Image.clip() לבין ee.Filter.bounds()?
אפשר לעיין בשרשור הזה ב-GIS Stack Exchange.
הפונקציה ee.Image.clip() מסתירה פיקסלים שלא מצטלבים עם ee.Geometry או ee.Feature נתונים, כך שהם הופכים לשקופים בתצוגות החזותיות ולא נכללים בחישובים. אפשר לחשוב על זה כמו חיתוך פיקסלים מתמונה.
הפונקציה ee.Filter.bounds() מסננת אובייקטים מסוג ee.Image מתוך ee.ImageCollection על סמך חיתוך של תמונה עם ee.Geometry או ee.Feature. הוא משמש להגבלת היקף הניתוח רק לתמונות שחוצות אזור נתון, מה שעוזר לבצע אופטימיזציה של ביטויים.
איך ממירים פיקסלים של תמונה לאוספי מאפיינים, עם מאפיין אחד לכל פיקסל?
משתמשים בפונקציה ee.Image.sample(). דוגמאות לשימוש מופיעות בדף העזרה של ה-API של הפונקציה.
מה ההבדל בין ee.ImageCollection.merge() לבין ee.ImageCollection.combine()?
הפונקציה ee.ImageCollection.merge() ממזגת את כל התמונות משני אוספים לאוסף אחד, גם אם לתמונות המתאימות יש רצועות, מטא-נתונים, CRS או קנה מידה תואמים. זה איחוד של שני אוספים. השיטה combine() משלבת את הרצועות של תמונות תואמות משני אוספים לאוסף אחד. לתמונות תואמות יש את אותו מזהה (המאפיין system:index). זהו איחוד פנימי של שני אוספים על סמך מזהה התמונה, שבו משולבות רצועות מתמונות תואמות. בתמונות תואמות, רצועות מהתמונה המשנית מצורפות לתמונה הראשית (אפשר להחליף את התמונה הראשית). אם אין תמונות תואמות, מוחזר אוסף ריק.
איך מסננים אוספי תמונות לפי כמה מרווחי תאריכים?
אפשר לעיין בשרשור הזה ב-GIS Stack Exchange.
אפשר merge() כמה קולקציות ביחד או להשתמש בee.Filter.or().
איך יוצרים תיבה תוחמת מסביב לנקודה נתונה?
// Buffer the point by a chosen radius and then get the bounding box.
var LNG = -117.298;
var LAT = 45.162;
var point = ee.Geometry.Point([LNG, LAT]);
var buffer = point.buffer(30000); // half of box width as buffer input
var box = buffer.bounds(); // draw a bounding box around the buffered point
Map.centerObject(box);
Map.addLayer(point);
Map.addLayer(box);
// Map the buffer and bounds procedure over a point feature collection.
var pointCol = ee.FeatureCollection([
ee.Feature(ee.Geometry.Point([LNG + 1, LAT])),
ee.Feature(ee.Geometry.Point([LNG - 1, LAT]))
]);
var boxCol = pointCol.map(function(feature) {
var box = feature.buffer(30000).bounds();
return feature.setGeometry(box.geometry());
});
Map.addLayer(boxCol);
Data Catalog
אפשר להוסיף את מערך הנתונים X?
מדווחים על באג בבקשה של מערך נתונים לפי המדריך לבקשת מערך נתונים.
אפשר גם להעלות נתונים לתיקיית הבית ב-Earth Engine. אפשר לקרוא מידע נוסף במאמרים ייבוא נתוני רסטר וייבוא נתוני טבלה.
יש גרסה חדשה של קבוצת נתונים קיימת
מדווחים על באג במערך הנתונים לפי המדריך לבקשת מערך נתונים, ומציינים שאתם מבקשים עדכון של מערך הנתונים.
קבוצת נתונים קיימת לא מעודכנת או שחסרים בה נכסים
לפני שאתם מדווחים על בעיה, ודאו, אם אפשר, שהנכסים שנבחרו באמת קיימים באתר של ספק מערך הנתונים. פרטים נוספים זמינים במדריך לתמונות חסרות.
אם אתם מחפשים נכס באמצעות סינון של ImageCollection, ודאו שהמסננים לא מגבילים מדי.
חשוב לשים לב במיוחד לנקודות הבאות:
סוכנות החלל האירופית לא הפיקה נתוני Sentinel-2 SR (נתונים ברמה 2) לסצנות מוקדמות ברמה 1.
ל-Landsat אין כיסוי עולמי לפני שנת 2000.
קבוצת נתונים קיימת מכילה ערכים שגויים
לפרסם פוסט בפורום המפתחים. הוסיפו סקריפט שמגדיל את הרזולוציה המקורית של הנכס ומבהיר אילו ערכים שגויים. הסבירו איפה בדיוק ראיתם את הערך החלופי.
איפה עוד אפשר לשאול על מערכי נתונים?
לשאלות על מערכי הנתונים של NASA, אפשר להיכנס לפורום NASA Earth Data.
אם יש לכם שאלות לגבי ארגזי הכלים שפועלים על מערכי הנתונים של Copernicus, אתם יכולים להיכנס לפורומים של S1, S2 ו-S3.
מה הגודל של קטלוג EE?
נכון לאוקטובר 2023, הקטלוג מכיל יותר מ-1,000 מערכי נתונים. הגודל שלו בדיסק הוא יותר מ-90 פטה-בייט (אחרי דחיסה ללא אובדן מידע).
באיזו תדירות הנתונים ב-EE מתעדכנים?
בדרך כלל, כל מערכי הנתונים המתמשכים מתעדכנים לפחות פעם ביום (אם כי לא בכל מערכי הנתונים האלה יש נתונים חדשים מדי יום). חלק ממערכי הנתונים מתעדכנים כמה פעמים ביום. עם זאת, אין מדיניות שמבטיחה שהנכסים העדכניים ביותר יהיו בקטלוג.
איך אפשר לראות את התוכן של קטלוג EE באופן פרוגרמטי?
רשימת מערכי הנתונים מיוצאת בפורמט STAC אל קטגוריה של Google Cloud Storage gs://earthengine-stac.
קובץ הרשומה הוא catalog.json.
האם אפשר להשתמש בנתונים או בתמונות של מפות Google לצורך ניתוח?
Google לא מוכרת נתונים של מפות בסיס לצורך ניתוח, וגם לא מעניקה רישיון לשימוש בהם.
איך אפשר למצוא את התאריך שבו נכס הוטמע?
המאפיין 'system:version' של הנכס הוא חותמת הזמן של ההטמעה, בפורמט של מיקרו-שניות מאז ראשית זמן יוניקס (Unix epoch). הנה דוגמה להמרה של חותמת הזמן של הטמעת תמונה מ-Landsat לפורמט קריא לאנשים.
var image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508');
print('Ingest date', ee.Date(image.getNumber('system:version').divide(1000)));
האם בקטלוג של Earth Engine יש מטא-נתונים של JSON-LD?
כן, המטא-נתונים של JSON-LD מוטמעים בדפי ה-HTML של הקטלוג. לדוגמה, הדף של Sentinel-2 מכיל את הבלוק הבא:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "Earth Engine Data Catalog",
"item": "https://developers.google.com/earth-engine/datasets"
},{
"@type": "ListItem",
"position": 2,
"name": "Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-1C",
"item": "https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_HARMONIZED"
}]
}
</script>
Landsat
איך האלגוריתם של simpleComposite מוטמע?
ההטמעה בצד השרת מקבילה לקוד ה-JavaScript הזה.
איך אפשר ליצור קומפוזיציות ללא עננים מנתוני החזרת פני השטח של Landsat?
לנתוני Landsat ברמה 2 (החזרת פני השטח) יש כמה רצועות איכות שאפשר להשתמש בהן כדי להסתיר עננים ורכיבי תמונה לא רצויים אחרים. דוגמה לשימוש ברצועות האלה כדי לעבד תמונות Landsat 8 SR וליצור תמונה מורכבת חציונית ללא עננים מופיעה בפוסט הזה ב-GIS Stack Exchange. אותו תהליך משמש ליצירת תמונה מורכבת ללא עננים לשימוש בדוגמאות לסיווג בפיקוח במדריך למפתחים.
האם צריך לבצע הרמוניזציה של מידת ההחזרה של פני השטח ב-Landsat בין חיישנים?
Roy et al., 2016 כלל ניתוח של ההבדלים בהחזרת האור בין החזרת האור בחלק העליון של האטמוספירה לבין החזרת האור מפני השטח ב-Landsat 7-8. הם פרסמו את מקדמי ה-OLS וה-RMA כדי שהקוראים יוכלו להמיר את ערכי ההחזרה של נתוני חיישן אחד לנתוני חיישן אחר. בשורה האחרונה של המאמר נכתב: "למרות שההבדלים בין החיישנים קטנים מאוד, יכולה להיות להם השפעה משמעותית בהתאם לאפליקציה של נתוני Landsat". עם זאת, הניתוח הזה התבסס על נתונים שנאספו לפני הגבייה.
השיפורים שבוצעו במהלך העיבוד מחדש של Collection 1 ו-Collection 2 עשויים להשפיע על הקשר בין החיישנים, אבל עד כמה שידוע לנו, לא בוצעו ניתוחים דומים ל-Roy et al. (2016) לנתונים של Collection 1 או Collection 2. למרות שאין ניתוח רשמי, נראה שיש הסכמה כללית בקרב משתמשי Landsat משפיעים שאין צורך בתיקון לנתוני Collection 2, Level 2 (החזרת פני השטח). לדוגמה, בתשובה לשאלה לגבי הצורך בהרמוניזציה של Collection 2, Level 2, מייק וולדר מצוות המדע של Landsat ציין שבהתאם לאופי של האפליקציה הרלוונטית (כולל מיפוי תכסית קרקע וזיהוי שינויים), מוצרי ההחזרה מפני השטח של Collection 2 מתאימים ואמינים מאוד, ללא צורך בהתאמה בין חיישנים.
איך אפשר להסתיר עננים וצללים של עננים בתמונות MSS?
מודול msslib של צד שלישי לעורך הקוד של JavaScript כולל הטמעה של אלגוריתם MSScvm, וגם פונקציות שימושיות אחרות לבדיקה ולהכנה של נתוני MSS.
ניהול נתונים
מי הבעלים של הנתונים שאני מעלה?
בהתאם לתנאים ולהגבלות של Earth Engine, הלקוחות הם הבעלים של הנתונים שהם מעלים ל-Earth Engine.
אני לא מצליח/ה להעלות נתונים!
בודקים את הסטטוס של משימת ההעלאה בחלונית Tasks (משימות) בפינה הימנית העליונה של עורך הקוד. אפשר גם להיכנס לדף המשימות הייעודי.
אם אין משימה, כנראה שניסיתם להעלות את הקובץ דרך עורך הקוד, אבל בגלל בעיה ברשת ההעלאה לא הסתיימה ולכן המשימה לא נוצרה. נסו להשתמש בדפדפן אחר או במחשב אחר.
אם יש משימה שנכשלה, בודקים את השגיאה שמוצגת. אם לא מופיעה הודעת שגיאה ספציפית, קודם צריך לוודא שהקובץ לא פגום. לשם כך, מריצים את הפקודה gdalinfo לקובצי רסטר או את הפקודה ogr2ogr לקובצי וקטור.
הפקודות האלה ינסו לקרוא את כל הנתונים מקובצי המקור, ואם הקבצים פגומים, יוצגו שגיאות.
דוגמה לקריאה ל-gdalinfo:
gdalinfo -mm -stats -checksum file.tif
דוגמה לקריאה ל-ogr2ogr שתמיר את in.shp ל-out.csv:
ogr2ogr -lco GEOMETRY=AS_WKT -f CSV out.csv in.shp
אם הקובץ נראה תקין, פרסמו את מזהה המשימה שנכשלה כטקסט (לא כצילום מסך) ברשימת התפוצה של המפתחים.
מזהי המשימות הם בפורמט הזה: 4C25GIJBMB52PXTEJTF4JLGL. אם אפשר, הגדירו את קובץ המקור כקריא באופן ציבורי. אם זה קובץ פרטי, צריך לשתף אותו רק עם earthengine@google.com כדי שצוות Earth Engine יוכל לבדוק אותו. אם אי אפשר לשתף את קובץ המקור, צריך לספק לפחות את הפלט של gdalinfo -mm -stats -checksum.
אם Earth Engine לא תומך בהיטל מסוים, תצטרכו להגדיר מחדש את ההיטל של הנתונים לפני ההעלאה, למשל באמצעות gdalwarp.
איך מעלים קובץ בפורמט NetCDF או בפורמט רסטר אחר שלא נתמך?
אפשר להעלות ל-Earth Engine רק קובצי GeoTIFF. אפשר להמיר פורמטים אחרים שתואמים ל-GDAL ל-GeoTIFF באמצעות gdal_translate. דוגמה:
gdal_translate -co COMPRESS=DEFLATE file.nc file.tif
שימו לב שחלק מקובצי NetCDF או HDF מורכבים מכמה קבוצות משנה של נתונים שאפשר לגלות באמצעות gdalinfo. הפקודה gdal_translate במקרה הזה תיראה כך (שימו לב לנתיב בין המירכאות הכפולות):
gdal_translate HDF4_EOS:EOS_GRID:"/tmp/MCD12Q1.A2001001.h00v08.005.2011055224312.hdf":MOD12Q1:Land_Cover_Type_1 file.tif
לפעמים קובצי NetCDF לא כוללים היטל ש-GDAL מזהה. במקרה כזה, תצטרכו להגדיר את ההיטל ואת ההיקף המרחבי בשורת הפקודה של gdal_translate. דוגמה:
gdal_translate -a_srs EPSG:4326 -a_ullr -180 90 180 -90 file.nc file.tid
באילו אלגוריתמים של דחיסה אפשר להשתמש בקובצי GeoTIFF שמעלים?
אפשר להעלות קובצי GeoTIFF שנדחסו באמצעות DEFLATE, JPEG, JPEG-XL/JXL, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WEBP או ZSTD. קובצי COG ש-Earth Engine קורא במקום (באמצעות ee.Image.loadGeoTIFF() או כנכסים שמגובים ב-COG) יכולים להשתמש ב-DEFLATE, ב-JPEG, ב-LZW, ב-PACKBITS, ב-ZSTD או ללא דחיסה (ראו שיטות מומלצות ל-COG).
ZSTD היא בחירה טובה באופן כללי, כי היא מאפשרת לבטל את הדחיסה במהירות ועדיין מציעה דחיסה טובה של רוב התמונות.
כדי להחיל דחיסת ZSTD כשמשתמשים ב-gdal_translate, צריך להוסיף את האפשרויות האלה. אם הנתונים כוללים ערכים של נקודה צפה, משנים את PREDICTOR ל-3. (אם אתם מתכננים לרשום קבצים כ-COG במקום להעלות אותם, עיינו במדריך לרישום COG).
gdal_translate in.tif out.tif \
-co BIGTIFF=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co PREDICTOR=2 \
-co ZSTD_LEVEL=16 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS
הטמעת הרסטר שלי פועלת כבר כמה ימים ולא הסתיימה.
באמצעות gdalinfo, בודקים אם בקובץ מוגדרת אפשרות ה-GDAL הבאה:
INTERLEAVE=PIXEL. בקובצי GeoTIFF עם האפשרות הזו והרבה ערוצים, יכול להיות שתהליך ההטמעה לא יסתיים אף פעם כי הפריסה של קבצים כאלה גורמת לקריאה איטית מאוד.
לפני שמעלים קבצים כאלה, כדאי לנסות להמיר אותם לפריסה של רצועות משולבות:
gdal_translate -co "INTERLEAVE=BAND" src.tif dst.tif
זה רלוונטי להטמעה. נכסים שמגובים ב-COG תומכים בשני סוגי ה-interleave (ראו קבצים עם פס יחיד לעומת קבצים עם כמה פסים).
התמונות שהעליתי לא תואמות למפת הבסיס.
אם הנתונים מוסטים מעט ממפת הבסיס, כנראה שההיטל מכיל נתון שגוי (הנחה לגבי צורת כדור הארץ).
זה קורה בדרך כלל עם היטל סינוסואידלי שלא ניתן לקודד באופן מלא במטא-נתונים של GDAL. אם אתם יודעים מה צריך להיות ההיטל של היעד (למשל, SR-ORG:6974 לקבצים שמשתמשים בהיטל סינוסואידלי של MODIS), הגדירו את הדגל --crs במהלך ההעלאה משורת הפקודה או את השדה crs של מניפסט ההעלאה.
אם הנתונים נראים מעוותים מאוד או שהם נמצאים במקום הלא נכון, כנראה שההיטל או הטרנספורמציה האפינית שגויים.
הרסטר שלי מופיע רק מעל חצי הכדור המזרחי.
כנראה העליתם רסטר גלובלי שמשתרע על פני טווח קווי האורך [0, 360]. עם זאת, ב-Earth Engine, הרסטרים צריכים להיות בטווח [180, 180-]. החלפה בין החצי השמאלי והחצי הימני של הרסטר לפני ההטמעה. כדאי לעיין בהצעות האלה של GIS Stack Exchange.
למה תמונת הסיווג שהוטמעה נראית מנוקדת?
כנראה שהשתמשתם במדיניות הפירמידה שמוגדרת כברירת מחדל ב-MEAN.
בתמונות סיווג, צריך להשתמש במדיניות הפירמידה MODE. בתמונות QA/bitmask, צריך להשתמש במדיניות הפירמידה SAMPLE.
מופיעה השגיאה הבאה: No data value -128.0 cannot be applied to band #0 of type Short<0, 255>.
GDAL לא יכול להתייחס לרצועות של בייט אחד כמכילות מספרים שלמים עם סימן, ולכן הוא קורא רצועות כאלה כמספרים שלמים ללא סימן. זה יתנגש עם ערכים שליליים של "אין נתונים".
אם הערכים הם מספרים שלמים עם סימן, צריך להשתמש בהעלאת מניפסט ולהוסיף את הקוד הבא לקטע של קבוצת המשבצות שמכיל את הקובץ: data_type: "INT8"
אם הערכים הם מספרים שלמים ללא סימן, בקובץ יש ערך nodata שגוי. אפשר לשנות את הערך הזה בזמן ההעלאה לערך הנתונים הנכון (או לערך שלא מופיע אף פעם, אם יש כזה). אפשר גם להשתמש ב-gdal_translate -a_nodata כדי לשנות את הערך של nodata או ב-gdal_edit.py -unsetnodata כדי להסיר אותו.
איך מעלים קובץ בפורמט GeoJSON או בפורמט וקטורי אחר שלא נתמך?
אפשר להשתמש ב-ogr2ogr כדי לתרגם פורמטים תואמי OGR ל-CSV או ל-SHP. דוגמה:
or2ogr -f "ESRI Shapefile" file.shp file.kml
חשוב לדעת שבהעלאות של קובצי CSV, עמודת הגיאומטריה יכולה להכיל GeoJSON.
אני רוצה להעלות נתונים באמצעות Python, או להעלות הרבה קבצים בבת אחת.
משתמשים בהעלאה משורת הפקודה. כדי להעלות קבצים כאלה, צריך קודם להעביר את קובצי המקור לקטגוריה של GCS (Google Cloud Storage). השימוש ב-GCS לא עולה כסף כל עוד לא חורגים מהמגבלות של תוכנית בחינם – ראו דף התמחור.
אני רוצה להעלות פסיפס רסטר גדול שמחולק להרבה משבצות.
אם לכל הקבצים יש את אותו היטל וגודל פיקסלים, פשוט מעלים אותם יחד לאותו נכס – הם יחוברו לפסיפס באופן אוטומטי.
אם לקבצים יש היטלים או גודלי פיקסלים שונים, אי אפשר לשלב אותם לנכס רסטר אחד. במקום זאת, מעלים כל משבצת כנכס נפרד לאותו ImageCollection שאפשר להפוך לפסיפס באמצעות ImageCollection.mosaic().
אני מנסה להעלות פסיפס ומופיעות שגיאות לגבי אריחים לא תואמים.
המשבצות של פסיפסי הרסטר ב-Earth Engine צריכות להיות באותו היטל ובאותו גודל פיקסלים. בנוסף, המשבצות צריכות להיות מיושרות בדיוק לפי גבולות הפיקסלים.
אני מנסה להעלות קובץ מקטגוריית GCS, אבל Earth Engine לא מוצא אותו.
יכול להיות שהשתמשתם בחשבונות Google שונים להעלאה ל-GCS ולחיבור ל-Earth Engine. מוודאים שהחשבון שמשמש להתחברות ל-Earth Engine יכול לקרוא את קובץ ה-GCS. אם ההתחברות לכמה חשבונות בדפדפן מבלבלת, אפשר להתחבר ל-Earth Engine בחלון פרטי בדפדפן.
אני רוצה לייצא הרבה נכסים בבת אחת.
צריך לייצא כל תמונה בנפרד.
אני רוצה להעביר או למחוק Folder או ImageCollection באמצעות פקודה אחת.
הפקודה earthengine rm -r מוחקת תיקייה או אוסף וכל מה שיש בהם, אבל נכס אחד בכל פעם, כך שאוסף גדול יכול לקחת שעות. כדי לבצע את הפעולה מהר יותר, מוחקים את הצאצאים במקביל באמצעות סקריפט ואז מוחקים את ההורה (ראו עבודה עם אוספים גדולים). אותה גישה פועלת בכל אוסף או תיקייה שטוחים. כדי לרוקן תיקייה שמכילה תיקיות או אוספים אחרים, צריך להתחיל מלמטה, כי אי אפשר למחוק מאגר לפני שהוא ריק. כדי להעביר, משתמשים בפקודה mv באותו אופן.
אני רוצה לגשת ישירות לנתוני Earth Engine מחוץ ל-EE.
ל-QGIS יש פלאגין של Earth Engine.
ל-GDAL יש דרייבר של Earth Engine.
מערכות אחרות יכולות להשתמש ב-API בארכיטקטורת REST של EE.
אני רוצה לעדכן חלק מהנכס שלי ב-Earth Engine בלי להטמיע אותו מחדש באופן מלא.
אי אפשר לעדכן נתוני רסטר או וקטור שהועלו ל-EE. אפשר לעדכן רק מאפיינים של מטא-נתונים של נכסים. היוצא מן הכלל הוא נכסים שמגובים ב-COG, שאפשר להפנות אותם לקובץ Cloud Storage מעודכן על ידי רישום מחדש שלהם כשהאפשרות "החלפה" מופעלת.
אני מאבד/ת את הגישה לחשבון שלי. מה לעשות עם הנכסים שלי?
אם המדיניות של החשבון המקורי מאפשרת העברת נתונים, צריך לשתף את הנכסים עם חשבון אחר ואז להעתיק את הנכסים כדי שהם יהיו בבעלות החשבון החדש. אם יש הרבה נכסים שצריך להעביר, אפשר להשתמש בכלי ההעתקה של שורת הפקודה.
אם חשבון נמחק, אי אפשר יותר לגשת לנכסים שבבעלותו.
התמונה שייצאתי נמצאת במקום הלא נכון.
בהיטלים מסוימים, כמו היטל סינוסואידלי או היטל חרוטי, לפעמים אי אפשר לאחסן בקובצי GeoTIFF את כל הפרמטרים הנדרשים של ההיטל. כתוצאה מכך, הקובץ המיוצא מופיע במקום הלא נכון כשמציגים אותו בכלי GIS למחשב או כשמטמיעים אותו מחדש ב-EE.
כדי לפתור את הבעיה, צריך לציין פרמטר ייצוא crs שידוע שעובד טוב עם קובצי GeoTIFF. לדוגמה, אפשר להשתמש בקוד EPSG של אזור ה-UTM שמכיל את האזור הרלוונטי.
נכסים של אוסף מאפיינים שיוצאו לא שומרים על המאפיינים שהגדרתי.
אף פונקציית Export.table.* לא שומרת מאפיינים ברמת הטבלה בפלט.
בפורמטים רבים של פלט (למשל CSV, GeoJSON), אין תמיכה במטא-נתונים כאלה. הפונקציה Export.table.toAsset יכולה לתמוך במאפיינים ברמת הטבלה, אבל כרגע היא לא תומכת בהם.
טבלאות שמיוצאות ל-Drive בפורמט CSV מומרות לפורמט XLSX.
בהתאם להגדרות שלכם ב-Google Drive, טבלאות CSV שאתם מייצאים מ-Earth Engine יכולות להפוך לקובצי XLSX עם השפעות לא מכוונות, כמו המרות של סוגי נתונים. כדי לשנות את ההתנהגות של הייצוא הבא, פועלים לפי השלבים הבאים.
- ב-Google Drive באינטרנט, לוחצים על גלגל השיניים של ההגדרות בפינה השמאלית העליונה.
- לוחצים על 'הגדרות'.
- גוללים אל "המרת קבצים שהועלו לפורמט של עורכי Google Docs" ומבטלים את הסימון של האפשרות הזו.
Cloud Optimized GeoTIFFs (COGs)
למידע נוסף, קראו את הסקירה הכללית על COG ואת המדריך לרישום COG.
שיתפתי נכס שמגובה ב-COG, אבל שותפי העריכה שלי מקבלים הודעת שגיאה לגבי הרשאות.
נכס שמגובה ב-COG הוא מצביע לקבצים בקטגוריה של Cloud Storage, ולכן שותפי העריכה צריכים גישת קריאה גם לנכס ב-Earth Engine וגם לקטגוריה. בקטגוריה, מקצים להם את התפקידים Storage Object Viewer ו-Storage Bucket Viewer. אם מופיעה שגיאת הרשאה בנכס שהם יכולים לראות, בדרך כלל זה אומר שאחד משני התפקידים האלה חסר. איך מגדירים הרשאות
באיזה מיקום של קטגוריית Cloud Storage כדאי להשתמש כדי לאחסן נכסי COG?
רק כמה מיקומים בארה"ב נתמכים, ו-Earth Engine דוחה בקשות רישום וקריאה של קטגוריות בכל מקום אחר. מיקומי קטגוריות נתמכים
החלפתי קובץ COG ב-Cloud Storage. למה הנכס לא נטען או עדיין מציג את הנתונים הישנים?
כשרושמים COG, Earth Engine מצמיד את יצירת האובייקט (הגרסה) של הקובץ, כך שהחלפת הקובץ במקום לא מעדכנת את הנכס. רושמים מחדש את הנכס עם אותו שם ומפעילים את האפשרות להחלפה. אין צורך למחוק אותו קודם. עדכון, החלפה ומחיקה של נכסים שמגובים ב-COG.
איך אפשר לדעת לאיזו גרסה של קובץ מפנה הנכס שמגובה ב-COG?
במטא-נתונים של הנכס (ee.data.getAsset()) מוצג הדור המוצמד כסיומת ב-URI של הקובץ. דורות של אובייקטים
מה קורה אם מוחקים קובץ COG ב-Cloud Storage אבל לא את הנכס ב-Earth Engine, או להיפך?
הם עצמאיים. אם תמחקו את הנכס ב-Earth Engine, הקבצים ב-Cloud Storage לא יושפעו. אם תמחקו את הקובץ, הנכס יישאר אבל בדרך כלל לא יהיה אפשר לקרוא את הפיקסלים שלו. מחזורי חיים נפרדים
מה הדרך הכי מהירה למחוק או להחליף ImageCollection גדול שמגובה ב-COG?
אין מחיקה באצווה או מחיקה רקורסיבית ב-Earth Engine API, ו-earthengine rm -r מוחק נכס אחד בכל פעם. אם אתם מחליפים תמונות, רשמו אותן מחדש כשהאפשרות overwrite מופעלת במקום למחוק אותן. אם אתם מוחקים, בצעו את הפעולה במקביל באמצעות סקריפט. במאמר עבודה עם אוספים גדולים מוסבר איך לעשות את זה ומוצג סקריפט לדוגמה.
למה הרישום שלי ל-COG לא מופיע בכרטיסייה "משימות"?
רישום של COG הוא קריאה סינכרונית ל-API שמוסיפה לאינדקס רק את המטא-נתונים של הקובץ, ולא משימת הטמעה באצווה, ולכן לא נוצרת משימה. הנכס יהיה זמין בכרטיסייה נכסים ברגע שהקריאה תוחזר. איך שולחים את בקשת הרישום
אפשר לשלב כמה קובצי COG בנכס אחד של Earth Engine?
רק כשכל קובץ מכיל ערוצים שונים של אותה סצנה: צריך לרשום כל קובץ כקבוצת משבצות משלו במניפסט ולמפות את הערוצים לקבוצות המשבצות. אי אפשר ליצור פסיפס של קבצים סמוכים מבחינה מרחבית לנכס אחד שמגובה ב-COG. צריך לרשום כל קובץ כתמונה משלו ב-ee.ImageCollection ולקרוא ל-mosaic(). הגבלות על המניפסט
באילו סכימות דחיסה, גודלי משבצות וסוגי פיקסלים אפשר להשתמש בנכסים שמגובים ב-COG?
במאמר שיטות מומלצות להכנת קובצי COG חיצוניים מפורטים סכימות הדחיסה, גודלי המשבצות וסוגי נתוני הפיקסלים הנתמכים. עדיין אפשר להעלות כנכסים רגילים קבצים בפורמטים של דחיסה ש-Earth Engine לא יכול לקרוא ישירות כ-COG.
מופיעה השגיאה "לא ניתן לקרוא את המטא-נתונים של קובץ ה-TIFF ב-10,000,000 הבייטים הראשונים".
Earth Engine קורא רק את תחילת הקובץ כשהוא טוען או רושם אותו. תמונות גדולות עם הרבה משבצות וקבצים קטועים חורגים מהמגבלה הזו. במאמר בחירת מידות לקובץ מוסבר מהי המגבלה ואיך לא לחרוג ממנה.
מה ההבדל בין ee.Image.loadGeoTIFF() לבין נכס רשום כשהקובץ משתנה?
ee.Image.loadGeoTIFF() קורא את הגרסה הנוכחית של הקובץ בכל חישוב או בקשה לקטע מפה, כך שהוא קולט את ההחלפות (באופן לא אחיד במפה, כי קטעי המפה שעברו רינדור נשארים במטמון). נכס רשום תמיד מצמיד את הדור שאיתו הוא נרשם, וצריך לרשום אותו מחדש כדי לראות קובץ חדש. בתמורה, טביעת הרגל והמטא-נתונים שלו נוספים לאינדקס, וזה מה שמאפשר להשתמש בו באוספים גדולים. קריאת קובצי COG מ-Cloud Storage
עורך הקוד
אני לא מצליח/ה להיכנס לעורך הקוד כי הוא מבקש ממני להשתמש בחשבון הלא נכון.
מתנתקים, בוחרים את החשבון שרשום לשימוש ב-Earth Engine בדף "בחירת חשבון", ואז בוחרים שוב את אותו חשבון בדף השני "בחירת חשבון כדי להמשיך אל Earth Engine Code Editor" (הניסוח המדויק עשוי להיות שונה).
אני רוצה לצלם מסך של מפה גלובלית, אבל אני לא אוהב את היטל מרקטור לאינטרנט.
היטל המפה שבו משתמשים בעורך הקוד הוא Web Mercator ('EPSG:3857'). ההיטל הזה מגדיל את האובייקטים ככל שמתרחקים מקו המשווה, כך שאזורים בקווי רוחב גבוהים נראים גדולים בהרבה ממה שהם באמת, בהשוואה לאזורים שקרובים לקו המשווה. אי אפשר לשנות את ההיטל של אזור המפה בעורך הקוד, אבל אפשר "לצייר" תמונה בהיטל לבחירתכם באזור Web Mercator באמצעות השיטה ee.Image.changeProj.
במאמרי העזרה של ה-API של השיטה מופיעה דוגמה להצגת DEM גלובלי במפה של Code Editor בהיטל רובינסון.
חשוב לשים לב שצריך להשתמש בשיטה הזו רק למטרות תצוגה חזותית, כי כלי הבדיקה והשרטוט של עורך הקוד עדיין פועלים ב-Web Mercator.
הסקריפט שלי לא נשמר (Script error: Unknown commit).
אם מופיעה ההודעה Script error: Unknown commit כששומרים סקריפט, כנראה שהמאגר שאליו שומרים לא מסונכרן.
הסיבה למצב הזה משתנה וקשה לזהות אותה. כדי לפתור את הבעיה, נסו לרענן את רשימת הסקריפטים באמצעות הכפתור שבפינה השמאלית העליונה של הכרטיסייה "סקריפט". אם זה לא עובד, נסו ליצור מאגר חדש באמצעות הלחצן "חדש" בכרטיסייה "סקריפט" ולשמור שם את הסקריפט (יכול להיות שתצטרכו להעביר סקריפטים למאגר החדש מהמאגר שלא מסונכרן).
למה אני רואה שגיאות 400 חוזרות בעורך הקוד?
אם מופיעות שגיאות 400 חוזרות בעורך הקוד, עוברים אל https://myaccount.google.com/connections, מחפשים את Earth Engine Code Editor ברשימת האפליקציות והשירותים, בוחרים בו, ואז בוחרים באפשרות "מחיקת כל החיבורים שיש לך עם Earth Engine Code Editor" ומאשרים. לאחר מכן פותחים את Code Editor ומבצעים אימות מחדש.
איך משחזרים סקריפטים ותיקיות שנמחקו?
אם מחקתם בטעות סקריפט או תיקייה במאגר קיים, היסטוריית ה-commit המלאה נשמרת ביומני Git בשרתים שלנו. כדי לשחזר סקריפטים או תיקיות שנמחקו, אתם יכולים לשכפל את המאגר באופן מקומי באמצעות כלי שורת הפקודה הרגילים של Git.
לעומת זאת, מחיקה של מאגר (users/username/repository) שלם מסירה אותו ואת היסטוריית ה-commit שלו מ-earthengine.googlesource.com באופן סופי, ואי אפשר לבטל את הפעולה או לשחזר את המאגר.
במדריך שחזור סקריפטים והעברת מאגרים מופיעות הוראות מפורטות ליצירת פרטי כניסה ל-Git, לשכפול המאגר ולשחזור קבצים או תיקיות שנמחקו.
איך משנים את השם של מאגר הסקריפטים ברמה הבסיסית (root)?
תיקיית השורש של הסקריפט (users/username) מקושרת לרישום המקורי של חשבון Earth Engine. אי אפשר לשנות את השם שלו ישירות בקצה העורפי, כי פעולה כזו תגרום לשיבוש של סקריפטים חיצוניים או פרויקטים של שותפי עריכה שמייבאים את הקוד המודולרי באמצעות הנתיב require('users/username/repository:...').
אם אתם צריכים מרחב שמות חדש, הפתרון הנתמך הוא להעביר את העבודה לחשבון חדש:
- רושמים חשבון חדש ב-Earth Engine באמצעות Google Identity החדשה (שיוצרת תיקיית שורש נקייה ב-
users/new_username). - פועלים לפי ההוראות להעברת מאגר כדי לשכפל את המאגר הישן ולהעביר את כל ההיסטוריה שלו למאגר הריק החדש.
שיקולים חשובים:
- מודולים ציבוריים: אם יש לכם מודולים ציבוריים שאחרים מסתמכים עליהם, מומלץ מאוד להשאיר את החשבון הישן ואת המאגר פעילים כדי לא לשבש את תהליכי העבודה שלהם.
- סקריפטים פרטיים: אם הסקריפטים שלכם פרטיים לחלוטין, אתם יכולים לעדכן את הצהרות הייבוא של
require()כך שיפנו לנתיב המאגר החדש, ואז למחוק בבטחה את המאגרים הישנים.