หากต้องการอัปโหลดตารางไปยัง Google Earth Engine (EE) อย่างยืดหยุ่นมากขึ้นกว่าที่ UI เครื่องมือแก้ไขโค้ด หรือคำสั่ง upload ของเครื่องมือบรรทัดคำสั่ง "earthengine" มีให้ ให้อธิบายการอัปโหลดตารางโดยใช้ไฟล์ JSON ที่รู้จักกันในชื่อ "ไฟล์ Manifest" และใช้คำสั่ง upload table --manifest ของเครื่องมือบรรทัดคำสั่ง
การตั้งค่าแบบครั้งเดียว
- การอัปโหลดไฟล์ Manifest จะใช้งานได้กับไฟล์ที่อยู่ใน Google Cloud Storage เท่านั้น หากต้องการเริ่มใช้ Google Cloud Storage ให้สร้างโปรเจ็กต์ Google Cloud หากยังไม่มี โปรดทราบว่าการตั้งค่ากำหนดให้ระบุบัตรเครดิตสำหรับการเรียกเก็บเงิน EE ไม่ได้เรียกเก็บเงินจากใครในตอนนี้ แต่การโอนไฟล์ไปยัง Google Cloud Storage ก่อนอัปโหลดไปยัง EE จะมีค่าใช้จ่ายเล็กน้อย สำหรับขนาดข้อมูลการอัปโหลดทั่วไป (หลายสิบหรือหลายร้อยกิกะไบต์) ค่าใช้จ่ายจะค่อนข้างต่ำ
- ในโปรเจ็กต์ ให้เปิด Cloud Storage API และสร้างที่เก็บข้อมูล
- ติดตั้งไคลเอ็นต์ Python ของ Earth Engine ซึ่งรวมถึง
earthengineเครื่องมือบรรทัดคำสั่งที่เราจะใช้อัปโหลดข้อมูล - สําหรับการอัปโหลดอัตโนมัติ คุณอาจต้องใช้บัญชีบริการ 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.csvgs://earthengine-test/region2.csvsources ดังนี้
{ "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
...," 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 หากจำเป็นต้องลดขนาดไฟล์อีก ให้ลองทำให้ชื่อไฟล์สั้นลง