คุณสามารถส่งออกรูปภาพจาก Earth Engine ในรูปแบบ GeoTIFF หรือ TFRecord ได้ ดูตัวเลือกเอาต์พุตเพิ่มเติมได้ที่พารามิเตอร์การกำหนดค่า
ตัวอย่างการตั้งค่า
เริ่มต้นด้วยการกำหนดข้อมูลรูปภาพที่จะส่งออก ดังนี้
ตัวแก้ไขโค้ด (JavaScript)
// Load a landsat image and select three bands. var landsat = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_123032_20140515') .select(['B4', 'B3', 'B2']); // Create a geometry representing an export region. var geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236]);
import ee import geemap.core as geemap
Colab (Python)
# Load a landsat image and select three bands. landsat = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_123032_20140515').select( ['B4', 'B3', 'B2'] ) # Create a geometry representing an export region. geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236])
จากนั้นกำหนดพารามิเตอร์ projection ที่จะใช้ในการส่งออกต่อไปนี้ เราใช้พารามิเตอร์ crs เพื่อระบุระบบพิกัด
และพารามิเตอร์ crsTransform เพื่อระบุตารางกริดพิกเซลอย่างแม่นยำ พารามิเตอร์ crsTransform คือรายการพารามิเตอร์จากเมทริกซ์การแปลงแอฟฟีนตามลำดับแถวหลัก [xScale, xShearing, xTranslation, yShearing, yScale, yTranslation] จุดเริ่มต้นของรูปภาพจะกำหนดโดยค่า xTranslation และ yTranslation และขนาดพิกเซลของรูปภาพจะกำหนดโดยค่า xScale และ yScale ดูตัวอย่างเมทริกซ์แอฟฟีน
ตัวแก้ไขโค้ด (JavaScript)
// Retrieve the projection information from a band of the original image. // Call getInfo() on the projection to request a client-side object containing // the crs and transform information needed for the client-side Export function. var projection = landsat.select('B2').projection().getInfo();
import ee import geemap.core as geemap
Colab (Python)
# Retrieve the projection information from a band of the original image. # Call getInfo() on the projection to request a client-side object containing # the crs and transform information needed for the client-side Export function. projection = landsat.select('B2').projection().getInfo()
การตั้งค่า scale
คุณสามารถระบุพารามิเตอร์ scale เป็นทางลัด แล้ว Earth Engine จะคำนวณพารามิเตอร์ crsTransform ให้คุณ อย่างไรก็ตาม การตั้งค่าสเกลของรูปภาพเพียงอย่างเดียวไม่ได้ระบุจุดเริ่มต้นของการฉายภาพ และอาจส่งผลให้รูปภาพเลื่อนไปเมื่อเทียบกับรูปภาพอื่นที่มีขนาดพิกเซลเท่ากัน
สาเหตุที่อาจเกิดการเปลี่ยนแปลงคือระบบใช้พารามิเตอร์ scale เพื่อป้อนค่า xScale และ yScale ของ crsTransform แต่ระบบจะคำนวณค่า xTranslation และ yTranslation เพื่อให้เศษเหลือเป็นศูนย์หากหารด้วยค่า xScale และ yScale ที่เกี่ยวข้อง พารามิเตอร์เหล่านี้จะระบุตารางกริดพิกเซลที่จุดเริ่มต้นของการฉายภาพอยู่ที่มุมของพิกเซล รูปแบบนี้แตกต่างจากพารามิเตอร์การแปลที่ผู้ให้บริการข้อมูลบางรายใช้ ซึ่งใช้ตารางกริดที่ออฟเซ็ตจากจุดเริ่มต้นของการฉายภาพ ตัวอย่างเช่น รูปภาพ Landsat ที่ USGS มีให้ใช้พารามิเตอร์การแปลที่ออฟเซ็ต 1/2 พิกเซลจากต้นทางของการฉายภาพ (ออฟเซ็ต 15 ม. สำหรับย่านความถี่ 30 ม.) ขณะที่รูปภาพ Sentinel-2 ที่ ESA มีให้ใช้พารามิเตอร์การแปลที่สอดคล้องกับต้นทางของการฉายภาพ หาก crsTransform ที่ระบุในการส่งออกไม่ตรงกับ crsTransform ของรูปภาพต้นฉบับ ระบบจะสุ่มตัวอย่างพิกเซลเอาต์พุตใหม่ (โดยใช้เพื่อนบ้านที่ใกล้ที่สุดโดยค่าเริ่มต้น) ซึ่งจะทำให้รูปภาพที่ได้เปลี่ยนไปเมื่อเทียบกับรูปภาพต้นฉบับ
สรุปคือ หากต้องการจับคู่พิกเซลของรูปภาพที่ส่งออกกับรูปภาพที่เฉพาะเจาะจง ให้ใช้พารามิเตอร์ crs และ crsTransform เพื่อควบคุมตารางกริดได้อย่างเต็มที่
ไปยังไดรฟ์
หากต้องการส่งออกรูปภาพไปยังบัญชีไดรฟ์ ให้ใช้ Export.image.toDrive() ตัวอย่างเช่น หากต้องการส่งออกบางส่วนของรูปภาพ Landsat ให้กำหนดภูมิภาคที่จะส่งออก แล้วเรียกใช้ Export.image.toDrive() ดังนี้
ตัวแก้ไขโค้ด (JavaScript)
// Export the image, specifying the CRS, transform, and region. Export.image.toDrive({ image: landsat, description: 'imageToDriveExample_transform', crs: projection.crs, crsTransform: projection.transform, region: geometry });
import ee import geemap.core as geemap
Colab (Python)
# Export the image, specifying the CRS, transform, and region. task = ee.batch.Export.image.toDrive( image=landsat, description='imageToDriveExample_transform', crs=projection['crs'], crsTransform=projection['transform'], region=geometry, ) task.start()
เมื่อเรียกใช้โค้ดนี้ ระบบจะสร้างงานส่งออกในแท็บงานของตัวแก้ไขโค้ด คลิกปุ่มเรียกใช้ข้างงานเพื่อเริ่มงาน (ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวจัดการงานได้จากส่วนตัวแก้ไขโค้ด) ระบบจะสร้างรูปภาพในบัญชีไดรฟ์ของคุณโดยใช้ fileFormat ที่ระบุ
ไปยัง Cloud Storage
หากต้องการส่งออกรูปภาพไปยังที่เก็บข้อมูล Google Cloud Storage ให้ใช้ Export.image.toCloudStorage() หากต้องการส่งออกรูปภาพ Landsat ในตัวอย่างก่อนหน้าไปยัง Cloud Storage แทนไดรฟ์ ให้ใช้คำสั่งต่อไปนี้
ตัวแก้ไขโค้ด (JavaScript)
// Export the image to Cloud Storage. Export.image.toCloudStorage({ image: landsat, description: 'imageToCloudExample', bucket: 'your-bucket-name', fileNamePrefix: 'exampleExport', crs: projection.crs, crsTransform: projection.transform, region: geometry });
import ee import geemap.core as geemap
Colab (Python)
# Export the image to Cloud Storage. task = ee.batch.Export.image.toCloudStorage( image=landsat, description='imageToCloudExample', bucket='your-bucket-name', fileNamePrefix='exampleExport', crs=projection['crs'], crsTransform=projection['transform'], region=geometry, ) task.start()
เช่นเดียวกับการส่งออกไปยังไดรฟ์ ให้เริ่มการส่งออกจากแท็บงาน หากคุณวางแผนที่จะอ่านไฟล์ที่ส่งออกกลับไปยัง Earth Engine (ด้วย ee.Image.loadGeoTIFF() หรือโดยการลงทะเบียนเป็นชิ้นงานที่ COG สนับสนุน) บัケットต้องอยู่ในตำแหน่งที่รองรับ
เป็นชิ้นงาน
หากต้องการส่งออกรูปภาพไปยังชิ้นงานในโฟลเดอร์ชิ้นงาน Earth Engine ให้ใช้ Export.image.toAsset() หากต้องการจัดการชิ้นงาน Earth Engine หรือตรวจสอบปริมาณโควต้าพื้นที่เก็บข้อมูลที่ใช้ไป ให้ใช้เครื่องมือจัดการชิ้นงาน ตัวอย่างต่อไปนี้แสดงการส่งออกบางส่วนของรูปภาพ Landsat โดยใช้นโยบายการสร้างปิรามิดที่แตกต่างกันสำหรับแบนด์เดียวกัน นโยบายการสร้างปิรามิดจะระบุวิธีที่ Earth Engine คำนวณชิ้นงานเวอร์ชันที่มีความละเอียดต่ำกว่า ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Earth Engine จัดการความละเอียดหลายระดับในเอกสารประกอบเกี่ยวกับมาตราส่วน
ตัวแก้ไขโค้ด (JavaScript)
// Get band 4 from the Landsat image, copy it. var band4 = landsat.select('B4').rename('b4_mean') .addBands(landsat.select('B4').rename('b4_sample')) .addBands(landsat.select('B4').rename('b4_max')); // Export the image to an Earth Engine asset. Export.image.toAsset({ image: band4, description: 'imageToAssetExample', assetId: 'exampleExport', crs: projection.crs, crsTransform: projection.transform, region: geometry, pyramidingPolicy: { 'b4_mean': 'mean', 'b4_sample': 'sample', 'b4_max': 'max' } });
import ee import geemap.core as geemap
Colab (Python)
# Get band 4 from the Landsat image, copy it. band_4 = ( landsat.select('B4') .rename('b4_mean') .addBands(landsat.select('B4').rename('b4_sample')) .addBands(landsat.select('B4').rename('b4_max')) ) # Export the image to an Earth Engine asset. task = ee.batch.Export.image.toAsset( image=band_4, description='imageToAssetExample', assetId='projects/your-project/assets/exampleExport', crs=projection['crs'], crsTransform=projection['transform'], region=geometry, pyramidingPolicy={ 'b4_mean': 'mean', 'b4_sample': 'sample', 'b4_max': 'max', }, ) task.start()
คุณสามารถระบุนโยบายการสร้างพีระมิดเริ่มต้นสำหรับทุกย่านความถี่ที่ไม่ได้ระบุไว้อย่างชัดเจนโดยใช้คีย์ '.default' หรือจะส่งเฉพาะคีย์ '.default' ก็ได้ เช่น หากต้องการให้ทุกย่านความถี่ใช้ค่าเริ่มต้นเป็นนโยบายการจัดเรียงแบบพีระมิด "ตัวอย่าง" ให้ใช้ {'.default': 'sample'}
พารามิเตอร์การกำหนดค่า
สังเกตว่าพจนานุกรมของพารามิเตอร์การกำหนดค่าที่ส่งไปยัง Export.image มี scale (เป็นเมตร) และภูมิภาคการส่งออกเป็น ee.Geometry รูปภาพที่ส่งออกจะครอบคลุมพื้นที่ที่ระบุด้วยพิกเซลตามมาตราส่วนที่ระบุ หากไม่ได้ระบุไว้อย่างชัดเจน ระบบจะนำ CRS ของเอาต์พุตมาจากแบนด์แรกของรูปภาพที่จะส่งออก
นอกจากนี้ คุณยังระบุ dimensions, crs และ/หรือ crsTransform ของรูปภาพที่ส่งออกได้ด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับ crs และ crsTransform ได้ที่อภิธานศัพท์ ตัวอย่างเช่น หากต้องการให้บล็อกพิกเซลจัดแนวให้ตรงกับแหล่งข้อมูลอื่นอย่างแม่นยำ ให้ระบุ dimensions, crs และ crsTransform
หากต้องการรับบล็อกพิกเซลขนาดที่กำหนดไว้ล่วงหน้า (เช่น ภาพขนาดย่อขนาด 256x256) ที่ครอบคลุมภูมิภาค ให้ระบุ dimensions และ region
คุณระบุรูปแบบเอาต์พุตรูปภาพ (หากปลายทางไม่ใช่ toAsset()) ได้ด้วยพารามิเตอร์ fileFormat ('GeoTIFF' โดยค่าเริ่มต้น)
พารามิเตอร์ formatOptions
ตัวเลือกการกำหนดค่าอื่นๆ จะตั้งค่าด้วยพารามิเตอร์ formatOptions ซึ่งควรเป็นพจนานุกรมที่คีย์โดยตัวเลือกรูปแบบอื่นๆ โดยเฉพาะสำหรับแต่ละ fileFormat ตามที่อธิบายไว้ด้านล่าง
GeoTIFF
Cloud Optimized GeoTIFF (COG)
หากต้องการส่งออก Cloud Optimized GeoTIFF (COG) ให้ตั้งค่าคีย์ cloudOptimized เป็น true ใน formatOptions ต่อจากตัวอย่างก่อนหน้า
ตัวแก้ไขโค้ด (JavaScript)
// Export a cloud-optimized GeoTIFF. Export.image.toDrive({ image: landsat, description: 'imageToCOGeoTiffExample', crs: projection.crs, crsTransform: projection.transform, region: geometry, fileFormat: 'GeoTIFF', formatOptions: { cloudOptimized: true } });
import ee import geemap.core as geemap
Colab (Python)
# Export a cloud-optimized GeoTIFF. task = ee.batch.Export.image.toDrive( image=landsat, description='imageToCOGeoTiffExample', crs=projection['crs'], crsTransform=projection['transform'], region=geometry, fileFormat='GeoTIFF', formatOptions={'cloudOptimized': True}, ) task.start()
คุณสามารถโหลด COG ซ้ำจาก Cloud Storage ลงใน Image หรือลงทะเบียนเป็นชิ้นงานได้ ดูข้อกำหนดและตัวเลือกการส่งออกทั้งหมดได้ที่ภาพรวมของ COG
Nodata
ระบุค่า nodata ของ GeoTIFF โดยใช้คีย์ noData ภายในพารามิเตอร์ formatOptions เช่น
ตัวแก้ไขโค้ด (JavaScript)
// Set a nodata value and replace masked pixels around the image edge with it. var noDataVal = -9999; landsat = landsat.unmask(noDataVal); Export.image.toDrive({ image: landsat, description: 'imageNoDataExample', crs: projection.crs, scale: 2000, // large scale for minimal demo region: landsat.geometry(), // full image bounds fileFormat: 'GeoTIFF', formatOptions: { noData: noDataVal, } });
import ee import geemap.core as geemap
Colab (Python)
# Set a nodata value and replace masked pixels around the image edge with it. no_data_val = -9999 landsat = landsat.unmask(no_data_val) task = ee.batch.Export.image.toDrive( image=landsat, description='imageNoDataExample', crs=projection['crs'], scale=2000, # large scale for minimal demo region=landsat.geometry(), # full image bounds fileFormat='GeoTIFF', formatOptions={'noData': no_data_val}, ) task.start()
โปรดทราบว่าค่า nodata ควรอยู่ภายในช่วงที่ถูกต้องสำหรับ PixelType ของรูปภาพ คุณสามารถตรวจสอบ PixelType ได้โดยพิมพ์ข้อมูลเมตาของรูปภาพและดูพร็อพเพอร์ตี้ data_type ของแบนด์แรก นอกจากนี้ คุณยังตั้งค่าPixelTypeของรูปภาพได้ด้วยการแคสต์ข้อมูลไปยังประเภทที่เฉพาะเจาะจงโดยใช้เมธอดรูปภาพ toShort() หรือ toInt() เป็นต้น
TFRecord
ดูหน้ารูปแบบข้อมูล TFRecord
maxPixels
พารามิเตอร์ maxPixels มีไว้เพื่อป้องกันไม่ให้มีการสร้างการส่งออกขนาดใหญ่มากโดยไม่ตั้งใจ หากค่าเริ่มต้นต่ำเกินไปสำหรับรูปภาพเอาต์พุตที่ต้องการ คุณสามารถเพิ่ม maxPixels ได้ เช่น
Export.image.toDrive({ image: landsat, description: 'maxPixelsExample', crs: projection.crs, crsTransform: projection.transform, region: geometry, maxPixels: 1e9 });
การส่งออกไฟล์ขนาดใหญ่
หากรูปภาพเอาต์พุตมีขนาดใหญ่ ระบบจะส่งออกเป็นไฟล์หลายไฟล์ หากคุณส่งออกเป็น GeoTIFF ระบบจะแบ่งรูปภาพออกเป็นชิ้นส่วนต่างๆ ชื่อไฟล์ของแต่ละไทล์จะอยู่ในรูปแบบ baseFilename-yMin-xMin โดยที่ xMin และ yMin คือพิกัดของแต่ละไทล์ภายในกรอบล้อมรอบโดยรวมของรูปภาพที่ส่งออก
หากคุณส่งออกไปยัง TFRecord ระบบจะต่อท้ายไฟล์ด้วย -00000, -00001,... -0000N สำหรับไฟล์ N+1 การรักษาลำดับนี้เป็นสิ่งสำคัญหากคุณต้องการทำการอนุมานในไฟล์และอัปโหลดการคาดการณ์กลับไปยัง Earth Engine เป็นรูปภาพ ดูรายละเอียดได้ที่การอัปโหลดรูปภาพเป็นไฟล์ TFRecord
การส่งออกรูปภาพตามที่ปรากฏในตัวแก้ไขโค้ด
หากต้องการส่งออกภาพตามที่แสดงผลบนหน้าจอใน Earth Engine ให้สร้างภาพการแสดงข้อมูลผ่านภาพตามที่แสดงในส่วนภาพการแสดงข้อมูลผ่านภาพและการจัดองค์ประกอบและการต่อภาพ เนื่องจากตัวแก้ไขโค้ดใช้ CRS 'EPSG:3857' ให้ระบุ CRS เป็น 'EPSG:3857' ในการส่งออกเพื่อให้ได้รูปภาพในการฉายภาพเดียวกันกับที่แสดงในแผนที่ตัวแก้ไขโค้ด ดูรายละเอียดเกี่ยวกับการระบุความละเอียดและระบบพิกัดของเอาต์พุตได้ที่ส่วนการกำหนดค่าการส่งออกรูปภาพ