หากต้องการอัปโหลดรูปภาพไปยัง Google Earth Engine (EE) อย่างยืดหยุ่นมากขึ้นกว่าที่UI เครื่องมือแก้ไขโค้ดหรือคำสั่ง upload
ของเครื่องมือบรรทัดคำสั่ง "earthengine" มีให้ ให้อธิบายการอัปโหลดรูปภาพโดยใช้ไฟล์ JSON ที่รู้จักกันในชื่อ "ไฟล์ Manifest" และใช้คำสั่ง upload image --manifest
ของเครื่องมือบรรทัดคำสั่ง
ดูตัวอย่างทั้งหมดได้ในสมุดบันทึก Colab นี้ซึ่งสาธิตการอัปโหลดไทล์รูปภาพเป็นชิ้นงานเดียวโดยใช้ไฟล์ Manifest
การตั้งค่าแบบครั้งเดียว
- การอัปโหลดไฟล์ Manifest จะใช้งานได้กับไฟล์ที่อยู่ใน Google Cloud Storage เท่านั้น หากต้องการเริ่มใช้ Google Cloud Storage ให้สร้างโปรเจ็กต์ Google Cloud หากยังไม่มี โปรดทราบว่าการตั้งค่ากำหนดให้ระบุบัตรเครดิตสำหรับการเรียกเก็บเงิน EE ไม่ได้เรียกเก็บเงินจากใครในตอนนี้ แต่การโอนไฟล์ไปยัง Google Cloud Storage ก่อนอัปโหลดไปยัง EE จะมีค่าใช้จ่ายเล็กน้อย สำหรับขนาดข้อมูลการอัปโหลดทั่วไป (หลายสิบหรือหลายร้อยกิกะไบต์) ค่าใช้จ่ายจะค่อนข้างต่ำ
- ในโปรเจ็กต์ ให้เปิด Cloud Storage API และสร้างที่เก็บข้อมูล
- ติดตั้งไคลเอ็นต์ Python ของ Earth Engine ซึ่งรวมถึง
earthengine
เครื่องมือบรรทัดคำสั่งที่เราจะใช้อัปโหลดข้อมูล - สําหรับการอัปโหลดอัตโนมัติ คุณอาจต้องใช้บัญชีบริการ Google Cloud ที่เชื่อมโยงกับโปรเจ็กต์ คุณไม่จำเป็นต้องใช้บัญชีบริการสำหรับการทดสอบ แต่หากมีเวลา โปรดเริ่มทำความคุ้นเคยกับการใช้บัญชีบริการ
ไฟล์ต้นฉบับขนาดใหญ่มาก (100 GB ขึ้นไป) อาจอัปโหลดได้เร็วขึ้นหากมีการแบ่งออกเป็นหลายส่วน
รหัสและชื่อเนื้อหา
สำหรับเนื้อหาที่เป็นของโปรเจ็กต์ในระบบคลาวด์ ให้ใช้รูปแบบต่อไปนี้สำหรับชื่อเนื้อหา
projects/some-project-id/assets/some-asset-id
ดูข้อมูลเกี่ยวกับชื่อเนื้อหาสำหรับโปรเจ็กต์เดิมและเนื้อหาที่ผู้ใช้เป็นเจ้าของ
สำหรับโปรเจ็กต์เดิมที่เก่ากว่า ชื่อชิ้นงานในไฟล์ Manifest ต้องแตกต่างจากรหัสชิ้นงานที่แสดงในส่วนอื่นๆ ของ Earth Engine เล็กน้อย หากต้องการอัปโหลดเนื้อหาที่มีรหัสเนื้อหาขึ้นต้นด้วย users/some_user
หรือ projects/some_project
ชื่อเนื้อหาในไฟล์ Manifest ต้องมีสตริง projects/earthengine-legacy/assets/
นำหน้ารหัส ตัวอย่างเช่น ควรอัปโหลดรหัสเนื้อหา EE users/username/my_geotiff
โดยใช้ชื่อ projects/earthengine-legacy/assets/users/username/my_geotiff
ใช่ ซึ่งหมายความว่ารหัสอย่าง projects/some_projects/some_asset
จะเปลี่ยนเป็นชื่อที่มี projects
อยู่ 2 ครั้ง ดังนี้ projects/earthengine-legacy/assets/projects/some_projects/some_asset
การดำเนินการนี้อาจทำให้สับสน แต่จำเป็นเพื่อให้เป็นไปตามมาตรฐานของ Google Cloud API
การใช้ไฟล์ Manifest
ไฟล์ Manifest พื้นฐานแสดงอยู่ในบล็อกโค้ดต่อไปนี้ โดยจะอัปโหลดไฟล์ชื่อ 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
มีอยู่และอ่านได้แบบสาธารณะ คุณจึงใช้ไฟล์ดังกล่าวเพื่อทดสอบได้)
ชุดพื้น
โครงสร้างไฟล์ Manifest ของ JSON ที่ค่อนข้างซับซ้อนจําเป็นเพื่อให้มีความยืดหยุ่นเพียงพอในการแก้ปัญหาการอัปโหลดที่พบได้ทั่วไป ซึ่งก็คือวิธีอธิบายวิธีต่างๆ ที่เป็นไปได้ทั้งหมดในการรวมพิกเซลจากไฟล์ต้นทางหลายไฟล์เข้าด้วยกันเป็นชิ้นงานเดียว กล่าวโดยละเอียดคือ การจัดกลุ่มไฟล์เข้าด้วยกันทำได้ 2 วิธีที่ไม่เกี่ยวข้องกัน ดังนี้
- ภาพโมเสก บางครั้งไฟล์หลายไฟล์อาจแสดงข้อมูลหลายส่วน (เช่น แต่ละส่วนคือสี่เหลี่ยมจัตุรัสขนาด 1x1 องศา) ไฟล์ดังกล่าวต้องต่อกันเป็นภาพโมเสค (ผสานเข้าด้วยกัน) ในกลุ่มเดียวกันในชิ้นงาน EE
- แยกวงดนตรี บางครั้งไฟล์หลายไฟล์อาจแสดงถึงหลายวง ไฟล์ดังกล่าวต้องซ้อนกันเป็นแถบในเนื้อหา EE
(คุณอาจต้องใช้ทั้ง 2 วิธีพร้อมกัน แต่กรณีนี้เกิดขึ้นได้น้อยมาก)
ไฟล์ Manifest อธิบายตัวเลือกเหล่านี้โดยใช้แนวคิดของ ชุดชิ้นส่วนแผนที่ ชิ้นส่วนแผนที่เดียวจะสอดคล้องกับแหล่งข้อมูล GDAL แหล่งเดียว ด้วยเหตุนี้ แหล่งที่มาทั้งหมดในชุดข้อมูลแผนที่ชุดเดียวจึงต้องมีโครงสร้าง GDAL เดียวกัน (จำนวนและประเภทของแถบ การฉายภาพ การเปลี่ยนรูปแบบ ค่าที่ขาดหายไป) เนื่องจากแหล่งข้อมูล GDAL อาจมีแถบหลายแถบ tileset รายการหนึ่งจึงอาจมีข้อมูลสำหรับแถบ EE หลายแถบ
สำหรับการส่งผ่านข้อมูลภาพโมเสค ไฟล์ Manifest จะมีลักษณะดังนี้
{ "name": "projects/some-project-id/assets/some-asset-id", "tilesets": [ { "sources": [ { "uris": [ "gs://bucket/N30W22.tif" ] }, { "uris": [ "gs://bucket/N31W22.tif" ] } ] } ] }
สำหรับย่านความถี่แยกต่างหาก ไฟล์ Manifest จะมีลักษณะดังนี้ (คุณจะต้องเพิ่มส่วน 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" ] } ] } ] }
โปรดทราบว่าในกรณีที่เป็นแถบแยกกัน เราต้องกำหนดรหัสที่แตกต่างกันให้กับชุดข้อมูลแผนที่แต่ละชุดเพื่อความชัดเจน รหัสชุดข้อมูลอาจเป็นสตริงใดก็ได้ ระบบจะไม่เก็บสตริงเหล่านี้ไว้ในชิ้นงานที่อัปโหลด ระบบจะใช้รหัสชุดพื้นเฉพาะในการนำเข้าเพื่อแยกชุดพื้นซ้อนกันออกจากกัน
ย่านความถี่
แนวคิดที่สําคัญที่ 2 คือการจับคู่ไฟล์ต้นฉบับกับกลุ่มชิ้นงาน EE
ซึ่งทำได้โดยใช้ส่วน bands
ของไฟล์ Manifest
คุณละเว้นส่วน 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
ตัวอย่าง
สมมติว่าไฟล์ต้นทางมี 4 ย่านความถี่ ได้แก่ "tmin", "tmin_error", "tmax", "tmax_error" เราต้องการนำเข้าเฉพาะ "tmin" และ "tmax" ส่วนที่เกี่ยวข้องของไฟล์ Manifest จะมีลักษณะดังนี้
{ "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
ของไฟล์ Manifest
ระบบรองรับการกำหนดค่ามาสก์ได้ 3 แบบ (แต่ระบบจะถือว่าแถบมาสก์เป็นแถบสุดท้ายในไฟล์หนึ่งๆ เสมอ)
- หน้ากากสำหรับแถบข้อมูลทั้งหมดในไฟล์เดียวกัน
- มาสก์สำหรับย่านความถี่ข้อมูลทั้งหมดที่มาจากไฟล์อื่นๆ ทั้งหมด
- หน้ากากสําหรับกลุ่มข้อมูลบางกลุ่ม
1. กรณีที่พบบ่อยที่สุดคือ GeoTIFF ไฟล์เดียวที่ใช้แถบสุดท้ายเป็นมาสก์สำหรับแถบอื่นๆ การดำเนินการนี้จะใช้ได้กับ GeoTIFF ประเภทไบต์เท่านั้น ใช้ไฟล์ Manifest ต่อไปนี้
{ "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 อื่น ให้ใช้ไฟล์ Manifest ต่อไปนี้
{ "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 เป็นมาสก์สำหรับย่านความถี่ที่เฉพาะเจาะจงในไฟล์อื่น ให้ใช้ไฟล์ Manifest ต่อไปนี้ (ความแตกต่างกับกรณีก่อนหน้าคือมีการตั้งค่าช่อง 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"] } ] }
ในตัวอย่างสุดท้าย เรากําลังทํางานกับแถบ 2 แถบจากชุดข้อมูล data_tileset
แต่ใช้การมาสก์กับแถบเดียว (data_band
) ตามที่ระบุโดยช่อง bandIds
ของออบเจ็กต์ลิสต์ maskBands
รายการเดียวที่ระบุ
โปรดทราบว่าระบบจะใช้เฉพาะแถบสุดท้ายของชุดข้อมูลแผนที่ที่กล่าวถึงใน maskBands
เป็นแถบมาสก์
นโยบายการสร้างเครือข่ายแบบพีระมิด
เมื่อ Earth Engine สร้างปิรามิดรูปภาพระหว่างการส่งผ่านข้อมูล จะต้องลดตารางกริด 2x2 พิกเซลเป็นพิกเซลเดียวซ้ำๆ โดยเปลี่ยนค่าพิกเซลในลักษณะหนึ่งๆ โดยค่าเริ่มต้น ระบบจะหาค่าเฉลี่ยของค่าพิกเซล ซึ่งเป็นสิ่งที่ควรทำในกรณีส่วนใหญ่เมื่อแถบแรสเตอร์แสดงข้อมูลแบบต่อเนื่อง อย่างไรก็ตาม มี 2 กรณีที่การอาศัยค่าเริ่มต้นจะให้ผลลัพธ์ที่ไม่ถูกต้อง ซึ่งในกรณีนี้คุณต้องตั้งค่าช่อง pyramidingPolicy
ในคําจํากัดความของกลุ่ม (หากไม่ได้ตั้งค่า ระบบจะถือว่าค่าเป็น "ค่าเฉลี่ย" โดยค่าเริ่มต้น)
สําหรับการจัดประเภทรูปภาพแรสเตอร์ (สําหรับการจัดประเภทการปกคลุมดิน เป็นต้น) วิธีการสร้างพีระมิดพิกเซลที่สมเหตุสมผลที่สุดคือการใช้ค่าส่วนใหญ่ 4 ค่าเพื่อสร้างค่าถัดไป ซึ่งทำได้โดยใช้นโยบายการสร้างปิรามิด "MODE" ดังนี้
{ "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id", "tilesets": [ { "sources": [ { "uris": [ "gs://bucket/landcover.tif" ] } ] } ], "bands": [ { "id": "landcover", "pyramidingPolicy": "MODE" } ] }
สำหรับแบนด์แรสเตอร์ที่ "ค่ามัธยฐาน" หรือ "ค่ามัธยฐาน" ไม่มีความหมาย (เช่น พิกเซลแบบบิตแพ็ก) คุณควรใช้นโยบายการสร้างพีระมิด "ตัวอย่าง" "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" } ] }
เวลาเริ่มต้นและสิ้นสุด
ชิ้นงานทั้งหมดควรระบุเวลาเริ่มต้นและสิ้นสุดเพื่อให้บริบทเพิ่มเติมแก่ข้อมูล โดยเฉพาะอย่างยิ่งหากรวมอยู่ในคอลเล็กชัน คุณไม่จำเป็นต้องกรอกข้อมูลในช่องเหล่านี้ แต่เราขอแนะนําอย่างยิ่งให้กรอกทุกครั้งที่เป็นไปได้
โดยปกติแล้ว เวลาเริ่มต้นและเวลาสิ้นสุดหมายถึงเวลาของการสังเกตการณ์ ไม่ใช่เวลาที่สร้างไฟล์ต้นทาง
ระบบจะถือว่าเวลาสิ้นสุดเป็นขอบเขตที่ไม่รวมเวลาอื่นเพื่อความสะดวก ตัวอย่างเช่น ใช้เวลาเที่ยงคืนของ 2 วันติดต่อกัน (เช่น 1980-01-31T00:00:00 และ 1980-02-01T00:00:00) เป็นเวลาเริ่มต้นและเวลาสิ้นสุดสำหรับชิ้นงานที่ครอบคลุม 1 วัน หากชิ้นงานไม่มีระยะเวลา ให้ตั้งค่าเวลาสิ้นสุดให้เหมือนกับเวลาเริ่มต้น แสดงเวลาในไฟล์ Manifest เป็นสตริง 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" }
ข้อมูลอ้างอิงโครงสร้างไฟล์ Manifest
โครงสร้าง JSON ต่อไปนี้มีฟิลด์ไฟล์ Manifest การอัปโหลดรูปภาพทั้งหมดที่เป็นไปได้ ดูคำจำกัดความของฟิลด์ได้ในส่วน ส่วนคำจำกัดความของฟิลด์ไฟล์ Manifest ต่อไปนี้
{ "name": <string>, "tilesets": [ { "dataType": <string>, "id": <string>, "crs": <string>, "sources": [ { "uris": [ <string> ], "affineTransform": { "scaleX": <double>, "shearX": <double>, "translateX": <double>, "shearY": <double>, "scaleY": <double>, "translateY": <double> } } ] } ], "bands": [ { "id": <string>, "tilesetId": <string>, "tilesetBandIndex": <int32>, "missingData": { "values": [<double>] }, "pyramindingPolicy": <string> } ], "maskBands": [ { "tilesetId": <string>, "bandIds": [ <string> ] } ], "footprint": { "points": [ { "x": <double>, "y": <double> } ], "bandId": <string> }, "missingData": { "values": [<double>] }, "pyramidingPolicy": <string>, "uriPrefix": <string>, "startTime": { "seconds": <integer> }, "endTime": { "seconds": <integer> }, "properties": { <unspecified> } }
คําจํากัดความของช่องไฟล์ Manifest
ชื่อ
string
ชื่อของชิ้นงานที่สร้างขึ้น
name
อยู่ในรูปแบบ "projects/*/assets/**" (เช่น "projects/earthengine-legacy/assets/users/USER/ASSET")
tileset
list
รายการพจนานุกรมที่กําหนดพร็อพเพอร์ตี้สําหรับชุดการ์ด
ดูข้อมูลเพิ่มเติมได้ในtilesets
ช่ององค์ประกอบของพจนานุกรม
tilesets[i].dataType
string
ระบุประเภทข้อมูลตัวเลขของข้อมูล ค่าเริ่มต้นคือประเภทที่ GDAL รายงาน ซึ่งในกรณีนี้ไม่จําเป็นต้องกําหนด
ประเภทข้อมูล | ค่า |
---|---|
ไม่ระบุ | "DATA_TYPE_UNSPECIFIED" |
จํานวนเต็มแบบมีเครื่องหมาย 8 บิต | "INT8" |
จํานวนเต็มแบบไม่ลงนาม 8 บิต | "UINT8" |
จํานวนเต็มแบบมีเครื่องหมาย 16 บิต | "INT16" |
จํานวนเต็มแบบไม่ลงนาม 16 บิต | "UINT16" |
จํานวนเต็มแบบมีเครื่องหมาย 32 บิต | "INT32" |
จำนวนเต็มแบบไม่ลงนาม 32 บิต | "UINT32" |
ทศนิยม 32 บิต | "FLOAT32" |
ทศนิยม 64 บิต | "FLOAT64" |
tilesets[i].id
string
รหัสของชุดชิ้นส่วน ต้องไม่ซ้ำกับชุดชิ้นส่วนแผนที่ที่ระบุในไฟล์ Manifest ของชิ้นงาน ระบบจะทิ้งรหัสนี้ในขั้นตอนการประมวลผล โดยจะใช้เพื่อลิงก์ชุดข้อมูลกับวงเท่านั้น สตริงว่างเป็นรหัสที่ถูกต้อง
tilesets[i].crs
string
ระบบพิกัดอ้างอิงของเวิร์กชีตพิกเซลที่ระบุเป็นโค้ดมาตรฐาน (เช่น โค้ด EPSG) หากเป็นไปได้ และในรูปแบบ WKT หากไม่สามารถทำได้
tilesets[i].sources
list
รายการพจนานุกรมที่กําหนดพร็อพเพอร์ตี้ของไฟล์รูปภาพและไฟล์ไซด์คาร์ ดูข้อมูลเพิ่มเติมได้ในsources
ช่ององค์ประกอบของพจนานุกรม
tilesets[i].sources[j].uris
list
รายการ URI ของข้อมูลที่จะนำเข้ามา ระบบรองรับเฉพาะ URI ของ Google Cloud Storage เท่านั้น โดยต้องระบุ URI แต่ละรายการในรูปแบบต่อไปนี้
gs://bucket-id/object-id
ออบเจ็กต์หลักควรเป็นองค์ประกอบแรกของรายการ และรายการอื่นๆ ควรแสดงตามหลัง URI แต่ละรายการจะมี ImageManifest.uriPrefix
อยู่ข้างหน้าหากมีการตั้งค่า
tilesets[i].sources[j].affineTransform
dictionary
การเปลี่ยนรูปแบบเชิงเชิงเส้น (Affine Transform) ไม่บังคับ ควรระบุเฉพาะในกรณีที่ข้อมูลจาก 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
ดัชนีแถบแบบ 0 เริ่มต้นจากชุดข้อมูลแผนที่ซึ่งสอดคล้องกับแถบ
bands[i].missingData.values
list
รายการค่า (ประเภท double) ซึ่งแสดงว่าไม่มีข้อมูลในย่านความถี่
bands[i].pyramidingPolicy
string
นโยบายการสร้างเครือข่ายแบบหลายชั้น ดูข้อมูลเพิ่มเติมได้ที่ ลิงก์นี้ โดยมีตัวเลือกดังนี้
- "MEAN" (ค่าเริ่มต้น)
- "MODE"
- "SAMPLE"
maskBands
list
รายการพจนานุกรมที่กําหนดคุณสมบัติของแถบมาสก์เดียวซึ่งมาจากชุดข้อมูล
ระบุแถบหน้ากากได้สูงสุด 1 แถบ
ดูข้อมูลเพิ่มเติมในmaskBands
ช่ององค์ประกอบพจนานุกรมต่อไปนี้
maskBands[i].tilesetId
string
รหัสของชุดชิ้นส่วนที่สอดคล้องกับแถบมาสก์ ระบบจะใช้แถบสุดท้ายของชุดข้อมูลเป็นแถบมาสก์เสมอ
maskBands[i].bandIds
list of strings
รายการรหัสของวงดนตรีที่ใช้กับวงดนตรีมาสก์ หากเป็นค่าว่าง ระบบจะใช้ย่านความถี่มาสก์กับย่านความถี่ทั้งหมดในชิ้นงาน แต่ละย่านความถี่จะมีย่านความถี่มาสก์ที่เกี่ยวข้องได้เพียงย่านเดียว
ร่องรอย
dictionary
พจนานุกรมที่กําหนดพร็อพเพอร์ตี้ของร่องรอยพิกเซลที่ถูกต้องทั้งหมดในรูปภาพ
หากเว้นว่างไว้ ร่องรอยเริ่มต้นจะเป็นทั้งรูปภาพ ดูข้อมูลเพิ่มเติมในfootprint
ช่ององค์ประกอบของพจนานุกรมต่อไปนี้
footprint.points
list
รายการจุดที่กําหนดร่องรอยของพิกเซลที่ถูกต้องทั้งหมดในรูปภาพ จุดจะกำหนดโดยพจนานุกรมที่มีคีย์ "x" และ "y" ซึ่งมีค่าประเภท float รายการจุดมีไว้เพื่ออธิบายรูปวงแหวนซึ่งประกอบเป็นด้านนอกของรูปหลายเหลี่ยมธรรมดาที่ต้องมีจุดศูนย์กลางของพิกเซลที่ถูกต้องทั้งหมดของรูปภาพ ต้องเป็นวงแหวนเชิงเส้น โดยจุดสุดท้ายต้องเท่ากับจุดแรก พิกัดอยู่ในการฉายของแถบความถี่ที่ bandId
ระบุ
หมายเหตุ: ใช้พิกัดที่ไม่ใช่จำนวนเต็ม เช่น ตรงกลางของพิกเซลแต่ละพิกเซล เนื่องจากระบบจะถือว่า footprint
รวมพิกเซลด้วยหากพิกเซล (สี่เหลี่ยมผืนผ้าขนาด 1x1) ตัดกับร่องรอย อย่าใช้พิกัดที่มีค่าเป็นจำนวนเต็มเพื่อหลีกเลี่ยงการเลือกพิกเซลที่อยู่ติดกันโดยไม่ตั้งใจ เนื่องจากพิกัดดังกล่าวเป็นขอบเขตระหว่างพิกเซล การวาดร่องรอยตามจุดศูนย์กลางของพิกเซลจะช่วยป้องกันไม่ให้รวมพิกเซลที่ไม่ต้องการ ซึ่งอาจทำให้เกิดข้อผิดพลาดเมื่อพิกเซลที่ต้องการอยู่ติดกับขอบแผนที่ เช่น เส้นเมริเดียนคู่ขนานหรือขั้วโลก
ตัวอย่างเช่น สำหรับรูปภาพขนาด 2x2 ที่มีพิกเซลที่ถูกต้องทั้ง 4 รายการ วงแหวนที่เป็นไปได้รูปแบบหนึ่งมีดังนี้
[ { "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
ทั้งหมดที่กําหนดไว้ในไฟล์ Manifest
startTime
integer
การประทับเวลาที่เชื่อมโยงกับเนื้อหา หากมี ซึ่งโดยทั่วไปจะสอดคล้องกับเวลาที่ถ่ายภาพถ่ายดาวเทียม สําหรับเนื้อหาที่สอดคล้องกับช่วงเวลา เช่น ค่าเฉลี่ยในช่วง 1 เดือนหรือ 1 ปี การประทับเวลานี้จะสอดคล้องกับช่วงเริ่มต้น ระบุเป็นวินาทีและ (ไม่บังคับ) นาโนวินาทีนับจากจุดเริ่มต้น (1970-01-01) ถือว่าอยู่ในเขตเวลา UTC
endTime
integer
สําหรับชิ้นงานที่สอดคล้องกับช่วงเวลา เช่น ค่าเฉลี่ยในช่วง 1 เดือนหรือ 1 ปี การประทับเวลานี้จะสอดคล้องกับช่วงสิ้นสุดของช่วงเวลานั้น (ไม่รวม) ระบุเป็นวินาทีและ (ไม่บังคับ) นาโนวินาทีนับจากจุดเริ่มต้น (1970-01-01) ถือว่าอยู่ในเขตเวลา UTC
พร็อพเพอร์ตี้
dictionary
พจนานุกรมแบบแบนตามอำเภอใจของคู่คีย์-ค่า คีย์ต้องเป็นสตริงและค่าอาจเป็นตัวเลขหรือสตริงก็ได้ ยังไม่รองรับค่ารายการสําหรับชิ้นงานที่ผู้ใช้อัปโหลด
ข้อจำกัด
ขนาดไฟล์ Manifest JSON
ไฟล์ Manifest ในรูปแบบ JSON ต้องมีขนาดไม่เกิน 10 MB หากมีไฟล์จำนวนมากที่จะอัปโหลด ให้พิจารณาหาวิธีลดจำนวนอักขระที่จําเป็นในการอธิบายชุดข้อมูล เช่น ใช้ช่อง uriPrefix
เพื่อไม่ต้องระบุเส้นทางที่เก็บข้อมูล Google Cloud สำหรับ URI แต่ละรายการในรายการ uris
หากต้องการลดขนาดไฟล์อีก ให้ลองทำให้ชื่อไฟล์สั้นลง
รูปแบบไฟล์รูปภาพ
ไฟล์ภาพแต่ละไฟล์ต้องเป็นภาพ TIFF หากไม่ได้ระบุ CRS ในไฟล์ Manifest ไฟล์ต้องเป็น GeoTIFF ที่มี CRS ฝังอยู่
ไฟล์ TIFF สามารถบีบอัดด้วย DEFLATE, JPEG-XL/JXL, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WEBP หรือ ZSTD
คําแนะนําเพื่อให้ได้รับประสบการณ์การอัปโหลดไฟล์ขนาดใหญ่ที่ดีที่สุด
- ตัวเลือกที่ดีที่สุด: ZSTD ให้ความเร็วและการบีบอัดที่สมดุลกันดี
- หลีกเลี่ยง: LZMA อาจทำงานช้ามากแม้จะบีบอัดได้ดี
- ไฟล์ที่ไม่ได้บีบอัด: จะทำให้ไฟล์มีขนาดใหญ่ขึ้นและใช้เวลาอัปโหลดนานขึ้น
- การบีบอัดแบบสูญเสียคุณภาพ (เช่น JPEG): อาจเปลี่ยนแปลงค่าพิกเซล ใช้การบีบอัดแบบไม่สูญเสียคุณภาพ (เช่น DEFLATE, LZMA, LZW, ZSTD) เว้นแต่คุณจะเข้าใจผลกระทบที่อาจเกิดขึ้นกับข้อมูล