การอัปโหลดไฟล์ Manifest ของรูปภาพ

หากต้องการอัปโหลดรูปภาพไปยัง Google Earth Engine (EE) อย่างยืดหยุ่นมากขึ้นกว่าที่UI เครื่องมือแก้ไขโค้ดหรือคำสั่ง upload ของเครื่องมือบรรทัดคำสั่ง "earthengine" มีให้ ให้อธิบายการอัปโหลดรูปภาพโดยใช้ไฟล์ JSON ที่รู้จักกันในชื่อ "ไฟล์ Manifest" และใช้คำสั่ง upload image --manifest ของเครื่องมือบรรทัดคำสั่ง

ดูตัวอย่างทั้งหมดได้ในสมุดบันทึก Colab นี้ซึ่งสาธิตการอัปโหลดไทล์รูปภาพเป็นชิ้นงานเดียวโดยใช้ไฟล์ Manifest

การตั้งค่าแบบครั้งเดียว

  1. การอัปโหลดไฟล์ Manifest จะใช้งานได้กับไฟล์ที่อยู่ใน Google Cloud Storage เท่านั้น หากต้องการเริ่มใช้ Google Cloud Storage ให้สร้างโปรเจ็กต์ Google Cloud หากยังไม่มี โปรดทราบว่าการตั้งค่ากำหนดให้ระบุบัตรเครดิตสำหรับการเรียกเก็บเงิน EE ไม่ได้เรียกเก็บเงินจากใครในตอนนี้ แต่การโอนไฟล์ไปยัง Google Cloud Storage ก่อนอัปโหลดไปยัง EE จะมีค่าใช้จ่ายเล็กน้อย สำหรับขนาดข้อมูลการอัปโหลดทั่วไป (หลายสิบหรือหลายร้อยกิกะไบต์) ค่าใช้จ่ายจะค่อนข้างต่ำ
  2. ในโปรเจ็กต์ ให้เปิด Cloud Storage API และสร้างที่เก็บข้อมูล
  3. ติดตั้งไคลเอ็นต์ Python ของ Earth Engine ซึ่งรวมถึงearthengineเครื่องมือบรรทัดคำสั่งที่เราจะใช้อัปโหลดข้อมูล
  4. สําหรับการอัปโหลดอัตโนมัติ คุณอาจต้องใช้บัญชีบริการ 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. หน้ากากสำหรับแถบข้อมูลทั้งหมดในไฟล์เดียวกัน
  2. มาสก์สำหรับย่านความถี่ข้อมูลทั้งหมดที่มาจากไฟล์อื่นๆ ทั้งหมด
  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) เว้นแต่คุณจะเข้าใจผลกระทบที่อาจเกิดขึ้นกับข้อมูล