หากต้องการอัปโหลดตารางไปยัง 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.csv
gs://earthengine-test/region2.csv
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
...," 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
หากจำเป็นต้องลดขนาดไฟล์อีก ให้ลองทำให้ชื่อไฟล์สั้นลง