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

หากต้องการอัปโหลดตารางไปยัง Google Earth Engine (EE) อย่างยืดหยุ่นมากขึ้นกว่าที่ UI เครื่องมือแก้ไขโค้ด หรือคำสั่ง upload ของเครื่องมือบรรทัดคำสั่ง "earthengine" มีให้ ให้อธิบายการอัปโหลดตารางโดยใช้ไฟล์ JSON ที่รู้จักกันในชื่อ "ไฟล์ Manifest" และใช้คำสั่ง upload table --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 ที่เชื่อมโยงกับโปรเจ็กต์ คุณไม่จำเป็นต้องใช้บัญชีบริการสำหรับการทดสอบ แต่หากมีเวลา โปรดเริ่มทำความคุ้นเคยกับการใช้บัญชีบริการ

รหัสและชื่อเนื้อหา

สำหรับชิ้นงานในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ ให้ใช้ projects/my_cloud_project/assets/my_asset

สำหรับโปรเจ็กต์เดิมที่เก่ากว่า ชื่อชิ้นงานในไฟล์ Manifest ต้องแตกต่างจากรหัสชิ้นงานที่แสดงในส่วนอื่นๆ ของ Earth Engine เล็กน้อย หากต้องการอัปโหลดชิ้นงานที่รหัสเนื้อหาขึ้นต้นด้วย users/some_user หรือ projects/some_project ชื่อชิ้นงานในไฟล์ Manifest ต้องมีสตริง projects/earthengine-legacy/assets/ นำหน้ารหัส ตัวอย่างเช่น ควรอัปโหลดรหัสเนื้อหา EE users/username/my_table โดยใช้ชื่อ projects/earthengine-legacy/assets/users/username/my_table

ใช่ ซึ่งหมายความว่ารหัสอย่าง projects/some_projects/some_asset จะเปลี่ยนเป็นชื่อที่มี projects อยู่ 2 ครั้ง ดังนี้ projects/earthengine-legacy/assets/projects/some_projects/some_asset การดำเนินการนี้อาจทำให้สับสน แต่จำเป็นเพื่อให้เป็นไปตามมาตรฐานของ Google Cloud API

การใช้ไฟล์ Manifest

ไฟล์ Manifest ที่ง่ายที่สุดแสดงอยู่ด้านล่าง โดยจะอัปโหลดไฟล์ชื่อ small.csv จากที่เก็บข้อมูล Google Cloud Storage ชื่อ gs://earthengine-test

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/small.csv"
      ]
    }
  ]
}

หากต้องการใช้ ให้บันทึกลงในไฟล์ชื่อ manifest.json แล้วเรียกใช้คำสั่งต่อไปนี้

earthengine upload table --manifest /path/to/manifest.json

(ไฟล์ gs://earthengine-test/small.csv มีอยู่และอ่านได้แบบสาธารณะ คุณจึงใช้ไฟล์ดังกล่าวเพื่อทดสอบได้)

สำหรับการอัปโหลด Shapefile ให้ระบุเฉพาะไฟล์ .shp ระบบจะตรวจหาไฟล์อื่นๆ โดยอัตโนมัติ

แหล่งที่มาหลายแห่ง

คุณสามารถระบุแหล่งที่มาของ CSV หรือ Shapefile ได้หลายแหล่ง โดยให้มี 1 ไฟล์ต่อแหล่งที่มา ในกรณีนี้ ไฟล์ CSV แต่ละไฟล์ต้องมีโครงสร้างเดียวกัน ตัวอย่างเช่น เรามีไฟล์ CSV 2 ไฟล์ ได้แก่ region1.csv และ region2.csv

id รูปร่าง
1 {"type":"Point","coordinates":[-119,36]}
2 {"type":"Point","coordinates":[-118,37]}
3 {"type":"Point","coordinates":[-117,38]}
id รูปร่าง
4 {"type":"Point","coordinates":[-112,40]}
5 {"type":"Point","coordinates":[-111,41]}
6 {"type":"Point","coordinates":[-110,42]}

โครงสร้างเหมือนกัน แต่เนื้อหาต่างกัน ระบบได้อัปโหลดไฟล์เหล่านั้นไปยังที่เก็บข้อมูล Cloud Storage แล้ว gs://earthengine-test/region1.csv และ gs://earthengine-test/region2.csv หากต้องการนำเข้าเป็นเนื้อหาของ Earth Engine ให้สร้างไฟล์ Manifest ที่มี 2 รายการในรายการ sources ดังนี้

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/region1.csv"
      ]
    },
    {
      "uris": [
        "gs://earthengine-test/region2.csv"
      ]
    }
  ]
}

