如果您需要更靈活的方式將資料表上傳至 Google Earth Engine (EE),而非使用 程式碼編輯器 UI 或 earthengine 指令列工具的 upload
指令,可以使用稱為「資訊清單」的 JSON 檔案描述資料表上傳作業,並使用指令列工具的 upload table --manifest
指令。
一次性設定
- 資訊清單上傳功能僅適用於位於 Google Cloud Storage 中的檔案。如要開始使用 Google Cloud Storage,請建立 Google Cloud 專案 (如果您還沒有專案)。請注意,設定時必須指定用於結帳的信用卡。EE 目前不會向任何人收費,但將檔案轉移至 Google Cloud Storage 後再上傳至 EE 會產生少許費用。對於一般上傳資料大小 (數十或數百 GB),費用會相當低。
- 在專案中啟用 Cloud Storage API,並建立值區。
- 安裝 Earth Engine Python 用戶端。其中包含
earthengine
指令列工具,我們會用來上傳資料。 - 如要自動上傳,建議您使用與專案相關聯的 Google Cloud 服務帳戶。您不需要服務帳戶進行測試,但請在有空時開始熟悉如何使用服務帳戶。
資產 ID 和名稱
如果是 Cloud 專案中的資產,請使用 projects/my_cloud_project/assets/my_asset
。
對於較舊的舊版專案,資訊清單中的資產名稱必須與 Earth Engine 其他位置顯示的資產 ID 略有不同。如要上傳資產 ID 開頭為 users/some_user
或 projects/some_project
的資產,資訊清單中的資產名稱必須在 ID 前方加上字串 projects/earthengine-legacy/assets/
。舉例來說,EE 資產 ID users/username/my_table
應使用名稱 projects/earthengine-legacy/assets/users/username/my_table
上傳。
是的,這表示 projects/some_projects/some_asset
這類 ID 會轉換為名稱,其中 projects
會提及兩次:projects/earthengine-legacy/assets/projects/some_projects/some_asset
。這會造成混淆,但為了符合 Google Cloud API 標準,這項操作是必要的。
使用資訊清單
以下是可能最簡單的資訊清單。它會從名為 gs://earthengine-test
的 Google Cloud Storage 值區上傳名為 small.csv
的檔案。
{ "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
已存在且可公開讀取,可用於測試)。
上傳的是形狀檔案時,請只指定 .shp 檔案,系統會自動偵測其他檔案。
多個來源
您可以指定多個 CSV 或形狀檔案來源,每個來源一個檔案。在這種情況下,每個 CSV 檔案都必須具有相同的結構。舉例來說,我們有兩個 CSV 檔案: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" ] } ] }
開始與結束時間
所有素材資源都應指定開始和結束時間,以便提供更多資料背景資訊,尤其是如果這些素材資源已納入集合。這些欄位並非必要欄位,但我們強烈建議您盡可能使用這些欄位。
開始和結束時間通常是指觀察時間,而非產生來源檔案的時間。
為了簡化操作,系統會將結束時間視為不包含在內的邊界。舉例來說,如果素材資源的放送時間正好是一天,請將開始和結束時間設為兩個相連日子的午夜 (例如 1980-01-31T00:00:00 和 1980-02-01T00:00:00)。如果素材資源沒有持續時間,請將結束時間設為與開始時間相同。以 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" }
資訊清單結構參考資料
下列 JSON 結構包含所有可能的表格上傳資訊清單欄位。 如要查看欄位定義,請參閱下方的 資訊清單欄位定義一節。
{ "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> } }
資訊清單欄位定義
名稱
string
要建立的素材資源名稱。name
的格式為「projects/*/assets/**」(例如 projects/earthengine-legacy/assets/users/USER/ASSET
)。
來源
list
欄位清單,定義資料表檔案及其附屬檔案的屬性。詳情請參閱下列 sources
字典元素欄位。
sources[i].uris
list
要擷取的資料 URI 清單。目前僅支援 Google Cloud Storage URI。每個 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
頂點數量上限。如果不為零,幾何圖形會細分為空間上不相交的部分,每個部分都會低於此限制。
sources[i].crs
string
預設 CRS 代碼或 WKT 字串,可指定任何未指定座標參考系的幾何圖形。如果留空,預設值會是 EPSG:4326。僅適用於 CSV/TFRecord 來源。
sources[i].geodesic
boolean
在幾何圖形中解讀邊緣的預設策略,除非另有指定。如果設為 false,投影時邊緣會變直。如果為 true,邊緣會以曲線方式沿著地球表面上的最短路徑。如果留空,且 CRS 為投影座標系統,則預設為 false。僅適用於 CSV/TFRecord 來源。
sources[i].primaryGeometryColumn
string
當有多個幾何圖形欄時,用來做為資料列主要幾何圖形的幾何圖形欄。
如果留空且有多個幾何圖形資料欄,系統會使用遇到的第一個幾何圖形資料欄。僅適用於 CSV/TFRecord 來源。
sources[i].xColumn
string
用於推斷點幾何圖形的數值 X 座標資料欄名稱。如果您也指定 yColumn
,且兩個資料欄都包含數值,系統會使用 CRS 指定的座標系統中的 x、y 值建立點幾何資料欄。如果留空,且 CRS 未指定投影座標系統,預設值為「經度」。如果留空,且 CRS 確實指定了投影座標系統,則預設為空字串,且不會產生點幾何圖形。
產生的點座標資料欄會命名為 {xColumn}_{yColumn}_N
,其中 N 會加上附加條件,以便在已有名為 {xColumn}_{yColumn}
的資料欄時,讓 {xColumn}_{yColumn}_N
保持唯一性。僅適用於 CSV/TFRecord 來源。
sources[i].yColumn
string
用於推算點幾何圖形的數值 Y 座標資料欄名稱。如果您也指定 xColumn
,且兩個資料欄都包含數值,系統會使用 CRS 指定的座標系統中的 x、y 值建立點幾何資料欄。如果留空且 CRS 未指定投影座標系統,預設值為「緯度」。如果留空,且 CRS 確實指定了投影座標系統,則預設為空字串,且不會產生點幾何圖形。
產生的點座標資料欄會命名為 {xColumn}_{yColumn}_N
,其中 N 會加上附加條件,以便在已有名為 {xColumn}_{yColumn}
的資料欄時,讓 {xColumn}_{yColumn}_N
保持唯一性。僅適用於 CSV/TFRecord 來源。
sources[i].dateFormat
string
用來剖析日期編碼欄位的格式。格式模式必須符合 Joda-Time DateTimeFormat 類別說明文件的說明。如果留空,系統會將日期匯入為字串。僅適用於 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
前方加上選用前置字串。
startTime
integer
與資產相關聯的時間戳記 (如果有的話)。這通常會對應至收集資料的時間。如果素材資源對應的時間間隔為一個月或一年的平均值,這個時間戳記就會對應到該時間間隔的開始時間。以 Epoch (1970-01-01) 起算的秒數和 (選用) 奈秒數表示。假設為世界標準時間時區。
endTime
integer
如果資產對應的時間間隔為一個月或一年的平均值,則這個時間戳記會對應到該時間間隔的結束時間 (不含)。以 Epoch (1970-01-01) 起算的秒數和 (選用) 奈秒數表示。假設為世界標準時間時區。
資源
dictionary
任意鍵/值組合的平面字典。鍵必須是字串,值可以是數字或字串。系統目前不支援使用者上傳的資產的清單值。
columnDataTypeOverrides
dictionary
如果自動類型偵測功能無法正常運作,請使用這個欄位,並將欄名稱做為鍵,以及下列其中一個常數做為值:COLUMN_DATA_TYPE_STRING、COLUMN_DATA_TYPE_NUMERIC、COLUMN_DATA_TYPE_LONG。
限制
JSON 資訊清單大小
JSON 資訊清單檔案大小上限為 10 MB。如果您要上傳的檔案很多,請考慮如何減少描述資料集所需的字元數。舉例來說,您可以使用 uriPrefix
欄位,避免需要為 uris
清單中的每個 URI 提供 GCP 儲存桶路徑。如果需要進一步縮減大小,請嘗試縮短檔案名稱。