如果您需要比代码编辑器界面或 “earthengine”命令行工具的 upload
命令提供的更灵活的方式来将表上传到 Google Earth Engine (EE),可以使用名为“清单”的 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/
。例如,应使用名称 projects/earthengine-legacy/assets/users/username/my_table
上传 EE 资产 ID 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
存在且可供公开读取,您可以将其用于测试。)
对于上传的 Shapefile,只需指定 .shp 文件;系统会自动检测其他文件。
多个源
您可以指定多个 CSV 或 Shapefile 来源,每个来源一个文件。在这种情况下,每个 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,边缘会弯曲以遵循地球表面上的最短路径。如果为空,则默认为 false(如果 CRS 是投影坐标系)。仅适用于 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
与资产关联的时间戳(如果有)。这通常对应于数据收集的时间。对于与时间间隔对应的素材资源(例如一个月或一年内的平均值),此时间戳对应于该时间间隔的开始时间。以秒和(可选)纳秒为单位,自公元纪年 (1970-01-01) 开始计算。假定采用世界协调时间 (UTC) 时区。
endTime
integer
对于与时间间隔对应的素材资源(例如一个月或一年内的平均值),此时间戳对应于该时间间隔的结束时间(不含该时间)。以秒和(可选)纳秒为单位,自公元纪年 (1970-01-01) 开始计算。假定采用世界协调时间 (UTC) 时区。
媒体资源
dictionary
键值对的任意扁平字典。键必须为字符串,值可以是数字或字符串。用户上传的素材资源尚不支持列表值。
columnDataTypeOverrides
dictionary
如果自动类型检测功能无法正常运行,请使用此字段,并将列名称作为键,将以下常量之一作为值:COLUMN_DATA_TYPE_STRING、COLUMN_DATA_TYPE_NUMERIC、COLUMN_DATA_TYPE_LONG。
限制
JSON 清单大小
JSON 清单文件大小上限为 10 MB。如果您要上传的文件很多,请考虑如何减少描述数据集所需的字符数。例如,使用 uriPrefix
字段可免去为 uris
列表中的每个 URI 提供 GCP 存储分区路径。如果需要进一步缩减大小,请尝试缩短文件名。