เวลาเริ่มต้นและสิ้นสุด

ชิ้นงานทั้งหมดควรระบุเวลาเริ่มต้นและสิ้นสุดเพื่อให้บริบทเพิ่มเติมแก่ข้อมูล โดยเฉพาะอย่างยิ่งหากรวมอยู่ในคอลเล็กชัน คุณไม่จำเป็นต้องกรอกข้อมูลในช่องเหล่านี้ แต่เราขอแนะนําอย่างยิ่งให้กรอกทุกครั้งที่เป็นไปได้

โดยปกติแล้ว เวลาเริ่มต้นและเวลาสิ้นสุดหมายถึงเวลาของการสังเกตการณ์ ไม่ใช่เวลาที่สร้างไฟล์ต้นทาง

ระบบจะถือว่าเวลาสิ้นสุดเป็นขอบเขตที่ไม่รวมเวลาอื่นเพื่อความสะดวก ตัวอย่างเช่น สําหรับชิ้นงานที่ครอบคลุม 1 วันพอดี ให้ใช้เวลาเที่ยงคืนของ 2 วันติดต่อกัน (เช่น 1980-01-31T00:00:00 และ 1980-02-01T00:00:00) เป็นเวลาเริ่มต้นและเวลาสิ้นสุด หากชิ้นงานไม่มีระยะเวลา ให้ตั้งค่าเวลาสิ้นสุดให้เหมือนกับเวลาเริ่มต้น แสดงเวลาในไฟล์ Manifest เป็นสตริง ISO 8601 เราขอแนะนำให้ถือว่าเวลาสิ้นสุดเป็นค่าที่ไม่รวม (เช่น เที่ยงคืนของวันถัดไปสำหรับชิ้นงานรายวัน) เพื่อให้ค่าวันที่ง่ายขึ้น

ตัวอย่าง

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://bucket/table_20190612.csv"
      ]
    }
  ],
  "startTime": "1980-01-31T00:00:00Z",
  "endTime": "1980-02-01T00:00:00Z"
}

ข้อมูลอ้างอิงโครงสร้างไฟล์ Manifest

โครงสร้าง JSON ต่อไปนี้มีช่องไฟล์ Manifest การอัปโหลดตารางที่เป็นไปได้ทั้งหมด ดูคำจำกัดความของฟิลด์ได้ใน ส่วนคำจำกัดความของฟิลด์ไฟล์ Manifest ต่อไปนี้

{
  "name": <string>,
  "sources": [
    {
      "uris": [
        <string>
      ],
      "charset": <string>,
      "maxErrorMeters": <double>,
      "maxVertices": <int32>,
      "crs": <string>,
      "geodesic": <boolean>,
      "primaryGeometryColumn": <string>,
      "xColumn": <string>,
      "yColumn": <string>,
      "dateFormat": <string>,
      "csvDelimiter": <string>,
      "csvQualifier": <string>,
    }
  ],
  "uriPrefix": <string>,
  "startTime": {
    "seconds": <integer>
  },
  "endTime": {
    "seconds": <integer>
  },
  "properties": {
    <unspecified>
  }
}

คําจํากัดความของช่องไฟล์ Manifest

ชื่อ

string

ชื่อของชิ้นงานที่สร้างขึ้น name มีรูปแบบเป็น "projects/*/assets/**" (เช่น projects/earthengine-legacy/assets/users/USER/ASSET)

แหล่งที่มา

list

รายการฟิลด์ที่กําหนดพร็อพเพอร์ตี้ของไฟล์ตารางและไฟล์แนบ ดูข้อมูลเพิ่มเติมได้ในsourcesช่ององค์ประกอบของพจนานุกรม

sources[i].uris

list

รายการ URI ของข้อมูลที่จะนำเข้ามา ปัจจุบันระบบรองรับเฉพาะ URI ของ Google Cloud Storage เท่านั้น โดยต้องระบุ URI แต่ละรายการในรูปแบบต่อไปนี้ gs://bucket-id/object-id ออบเจ็กต์หลักควรเป็นองค์ประกอบแรกของรายการ และรายการอื่นๆ ควรแสดงตามหลัง URI แต่ละรายการจะมี TableManifest.uri_prefix อยู่ข้างหน้าหากมีการตั้งค่าไว้

sources[i].charset

string

ชื่อชุดอักขระเริ่มต้นที่จะใช้ถอดรหัสสตริง หากเป็นค่าว่าง ระบบจะถือว่าค่าเริ่มต้นเป็น "UTF-8"

sources[i].maxErrorMeters

double

