אם אתם צריכים יותר גמישות בהעלאת תמונות ל-Google Earth Engine (EE) ממה שמאפשרים ממשק המשתמש של Code Editor או הפקודה upload של כלי שורת הפקודה 'earthengine', אתם יכולים לתאר העלאת תמונה באמצעות קובץ JSON שנקרא "מניפסט" ולהשתמש בפקודה upload image --manifest של כלי שורת הפקודה.
ב-notebook הזה של Colab יש דוגמה מלאה שמראה איך להעלות משבצות של תמונות כנכס אחד באמצעות מניפסט.
הגדרה חד-פעמית
- אפשר להעלות מניפסט רק עם קבצים שנמצאים ב-Google Cloud Storage. כדי להתחיל להשתמש ב-Google Cloud Storage, יוצרים פרויקט ב-Google Cloud (אם עדיין אין לכם פרויקט). שימו לב: כדי להגדיר את החשבון, צריך לציין כרטיס אשראי לחיוב. בשלב הזה, EE עצמו לא מחייב אף אחד, אבל העברת קבצים ל-Google Cloud Storage לפני שמעלים אותם ל-EE תהיה כרוכה בעלות קטנה. בנפחי העלאה אופייניים (עשרות או מאות ג'יגה-בייט), העלות תהיה נמוכה למדי.
- בפרויקט, מפעילים את Cloud Storage API ויוצרים קטגוריה.
- מתקינים את לקוח Python של Earth Engine. הוא כולל את כלי שורת הפקודה
earthengine, שבו נשתמש כדי להעלות נתונים. - להעלאות אוטומטיות, כדאי להשתמש בחשבון שירות של Google Cloud שמשויך לפרויקט. לא צריך חשבון שירות בשביל הבדיקה, אבל כדאי להתחיל להכיר את השימוש בהם.
אם קובצי המקור גדולים מאוד (100GB או יותר), יכול להיות שהם יועלו מהר יותר אם תפצלו אותם לכמה משבצות.
מזהי נכסים ושמות
בנכסים שבבעלות פרויקט בענן, משתמשים במוסכמה הזו למתן שמות לנכסים: projects/some-project-id/assets/some-asset-id.
מידע ולמידה על שמות של נכסים בפרויקטים מדור קודם ובנכסים בבעלות המשתמשים
בפרויקטים ישנים, שם הנכס במניפסט צריך להיות שונה מעט ממזהה הנכס שמופיע במקומות אחרים ב-Earth Engine. כדי להעלות נכסים שמזהי הנכסים שלהם מתחילים ב-users/some_user או ב-projects/some_project, שם הנכס במניפסט חייב לכלול את המחרוזת projects/earthengine-legacy/assets/ לפני המזהה. לדוגמה, צריך להעלות את מזהה הנכס users/username/my_geotiff ב-EE באמצעות השם projects/earthengine-legacy/assets/users/username/my_geotiff.
כן, זה אומר שמזהים כמו projects/some_projects/some_asset
מומרים לשמות שבהם projects מוזכר פעמיים:
projects/earthengine-legacy/assets/projects/some_projects/some_asset.
זה מבלבל, אבל הכרחי כדי לעמוד בתקנים של Google Cloud API.
שימוש במניפסטים
מניפסט בסיסי מוצג בקטע הקוד הבא. הוא מעלה קובץ בשם small.tif מקטגוריה של Google Cloud Storage בשם gs://earthengine-test.
{
"name": "projects/some-project-id/assets/some-asset-id",
"tilesets": [
{
"sources": [
{
"uris": [
"gs://earthengine-test/small.tif"
]
}
]
}
]
}כדי להשתמש בו, שומרים אותו בקובץ בשם manifest.json ומריצים את הפקודה:
earthengine upload image --manifest /path/to/manifest.json
(הקובץ gs://earthengine-test/small.tif קיים וניתן לקריאה באופן ציבורי – אפשר להשתמש בו לבדיקה).
קבוצות משבצות
המבנה המורכב של קובץ המניפסט בפורמט JSON נחוץ כדי לספק גמישות מספקת להתמודדות עם אתגר נפוץ בהעלאה: איך לתאר את כל הדרכים האפשריות לשילוב פיקסלים מכמה קובצי מקור לנכס אחד. באופן ספציפי, יש שתי דרכים עצמאיות לקבץ קבצים יחד:
- פסיפסים. לפעמים כמה קבצים מייצגים כמה משבצות (לדוגמה, כל משבצת היא ריבוע של מעלה אחת על מעלה אחת). צריך לשלב (למזג) קבצים כאלה באותו פס בנכס EE.
- רצועות נפרדות. לפעמים, כמה קבצים מייצגים כמה ערוצים. קבצים כאלה חייבים להיות מוערמים יחד כרצועות בנכס EE.
(יכול להיות שתצטרכו להשתמש בשתי הדרכים בו-זמנית, אבל זה מצב נדיר).
כדי לתאר את האפשרויות האלה, המניפסטים מציגים את המושג קבוצת משבצות. קבוצת משבצות אחת תואמת למקור GDAL אחד. לכן, לכל המקורות בקבוצת משבצות אחת חייב להיות אותו מבנה GDAL (מספר וסוג של פסים, היטל, טרנספורמציה, ערך חסר). מכיוון שלמקור GDAL יכולות להיות כמה רצועות, קבוצת משבצות אחת יכולה להכיל נתונים של כמה רצועות EE.
בהטמעה של מוזאיקה, המניפסט ייראה כך:
{
"name": "projects/some-project-id/assets/some-asset-id",
"tilesets": [
{
"sources": [
{
"uris": [
"gs://bucket/N30W22.tif"
]
},
{
"uris": [
"gs://bucket/N31W22.tif"
]
}
]
}
]
}אם יש ערוצים נפרדים, המניפסט ייראה כך (צריך גם להוסיף קטע bands כמו שמוסבר בהמשך):
{
"name": "projects/some-project-id/assets/some-asset-id",
"bands": ...,
"tilesets": [
{
"id": "tileset_for_band1",
"sources": [
{
"uris": [
"gs://bucket/band1.tif"
]
}
]
},
{
"id": "tileset_for_band2",
"sources": [
{
"uris": [
"gs://bucket/band2.tif"
]
}
]
}
]
}שימו לב שבמקרה של רצועות נפרדות, אנחנו צריכים לתת לכל קבוצת משבצות מזהה שונה לשם הבהרה. מזהה קבוצת המשבצות יכול להיות מחרוזת שרירותית – המחרוזות האלה לא נשמרות בנכס שהועלה. מזהי קבוצות משבצות משמשים רק בהטמעה כדי להבדיל בין קבוצות משבצות מוערמות.
תחום תדרים
המושג החשוב השני הוא התאמת קובצי מקור לרצועות של נכסי EE.
כדי לעשות את זה, משתמשים בקטע bands במניפסט.
אפשר להשמיט את הקטע bands. במקרה כזה, הרצועות נוצרות קודם מהקבצים בקבוצת המשבצות הראשונה, אחר כך מקבוצת המשבצות הבאה וכן הלאה.
כברירת מחדל, הרצועות נקראות "b1", "b2" וכו'. כדי לשנות את שמות הרצועות שמוגדרים כברירת מחדל, צריך לכלול קטע "bands" בסוף, למשל:
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"sources": [
{
"uris": [
"gs://bucket/rgb.tif"
]
}
]
}
],
"bands": [
{
"id": "R",
"tilesetBandIndex": 0
},
{
"id": "G",
"tilesetBandIndex": 1
},
{
"id": "B",
"tilesetBandIndex": 2
}
]
}מספר הרצועות ב-EE חייב להיות זהה למספר הכולל של הרצועות בכל קבוצות המשבצות.
אם אתם לא רוצים להטמיע את כל הרצועות מקובץ, אתם יכולים להשתמש בשדה tilesetBandIndex כדי לציין אילו מרצועות ה-GDAL צריך להטמיע.
לרצועה הראשונה יש tilesetBandIndex של 0.
דוגמה:
נניח שבקובץ המקור יש ארבעה ערוצים: "tmin", "tmin_error", "tmax", "tmax_error". אנחנו רוצים להטמיע רק את "tmin" ו-"tmax". הקטעים הרלוונטיים במניפסט ייראו כך:
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"id": "temperature",
"sources": [
{
"uris": [
"gs://bucket/temperature.tif"
]
}
]
}
],
"bands": [
{
"id": "tmin",
"tilesetBandIndex": 0,
"tilesetId": "temperature"
},
{
"id": "tmax",
"tilesetBandIndex": 2,
"tilesetId": "temperature"
}
]
}רצועות למסכה
הסתרת הפס נשלטת על ידי הרכיב maskBands של המניפסט.
יש תמיכה בשלוש הגדרות אפשריות של מסכות (אבל תמיד מניחים שרצועת המסכה היא הרצועה האחרונה בקובץ מסוים).
- מסכה לכל רצועות הנתונים באותו קובץ.
- מסכה לכל רצועות הנתונים שמגיעות מכל הקבצים האחרים.
- מסכה לחלק מרצועות הנתונים.
1. המקרה הנפוץ ביותר הוא קובץ GeoTIFF יחיד שהרצועה האחרונה שלו משמשת כמסכה לרצועות האחרות. האפשרות הזו פועלת רק בקובצי GeoTIFF מסוג Byte. משתמשים במניפסט הבא:
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"id": "data_tileset",
"sources": [
{
"uris": [
"gs://bucket/data_file.tif"
]
}
]
}
],
"bands": [
{
"id": "data_band",
"tilesetId": "data_tileset"
},
{
"id": "qa_band",
"tilesetId": "data_tileset"
}
],
"maskBands": [
{
"tilesetId": "data_tileset"
}
]
}2. כדי להשתמש במסכת GeoTIFF כמסכה לכל הרצועות בקובץ GeoTIFF אחר, משתמשים במניפסט הבא:
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"id": "data_tileset",
"sources": [
{
"uris": [
"gs://bucket/data_file.tif"
]
}
]
},
{
"id": "mask_tileset",
"sources": [
{
"uris": [
"gs://bucket/mask_file.tif"
]
}
]
}
],
"bands": [
{
"id": "data_band",
"tilesetId": "data_tileset"
},
{
"id": "qa_band",
"tilesetId": "data_tileset"
}
],
"maskBands": [
{
"tilesetId": "mask_tileset"
}
]
}3. כדי להשתמש בקובץ GeoTIFF כמסכה לפס תדרים ספציפי בקובץ אחר, משתמשים במניפסט הבא (ההבדל מהמקרה הקודם הוא שהשדה bandIds ב-maskBands מוגדר):
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"id": "data_tileset",
"sources": [
{
"uris": [
"gs://bucket/data_file.tif"
]
}
]
},
{
"id": "mask_tileset",
"sources": [
{
"uris": [
"gs://bucket/mask_file.tif"
]
}
]
}
],
"bands": [
{
"id": "data_band",
"tilesetId": "data_tileset"
},
{
"id": "qa_band",
"tilesetId": "data_tileset"
}
],
"maskBands": [
{
"tilesetId": "mask_tileset",
"bandIds": ["data_band"]
}
]
}בדוגמה האחרונה, אנחנו עובדים עם שתי רצועות מקבוצת המשבצות data_tileset, אבל מחילים מסכה רק על אחת מהרצועות (data_band), כפי שצוין בשדה bandIds של אובייקט הרשימה היחיד שסופק, maskBands.
חשוב לזכור שרק הרצועה האחרונה של קבוצת המשבצות שצוינה ב-maskBands משמשת כרצועת המסכה.
המדיניות בנושא פירמידות
כש-Earth Engine יוצר פירמידות של תמונות במהלך ההטמעה, הוא צריך לצמצם שוב ושוב רשתות של 2x2 פיקסלים לפיקסל אחד, ולשנות את ערך הפיקסל בדרך כלשהי. כברירת מחדל, ערכי הפיקסלים מחושבים כממוצע, וזה מה שצריך לעשות ברוב המקרים שבהם הרצועה הרסטרית מייצגת נתונים רציפים פחות או יותר. עם זאת, יש שני מצבים שבהם הסתמכות על ברירת המחדל תניב תוצאות שגויות. במקרים כאלה, צריך להגדיר את השדה pyramidingPolicy בהגדרת הרצועה (אם הוא לא מוגדר, ערך ברירת המחדל שלו הוא "MEAN").
כדי לסווג תמונות רסטר (למשל, לסיווג תכסית קרקע), הדרך הכי הגיונית ליצור פירמידת פיקסלים היא לקחת את הרוב מבין ארבעת הערכים כדי ליצור את הערך הבא. כדי לעשות את זה, משתמשים במדיניות הפירמידה MODE:
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"sources": [
{
"uris": [
"gs://bucket/landcover.tif"
]
}
]
}
],
"bands": [
{
"id": "landcover",
"pyramidingPolicy": "MODE"
}
]
}בלהקות רסטר שבהן לא הגיוני להשתמש ב-"MEAN" או ב-"MODE" (לדוגמה, פיקסלים דחוסים), צריך להשתמש במדיניות הפירמידה "SAMPLE". הפונקציה SAMPLE תמיד מקבלת את הערך של הפיקסל השמאלי העליון מכל רשת בגודל 2x2. בדוגמה הבאה, מדיניות הפירמידה MEAN מוקצית לרצועה שמייצגת משתנה רציף (NDVI), והמדיניות SAMPLE מוקצית לרצועת ה-QA של הנתונים.
{
"name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
"tilesets": [
{
"sources": [
{
"uris": [
"gs://bucket/ndvi.tif"
]
}
]
}
],
"bands": [
{
"id": "NDVI",
"tilesetBandIndex": 0,
"pyramidingPolicy": "MEAN"
},
{
"id": "QA",
"tilesetBandIndex": 1,
"pyramidingPolicy": "SAMPLE"
}
]
}שעת התחלה ושעת סיום
בכל הנכסים צריך לציין את שעת ההתחלה ושעת הסיום כדי לספק הקשר נוסף לנתונים, במיוחד אם הם נכללים באוספים. השדות האלה לא נדרשים, אבל מומלץ מאוד להשתמש בהם כשאפשר.
שעת ההתחלה ושעת הסיום בדרך כלל מציינות את זמן התצפית, ולא את הזמן שבו נוצר קובץ המקור.
כדי לפשט את הדברים, שעת הסיום נחשבת כגבול לא כולל. לדוגמה, לנכסים שנמשכים בדיוק יום אחד, משתמשים בחצות של שני ימים עוקבים (למשל, 1980-01-31T00:00:00 ו-1980-02-01T00:00:00) בתור שעת ההתחלה ושעת הסיום. אם לנכס אין משך זמן, צריך להגדיר את שעת הסיום כך שתהיה זהה לשעת ההתחלה. הזמנים במניפסטים צריכים להיות מיוצגים כמחרוזות ISO 8601. כדי לפשט את ערכי התאריכים, מומלץ להניח ששעת הסיום לא נכללת (לדוגמה, חצות של היום הבא לנכסים יומיים).
דוגמה:
{
"name": "projects/some-project-id/assets/some-asset-id",
"tilesets": [
{
"sources": [
{
"uris": [
"gs://bucket/img_20190612.tif"
]
}
]
}
],
"startTime": "1980-01-31T00:00:00Z",
"endTime": "1980-02-01T00:00:00Z"
}הסבר על מבנה המניפסט
מבנה ה-JSON הבא כולל את כל השדות האפשריים במניפסט של העלאת תמונות. הגדרות השדות מפורטות בקטע הגדרות השדות של המניפסט שבהמשך.
{ "name": <string>, "tilesets": [ { "dataType": <string>, "id": <string>, "crs": <string>, "sources": [ { "uris": [ <stringn>> ], "affineTransform": { "scaleX": <double>, "shearX": <double>, "translateX": <double>, "shearY": <double>, "scaleY": <double>, "translateY": <double> } } ] } ], "bands": [ { "id": <string>, "tilesetId": <string>, "tilesetBandIndex": <int32>, "missingData": { "values": [<doublen>>] }, "pyramindingPolicy": <string> } ], "maskBands": [ { "tilesetId": <string>, "bandIds": [ <stringn>> ] } ], "footprint": { "points": [ { "x": <double>, "y": <doublen>> } ], "bandId": <string> }, "missingData": { "values": [<double>] }, "pyramidingPolicy": <string>, "uriPrefix": <string>, "startTime": { "seconds": <integer> }, "endTime": { "seconds": <integer> }, "properties": { <unspecified> } }
הגדרות של שדות במניפסט
שם
string
שם הנכס שרוצים ליצור.
name הוא בפורמט "projects/*/assets/**" (לדוגמה, "projects/earthengine-legacy/assets/users/USER/ASSET").
קבוצות משבצות
list
רשימה של מילונים שמגדירים מאפיינים של קבוצות משבצות.
למידע נוסף, עיינו בשדות הבאים של רכיבי המילון ב-tilesets.
tilesets[i].dataType
string
מציין את סוג הנתונים המספרי של הנתונים. ברירת המחדל היא הסוג שמופיע בדוחות של GDAL, ובמקרה כזה אין צורך להגדיר אותו.
| סוג הנתונים | ערך |
|---|---|
| לא צוין | "DATA_TYPE_UNSPECIFIED" |
| מספר שלם עם סימן של 8 ביט | "INT8" |
| מספר שלם ללא סימן של 8 ביט | "UINT8" |
| מספר שלם של 16 ביט עם סימן | "INT16" |
| מספר שלם לא מסומן של 16 ביט | "UINT16" |
| מספר שלם של 32 ביט עם סימן | "INT32" |
| מספר שלם לא מסומן של 32 ביט | "UINT32" |
| 32-bit float | "FLOAT32" |
| 64-bit float | "FLOAT64" |
tilesets[i].id
string
המזהה של קבוצת המשבצות. הוא חייב להיות ייחודי מבין קבוצות המשבצות שצוינו במניפסט הנכסים. המזהה הזה נמחק במהלך שלב העיבוד, והוא משמש רק כדי לקשר קבוצת משבצות לרצועה. מחרוזת ריקה היא מזהה חוקי.
tilesets[i].crs
string
מערכת הקואורדינטות של רשת הפיקסלים, שצוינה כקוד סטנדרטי כשאפשר (לדוגמה, קוד EPSG), ובפורמט WKT במקרים אחרים.
tilesets[i].sources
list
רשימה של מילונים שמגדירים את המאפיינים של קובץ תמונה ושל קובצי ה-sidecar שלו. למידע נוסף, עיינו בשדות הבאים של רכיבי המילון ב-sources.
tilesets[i].sources[j].uris
list
רשימה של מזהי ה-URI של הנתונים שרוצים להטמיע. יש תמיכה רק ב-URIs של Google Cloud Storage. צריך לציין כל URI בפורמט הבא:
gs://bucket-id/object-id.
האובייקט הראשי צריך להיות הרכיב הראשון ברשימה, ואחריו
האובייקטים המשניים. כל URI כולל את הקידומת ImageManifest.uriPrefix, אם היא מוגדרת.
tilesets[i].sources[j].affineTransform
dictionary
טרנספורמציה אפינית אופציונלית. צריך לציין את זה רק אם הנתונים מ-uris (כולל קובצי sidecar) לא מספיקים כדי למקם את הפיקסלים.
מסופק כמילון עם המפתחות הבאים:
"scaleX", "shearX", "translateX", "shearY", "scaleY", "translateY".
מידע נוסף זמין במאמר העזרה הזה.
מפתחות וערכים לדוגמה:
{
"scaleX": 0.1,
"shearX": 0.0,
"translateX": -180.0,
"shearY": 0.0,
"scaleY": -0.1,
"translateY": 90.0
}להקות
list
רשימה של מילונים שמגדירים את המאפיינים של רצועה אחת שמקורה בקבוצת משבצות.
שימו לב שסדר הרצועות של הנכס זהה לסדר של bands.
למידע נוסף, עיינו בשדות הבאים של רכיבי המילון של bands.
bands[i].id
string
המזהה (השם) של הלהקה.
bands[i].tilesetId
string
המזהה של קבוצת המשבצות שתואמת לערוץ.
bands[i].tilesetBandIndex
int32
אינדקס הרצועה שמתחיל מאפס מקבוצת המשבצות שתואמת לרצועה.
bands[i].missingData.values
list
רשימת ערכים (מסוג double) שמייצגים מצב שבו אין נתונים ברצועה.
bands[i].pyramidingPolicy
string
המדיניות בנושא פירמידות. מידע נוסף זמין בקישור הזה. האפשרויות כוללות:
- "MEAN" (ברירת המחדל)
- "MODE"
- "SAMPLE"
maskBands
list
רשימה של מילונים שמגדירים את המאפיינים של רצועת מסכה אחת שמקורה בקבוצת משבצות.
אפשר לספק עד רצועת מסכה אחת.
למידע נוסף, עיינו בשדות הבאים של רכיבי המילון של maskBands.
maskBands[i].tilesetId
string
המזהה של קבוצת המשבצות שתואמת לרצועת המסכה. הרצועה האחרונה של קבוצת המשבצות תמיד משמשת כרצועת המסכה.
maskBands[i].bandIds
list of strings
רשימת המזהים של הרצועות שהרצועה של המסכה חלה עליהן. אם לא מציינים ערך, רצועת המסכה מוחלת על כל הרצועות בנכס. לכל פס יכול להיות רק פס מסכה תואם אחד.
טביעת רגל
dictionary
מילון שמגדיר את המאפיינים של טביעת הרגל של כל הפיקסלים התקינים בתמונה.
אם השדה ריק, ברירת המחדל של השטח המצולם היא התמונה כולה. למידע נוסף, עיינו בשדות הבאים של רכיב המילון footprint.
footprint.points
list
רשימה של נקודות שמגדירות את השטח של כל הפיקסלים התקינים בתמונה. נקודה מוגדרת על ידי מילון עם המקשים "x" ו-"y" עם ערכי float. רשימה של נקודות שמתארות טבעת שיוצרת את החלק החיצוני של פוליגון פשוט, שחייב להכיל את המרכזים של כל הפיקסלים התקינים בתמונה. הצורה חייבת להיות טבעת לינארית: הנקודה האחרונה חייבת להיות זהה לנקודה הראשונה. הקואורדינטות נמצאות בהיטל של הרצועה שצוינה על ידי bandId.
הערה: צריך להשתמש בקואורדינטות שהן לא מספרים שלמים, כמו מרכז כל פיקסל, כי
footprint נחשב ככולל פיקסל אם הפיקסל (מלבן בגודל 1x1)
מצטלב עם השטח. כדי להימנע מבחירה בטעות של פיקסלים סמוכים, אל תשתמשו בקואורדינטות עם ערכים שלמים, כי אלה הגבולות בין הפיקסלים. שרטוט קווי המתאר לאורך מרכזי הפיקסלים מונע הכללה של פיקסלים לא מכוונים, מה שעלול לגרום לשגיאות כאשר הפיקסלים המכוונים צמודים לגבול המפה, כמו קו התאריך או הקוטב.
לדוגמה, בתמונה בגודל 2x2 שבה כל ארבעת הפיקסלים תקינים, זו אחת מהטבעות האפשריות:
[
{
"x": 0.5,
"y": 0.5
},
{
"x": 0.5,
"y": 1.5
},
{
"x": 1.5,
"y": 1.5
},
{
"x": 1.5,
"y": 0.5
},
{
"x": 0.5,
"y": 0.5
}
]footprint.bandId
string
המזהה של הרצועה שמערכת ה-CRS שלה מגדירה את הקואורדינטות של השטח המצולם. אם לא מזינים ערך, המערכת משתמשת ברצועה הראשונה.
missingData.values
list
רשימת ערכים (מסוג double) שמייצגים מצב שבו אין נתונים בכל הרצועות של התמונה. ההגדרה חלה על כל הטווחים שלא צוין בהם missingData משלהם.
pyramidingPolicy
string
מדיניות הפירמידה. אם לא מציינים מדיניות, המדיניות "MEAN" מופעלת כברירת מחדל. ההגדרה חלה על כל התדרים שלא צוין בהם ערך משלהם. מידע נוסף זמין בקישור הזה. האפשרויות כוללות:
- "MEAN" (ברירת המחדל)
- "MODE"
- "SAMPLE"
uriPrefix
string
קידומת אופציונלית שנוספת לכל uris שמוגדר במניפסט.
startTime
integer
חותמת הזמן שמשויכת לנכס, אם יש כזו. בדרך כלל זהו הזמן שבו צולם תצלום הלוויין. בנכסים שתואמים למרווח זמן, כמו ערכים ממוצעים לאורך חודש או שנה, חותמת הזמן הזו תואמת לתחילת המרווח. מצוין כשניות ו(אופציונלי) ננו-שניות מאז ראשית זמן יוניקס (1970-01-01). ההנחה היא שהתאריך הוא באזור הזמן UTC.
endTime
integer
בנכסים שתואמים לפרק זמן מסוים, כמו ערכים ממוצעים של חודש או שנה, חותמת הזמן הזו תואמת לסוף של פרק הזמן הזה (לא כולל). מצוין כשניות ו(אופציונלי) ננו-שניות מאז ראשית זמן יוניקס (1970-01-01). ההנחה היא שהתאריך הוא באזור הזמן UTC.
נכסים
dictionary
מילון שטוח שרירותי של צמדי מפתח/ערך. המפתחות חייבים להיות מחרוזות והערכים יכולים להיות מספרים או מחרוזות. עדיין אין תמיכה בערכי רשימה בנכסים שהמשתמשים מעלים.
מגבלות
גודל המניפסט של JSON
גודל הקובץ המקסימלי של קובץ המניפסט בפורמט JSON הוא 10MB. אם יש לכם הרבה קבצים להעלות, כדאי לשקול דרכים לצמצם את מספר התווים שנדרשים כדי לתאר את מערך הנתונים. לדוגמה, אפשר להשתמש בשדה uriPrefix כדי שלא תצטרכו לספק את הנתיב לקטגוריה ב-Google Cloud לכל URI ברשימה uris. אם צריך להקטין את הגודל עוד יותר, אפשר לנסות לקצר את שמות הקבצים.
פורמט קובץ התמונה
כל קובץ תמונה צריך להיות בפורמט TIFF. אם לא צוינה מערכת CRS במניפסט, הקובץ חייב להיות GeoTIFF עם מערכת CRS מוטמעת.
אפשר לדחוס קובצי TIFF באמצעות DEFLATE, JPEG-XL/JXL, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WEBP או ZSTD.
המלצות לחוויית ההעלאה הטובה ביותר של קבצים גדולים:
- הבחירה הטובה ביותר: ZSTD מציע איזון טוב בין מהירות לדחיסה.
- כדאי להימנע: LZMA יכול להיות איטי מאוד למרות דחיסה טובה.
- קבצים לא דחוסים: הקבצים יהיו גדולים יותר וזמן ההעלאה יהיה ארוך יותר.
- דחיסת נתונים (lossy) (למשל, JPEG): יכולה לשנות את ערכי הפיקסלים. השתמשו בדחיסה ללא אובדן מידע (למשל, DEFLATE, LZMA, LZW, ZSTD), אלא אם אתם מבינים את ההשפעה הפוטנציאלית על הנתונים שלכם.