Earth Engine รองรับชิ้นงานที่สร้างขึ้นจาก Cloud Optimized GeoTIFF (COG) ซึ่งจัดเก็บไว้ใน Google Cloud Storage (GCS)
เมื่อลงทะเบียนชิ้นงานที่สร้างขึ้นจาก COG แล้ว Earth Engine จะจัดทำดัชนีช่องข้อมูลเชิงพื้นที่และข้อมูลเมตาของรูปภาพในเวลาที่สร้าง ซึ่งจะทำให้รูปภาพมีประสิทธิภาพ เมื่อใช้ในคอลเล็กชัน โดยมีประสิทธิภาพเทียบเท่ากับชิ้นงานที่นำเข้าตามมาตรฐาน (ดูภาพรวมของ Cloud Optimized GeoTIFF (COG))
ข้อกำหนดเบื้องต้นและการตั้งค่า Cloud Storage
ก่อนลงทะเบียน COG คุณต้องตั้งค่าทรัพยากร Google Cloud Storage อย่างถูกต้อง
1. ตำแหน่ง Bucket (ข้อกำหนดที่เข้มงวด)
Earth Engine จะเข้าถึง Bucket ของ Cloud Storage ได้ Bucket ต้อง อยู่ในภูมิภาคศูนย์ข้อมูลหรือหลายภูมิภาคต่อไปนี้
- หลายภูมิภาค
us - ภูมิภาคคู่ของสหรัฐอเมริกา ที่มี
us-central1 - ภูมิภาค
us-central1
หากวาง Bucket ไว้ในศูนย์ข้อมูลระดับภูมิภาคอื่นๆ (เช่น us-east4 หรือ europe-west1) Earth Engine จะปฏิเสธคำขอลงทะเบียนและอ่าน
2. คลาสพื้นที่เก็บข้อมูลและการเรียกเก็บเงิน
- เราขอแนะนำให้ใช้คลาสพื้นที่เก็บข้อมูลมาตรฐาน พื้นที่เก็บข้อมูลมาตรฐานไม่มีกฎระยะเวลาเก็บข้อมูลขั้นต่ำ ซึ่งจะป้องกันค่าปรับการเรียกเก็บเงินสำหรับการลบก่อนกำหนดหากคุณอัปเดตหรือแทนที่ไฟล์ชั่วคราว
- แม้ว่าลูปการคำนวณของ Earth Engine จะไม่มีค่าธรรมเนียมเพิ่มเติมสำหรับการดึงข้อมูล Cloud Storage แต่การเข้าถึงพื้นที่เก็บข้อมูลที่ไม่ใช่ระดับมาตรฐานจากเครื่องมือภายนอก (เช่น ซอฟต์แวร์ GIS บนเดสก์ท็อป) จะมีค่าธรรมเนียมการดึงข้อมูลที่มีราคาสูง
- คุณต้องเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์ Google Cloud เพื่อใช้ GCS ดู เริ่มต้นใช้งาน Google Cloud Storage เพื่อเริ่มต้นใช้งาน
ขั้นตอนที่ 1: เตรียม COG
ไฟล์ TIFF ต้องได้รับการเพิ่มประสิทธิภาพสำหรับระบบคลาวด์ ไฟล์ TIFF ต้อง มีลักษณะดังนี้
- แบ่งเป็นส่วนๆ โดยมีขนาดส่วนดังนี้ 256x256, 512x512, 1024x1024 หรือ 2048x2048 เราขอแนะนำขนาด 512x512 ขึ้นไปเพื่อให้ได้ประสิทธิภาพสูงสุด
- จัดเรียงเพื่อให้ไดเรกทอรีไฟล์รูปภาพ (IFD) ทั้งหมดอยู่ที่จุดเริ่มต้น
- รวมภาพรวมที่เป็นกำลังของ 2
- ใช้การสอดแทรก BAND
คุณสามารถใช้ GDAL เพื่อแปลงรูปภาพได้
การใช้ไดรเวอร์ GDAL COG (แนะนำให้ใช้ GDAL >= 3.1)
gdal_translate in.tif out.tif \
-of COG \
-co BIGTIFF=YES \
-co OVERVIEWS=IGNORE_EXISTING \
-co COMPRESS=ZSTD \
-co LEVEL=16 \
-co BLOCKSIZE=512 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
-co PREDICTOR=2 # 2 for integers, 3 for floating point
การใช้ไดรเวอร์ GTiff มาตรฐาน
ขั้นแรก ให้สร้างภาพรวมที่เป็นกำลังของ 2 ภายใน (โดยใช้
gdal raster overview add
หรือ gdaladdo) จากนั้นคัดลอก
รูปภาพและภาพรวมลงในเลย์เอาต์ COG ที่แบ่งเป็นส่วนๆ
gdaladdo -r nearest in.tif 2 4 8 16 32 # or -r cubic for continuous/float data
gdal_translate in.tif out.tif \
-co BIGTIFF=YES \
-co COPY_SRC_OVERVIEWS=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co ZSTD_LEVEL=16 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
-co PREDICTOR=2 # 2 for integers, 3 for floating point
ขั้นตอนที่ 2: สร้างไฟล์ Manifest
ไม่ว่าคุณจะลงทะเบียน COG โดยใช้ไลบรารีของไคลเอ็นต์ Python ของ Earth Engine, เครื่องมือบรรทัดคำสั่ง earthengine หรือ Earth Engine REST API คุณต้องกำหนดไฟล์ Manifest การอัปโหลดรูปภาพที่ระบุปลายทางของชิ้นงาน, URI ของ Google Cloud Storage และข้อมูลเมตาของแถบสีที่ไม่บังคับ
ตัวอย่าง: COG เดียวที่สร้างขึ้นจากแถบสีทั้งหมด หาก COG มีแถบสีทั้งหมด (เช่น RGB) ไฟล์ Manifest จะต้องมีชุดไทล์เพียงชุดเดียว
{
"name": "projects/my-project/assets/my_cog_asset",
"tilesets": [
{
"id": "default_tileset",
"sources": [
{
"uris": [
"gs://google-sample-bucket/my_optimized_image.tif"
]
}
]
}
]
}
ตัวอย่าง: COG หลายรายการ (1 รายการต่อแถบสี) หากคุณมีไฟล์แยกต่างหากสำหรับแถบสีต่างๆ (เช่น แดง เขียว น้ำเงินในไฟล์แยกกัน)
{
"name": "projects/my-project/assets/my_multi_band_cog",
"tilesets": [
{
"id": "red_tileset",
"sources": [ { "uris": [ "gs://google-sample-bucket/band_red.tif" ] } ]
},
{
"id": "green_tileset",
"sources": [ { "uris": [ "gs://google-sample-bucket/band_green.tif" ] } ]
}
],
"bands": [
{ "id": "R", "tilesetId": "red_tileset", "tilesetBandIndex": 0 },
{ "id": "G", "tilesetId": "green_tileset", "tilesetBandIndex": 0 }
]
}
ขั้นตอนที่ 3: ส่งคำขอลงทะเบียน
คุณสามารถส่งไฟล์ Manifest ไปยัง Earth Engine ได้โดยใช้ไลบรารีของไคลเอ็นต์ Python ของ Earth Engine, เครื่องมือบรรทัดคำสั่ง earthengine หรือ Earth Engine REST API เลือกวิธีที่เหมาะกับเวิร์กโฟลว์ของคุณมากที่สุด
ไลบรารีของไคลเอ็นต์ Python
ในสคริปต์ Python หรือสมุดบันทึก Jupyter ให้ใช้ไลบรารีของไคลเอ็นต์ Python ของ Earth Engine (ee.data) หลังจากเริ่มต้นโปรเจ็กต์แล้ว
import ee # 1. Authenticate and initialize ee.Authenticate() ee.Initialize(project='your-project-id') # 2. Define the manifest as a Python dictionary manifest = { "name": "projects/your-project-id/assets/my_cog_asset", "tilesets": [ { "id": "default_tileset", "sources": [ { "uris": [ "gs://google-sample-bucket/my_optimized_image.tif" ] } ] } ] } # 3. Start the ingestion task (allow_overwrite=True corresponds to --force) result = ee.data.startExternalImageIngestion(manifest, allow_overwrite=True) print(f"Asset registered: {result['name']}")
เครื่องมือบรรทัดคำสั่ง
ในเทอร์มินัล ให้บันทึกไฟล์ Manifest ลงในไฟล์ที่ชื่อ
manifest.json แล้วเรียกใช้คำสั่งอัปโหลดearthengine ดังนี้
# 1. Verify your environment is authenticated earthengine authenticate # 2. Submit the external image upload task earthengine --project your-project-id \ upload external_image \ --manifest manifest.json
REST API (Python)
สำหรับเวิร์กโฟลว์อัตโนมัติที่ไม่มีไลบรารีของไคลเอ็นต์ ให้ส่งคำขอที่ได้รับอนุญาต
POST ไปยังปลายทาง Earth Engine REST API
projects.image.importExternal โดยตรง (แสดงให้เห็นที่นี่โดยใช้
Python)
import json from pprint import pprint import ee from google.auth.transport.requests import AuthorizedSession # 1. Authenticate and start an authorized HTTP session ee.Authenticate() ee_project = 'your-project-id' session = AuthorizedSession( ee.data.get_persistent_credentials().with_quota_project(ee_project) ) # 2. Define the REST request body wrapping the manifest request = { 'imageManifest': { 'name': f'projects/{ee_project}/assets/my_cog_asset', 'tilesets': [ { 'id': 'default_tileset', 'sources': [ { 'uris': [ 'gs://google-sample-bucket/my_optimized_image.tif' ] } ] } ] } } # 3. Send the POST request url = ( 'https://earthengine.googleapis.com/v1alpha/' f'projects/{ee_project}/image:importExternal' ) response = session.post(url=url, data=json.dumps(request)) pprint(json.loads(response.content))
เมื่อส่งแล้ว คำขอลงทะเบียนจะเริ่มการดำเนินการจัดทำดัชนีข้อมูลเมตาแบบเบา เนื่องจากการลงทะเบียน COG ไม่ได้คัดลอกข้อมูลพิกเซล การดำเนินการนี้จึงมักจะเสร็จสมบูรณ์ภายในไม่กี่วินาที
ข้อจำกัดของไฟล์ Manifest สำหรับชิ้นงาน COG
เมื่อสร้างไฟล์ Manifest สำหรับชิ้นงานที่สร้างขึ้นจาก COG โปรดทราบข้อจำกัดที่เข้มงวดต่อไปนี้ (ซึ่งแตกต่างจากไฟล์ Manifest การนำเข้าตามมาตรฐาน)
- Bucket เดียว: URI ทั้งหมดในไฟล์ Manifest ต้องอยู่ใน Bucket GCS เดียวกัน
- 1 URI ต่อแหล่งที่มา:
ImageSourceแต่ละรายการต้องมี URI เพียงรายการเดียว คุณไม่สามารถรวมไฟล์หลายไฟล์เข้าด้วยกันเป็นแหล่งที่มาของชุดไทล์เดียว หากต้องการรวมฉาก COG หลายฉาก ให้ลงทะเบียน COG แต่ละฉากเป็นชิ้นงาน แล้วรวมเข้าด้วยกันเป็นee.ImageCollectionโดยใช้.mosaic() - ไม่มี
mask_bands: ระบบไม่รองรับmask_bandsระดับบนสุด ใช้missingDataในไฟล์ Manifest หรือตรวจสอบว่า TIFF มีค่า nodata ภายใน - ไม่มี
data_typeในชุดไทล์: อย่าระบุdata_typeในส่วนtilesetsเนื่องจากระบบจะตรวจหาโดยอัตโนมัติ - ไม่มี
dimensionsในแหล่งที่มา: อย่าระบุdimensionsในImageSource - ไม่มี
subdataset_prefix/subdataset_suffix - ไม่มี
min_tile_area_ratioหรือskip_metadata_read
ขั้นตอนที่ 4: กำหนดค่าสิทธิ์ (สำคัญสำหรับการแชร์)
ข้อมูลพิกเซลของ COG จะยังคงอยู่ใน GCS ซึ่งแตกต่างจากชิ้นงาน Earth Engine มาตรฐาน เมื่อแชร์ชิ้นงานที่สร้างขึ้นจาก COG กับผู้อื่น คุณต้องให้สิทธิ์เข้าถึงแบบอ่านทั้งชิ้นงาน Earth Engine และไฟล์ GCS
1. ให้สิทธิ์ Bucket ของ GCS
ผู้ทำงานร่วมกันต้องมีสิทธิ์อ่านไฟล์จาก GCS
สิทธิ์ที่จำเป็นคือ
storage.buckets.get(เพื่อดึงข้อมูลเมตาและตำแหน่งของ Bucket)storage.objects.get(เพื่ออ่านข้อมูลพิกเซล)
คุณสามารถให้สิทธิ์เหล่านี้ได้โดยใช้บทบาทมาตรฐานของ Cloud Storage ต่อไปนี้
- ผู้มีสิทธิ์ดู Bucket ของพื้นที่เก็บข้อมูล (ให้สิทธิ์
storage.buckets.getเพื่ออ่านข้อมูลเมตาและตำแหน่งของ Bucket) - ผู้มีสิทธิ์ดูออบเจ็กต์พื้นที่เก็บข้อมูล (ให้สิทธิ์
storage.objects.getเพื่ออ่านข้อมูลพิกเซล)
ขั้นตอนการกำหนดค่าในคอนโซล Google Cloud
- ไปที่ เบราว์เซอร์ Cloud Storage.
- คลิกชื่อ Bucket
- เลือกแท็บสิทธิ์
- คลิกให้สิทธิ์เข้าถึง
- เพิ่มอีเมลของผู้ทำงานร่วมกัน (หรือ Google Group หรือ
allUsersสำหรับการเข้าถึงแบบสาธารณะ) - กำหนดบทบาทผู้มีสิทธิ์ดู Bucket ของพื้นที่เก็บข้อมูล และผู้มีสิทธิ์ดูออบเจ็กต์พื้นที่เก็บข้อมูล
- คลิกบันทึก
2. แชร์ชิ้นงาน Earth Engine
แชร์ชิ้นงานเองโดยใช้เครื่องมือจัดการชิ้นงานหรือ CLI ของ Earth Engine ดูรายละเอียดได้จากคู่มือ การจัดการชิ้นงาน
การจัดการรุ่นของออบเจ็กต์
เมื่อคุณลงทะเบียน COG แล้ว Earth Engine จะจัดเก็บรุ่น (เวอร์ชัน) ที่เฉพาะเจาะจงของออบเจ็กต์ GCS หากคุณอัปเดตไฟล์ใน GCS รุ่นของไฟล์จะเปลี่ยนไป
- โดยค่าเริ่มต้น Earth Engine จะโหลดชิ้นงานไม่สำเร็จและแสดงข้อผิดพลาด:
Failed to load the GeoTIFF at gs://google-sample-bucket/my-object#old-generation - ซึ่งออกแบบมาเพื่อป้องกันไม่ให้ข้อมูลเมตา (เช่น การฉายภาพหรือขอบเขต) ไม่ซิงค์กับพิกเซลพื้นฐาน
แนวทางปฏิบัติแนะนำ: หากต้องการอัปเดตข้อมูลรูปภาพพื้นฐาน ให้ลงทะเบียนเป็นชิ้นงานใหม่ หรือเรียกใช้คำสั่งอัปโหลดอีกครั้งโดยใช้แฟล็ก
--forceแทนที่จะเขียนทับไฟล์ในตำแหน่งเดิมearthengine --project your-project-id upload external_image --force --manifest manifest.json
การใช้ชิ้นงานที่ลงทะเบียน
เมื่อลงทะเบียนแล้ว คุณจะเข้าถึงชิ้นงานที่สร้างขึ้นจาก COG ในสคริปต์ Earth Engine ได้เช่นเดียวกับชิ้นงานรูปภาพที่นำเข้าตามมาตรฐาน
JavaScript
var image = ee.Image('projects/your-project-id/assets/my_cog_asset');
Python
image = ee.Image('projects/your-project-id/assets/my_cog_asset')