ข้อผิดพลาดสูงสุดที่อนุญาตเป็นเมตรเมื่อเปลี่ยนรูปแบบเรขาคณิตระหว่างระบบพิกัด หากเว้นว่างไว้ ระบบจะกำหนดข้อผิดพลาดสูงสุดเป็น 1 เมตรโดยค่าเริ่มต้น

sources[i].maxVertices

int32

จํานวนจุดยอดสูงสุด หากไม่ใช่ 0 ระบบจะแบ่งรูปทรงเรขาคณิตออกเป็นชิ้นส่วนที่ไม่ต่อเนื่องกันในพื้นที่ โดยแต่ละชิ้นส่วนต้องอยู่ภายใต้ขีดจำกัดนี้

sources[i].crs

string

รหัส CRS หรือสตริง WKT เริ่มต้นที่ระบุระบบการอ้างอิงพิกัดของรูปเรขาคณิตที่ไม่ได้ระบุ หากเว้นว่างไว้ ค่าเริ่มต้นจะเป็น EPSG:4326 สำหรับแหล่งที่มา CSV/TFRecord เท่านั้น

sources[i].geodesic

boolean

กลยุทธ์เริ่มต้นสำหรับการตีความขอบในเรขาคณิตที่ไม่มีการกำหนดไว้เป็นอย่างอื่น หากเป็นเท็จ ขอบจะตรงในการแสดงผล หากเป็น "จริง" ขอบจะโค้งตามเส้นทางที่สั้นที่สุดบนพื้นผิวโลก หากเว้นว่างไว้ ระบบจะใช้ค่าเริ่มต้นเป็น "เท็จ" หาก CRS เป็นระบบพิกัดที่โปรเจ็กต์ สำหรับแหล่งที่มา CSV/TFRecord เท่านั้น

sources[i].primaryGeometryColumn

string

คอลัมน์เรขาคณิตที่จะใช้เป็นเรขาคณิตหลักของแถวเมื่อมีคอลัมน์เรขาคณิตมากกว่า 1 คอลัมน์

หากปล่อยว่างไว้และมีคอลัมน์เรขาคณิตมากกว่า 1 คอลัมน์ ระบบจะใช้คอลัมน์เรขาคณิตคอลัมน์แรก สำหรับแหล่งที่มา CSV/TFRecord เท่านั้น

sources[i].xColumn

string

ชื่อของคอลัมน์พิกัด x แบบตัวเลขสําหรับการอนุมานเรขาคณิตของจุด หากระบุ yColumn ด้วย และทั้ง 2 คอลัมน์มีค่าตัวเลข ระบบจะสร้างคอลัมน์เรขาคณิตจุดที่มีค่า x,y ในระบบพิกัดที่ระบุไว้ใน CRS หากเว้นว่างไว้และ CRS ไม่ได้ระบุระบบพิกัดที่โปรเจ็กต์ ค่าเริ่มต้นจะเป็น "ลองจิจูด" หากปล่อยว่างไว้และ CRS ระบุระบบพิกัดที่โปรเจ็กต์ ระบบจะตั้งค่าเริ่มต้นเป็นสตริงว่างและจะไม่สร้างเรขาคณิตจุด

ระบบจะตั้งชื่อคอลัมน์เรขาคณิตจุดที่สร้างขึ้นว่า {xColumn}_{yColumn}_N โดยต่อท้ายด้วย N เพื่อให้ {xColumn}_{yColumn}_N ไม่ซ้ำกันหากมีคอลัมน์ชื่อ {xColumn}_{yColumn} อยู่แล้ว สำหรับแหล่งที่มา CSV/TFRecord เท่านั้น

sources[i].yColumn

string

ชื่อคอลัมน์พิกัด y แบบตัวเลขสําหรับการอนุมานเรขาคณิตของจุด หากระบุ xColumn ด้วย และทั้ง 2 คอลัมน์มีค่าตัวเลข ระบบจะสร้างคอลัมน์เรขาคณิตจุดที่มีค่า x,y ในระบบพิกัดที่ระบุไว้ใน CRS หากเว้นว่างไว้และ CRS ไม่ได้ระบุระบบพิกัดเชิงโปรเจ็กต์ ระบบจะใช้ค่าเริ่มต้นเป็น "ละติจูด" หากปล่อยว่างไว้และ CRS ระบุระบบพิกัดที่โปรเจ็กต์ ระบบจะตั้งค่าเริ่มต้นเป็นสตริงว่างและจะไม่สร้างเรขาคณิตจุด

ระบบจะตั้งชื่อคอลัมน์เรขาคณิตจุดที่สร้างขึ้นว่า {xColumn}_{yColumn}_N โดยต่อท้ายด้วย N เพื่อให้ {xColumn}_{yColumn}_N ไม่ซ้ำกันหากมีคอลัมน์ชื่อ {xColumn}_{yColumn} อยู่แล้ว สำหรับแหล่งที่มา CSV/TFRecord เท่านั้น

sources[i].dateFormat

string

รูปแบบที่ใช้แยกวิเคราะห์ฟิลด์ที่เข้ารหัสวันที่ รูปแบบต้องเป็นไปตามที่อธิบายไว้ในเอกสารประกอบของคลาส DateTimeFormat ของ Joda-Time หากเว้นว่างไว้ ระบบจะนําเข้าวันที่เป็นสตริง สำหรับแหล่งที่มา CSV/TFRecord เท่านั้น

sources[i].csvDelimiter

string

เมื่อนำเข้าไฟล์ CSV อักขระเดี่ยวที่ใช้เป็นตัวคั่นระหว่างค่าของคอลัมน์ในแถว หากเว้นว่างไว้ ระบบจะใช้ค่าเริ่มต้นเป็น ',' สำหรับแหล่งที่มา CSV เท่านั้น

sources[i].csvQualifier

string

อักขระที่ล้อมรอบค่าคอลัมน์ (หรือที่เรียกว่า "อักขระคำพูด") เมื่อนำเข้าไฟล์ CSV หากเว้นว่างไว้ ระบบจะใช้ค่าเริ่มต้นเป็น " สำหรับแหล่งที่มา CSV เท่านั้น

หากค่าของคอลัมน์ไม่ได้อยู่ในเครื่องหมายระบุ ระบบจะตัดช่องว่างด้านหน้าและด้านหลังออก เช่น

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
while:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

คำนำหน้าที่ไม่บังคับซึ่งจะใส่ไว้ข้างหน้า uris ทั้งหมดที่กําหนดไว้ในไฟล์ Manifest

startTime

integer

การประทับเวลาที่เชื่อมโยงกับเนื้อหา หากมี ซึ่งโดยทั่วไปจะสอดคล้องกับเวลาที่รวบรวมข้อมูล สําหรับชิ้นงานที่สอดคล้องกับช่วงเวลา เช่น ค่าเฉลี่ยในช่วง 1 เดือนหรือ 1 ปี การประทับเวลานี้จะสอดคล้องกับช่วงเริ่มต้น ระบุเป็นวินาทีและ (ไม่บังคับ) นาโนวินาทีนับจากจุดเริ่มต้น (1970-01-01) ถือว่าอยู่ในเขตเวลา UTC

endTime

integer

สําหรับชิ้นงานที่สอดคล้องกับช่วงเวลา เช่น ค่าเฉลี่ยในช่วง 1 เดือนหรือ 1 ปี การประทับเวลานี้จะสอดคล้องกับช่วงสิ้นสุดของช่วงเวลานั้น (ไม่รวม) ระบุเป็นวินาทีและ (ไม่บังคับ) นาโนวินาทีนับจากจุดเริ่มต้น (1970-01-01) ถือว่าอยู่ในเขตเวลา UTC

พร็อพเพอร์ตี้

dictionary

พจนานุกรมแบบแบนตามอำเภอใจของคู่คีย์-ค่า คีย์ต้องเป็นสตริงและค่าอาจเป็นตัวเลขหรือสตริงก็ได้ ยังไม่รองรับค่ารายการสําหรับชิ้นงานที่ผู้ใช้อัปโหลด

columnDataTypeOverrides

dictionary

หากการตรวจหาประเภทอัตโนมัติไม่ทํางานอย่างถูกต้อง ให้ใช้ช่องนี้โดยใช้ชื่อคอลัมน์เป็นคีย์และค่าคงที่อย่างใดอย่างหนึ่งต่อไปนี้เป็นค่า ได้แก่ COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC และ COLUMN_DATA_TYPE_LONG

ข้อจำกัด

ขนาดไฟล์ Manifest JSON

ไฟล์ Manifest ในรูปแบบ JSON ต้องมีขนาดไม่เกิน 10 MB หากมีไฟล์จำนวนมากที่จะอัปโหลด ให้พิจารณาหาวิธีลดจำนวนอักขระที่จําเป็นในการอธิบายชุดข้อมูล เช่น ใช้ช่อง uriPrefix เพื่อไม่ต้องระบุเส้นทางที่เก็บข้อมูล GCP สำหรับ URI แต่ละรายการในรายการ uris หากจำเป็นต้องลดขนาดไฟล์อีก ให้ลองทำให้ชื่อไฟล์สั้นลง