表清单上传

如果您需要比代码编辑器界面“earthengine”命令行工具upload 命令提供的更灵活的方式来将表上传到 Google Earth Engine (EE),可以使用名为“清单”的 JSON 文件描述表上传,并使用该命令行工具的 upload table --manifest 命令。

一次性设置

  1. 清单上传功能仅适用于位于 Google Cloud Storage 中的文件。 如需开始使用 Google Cloud Storage,请创建一个 Google Cloud 项目(如果您还没有的话)。请注意,设置时需要指定用于结算的信用卡。目前,EE 本身不会向任何人收费,但如果您先将文件转移到 Google Cloud Storage,然后再将其上传到 EE,则需要支付一笔小费用。对于典型的上传数据大小(几十或几百 GB),费用将非常低。
  2. 在项目中,启用 Cloud Storage API创建存储分区
  3. 安装 Earth Engine Python 客户端。其中包含 earthengine 命令行工具,我们将使用该工具上传数据。
  4. 对于自动上传,您可能需要使用与您的项目关联的 Google Cloud 服务账号。您无需服务账号即可进行测试,但请在有空时开始熟悉使用服务账号。

资产 ID 和名称

对于 Cloud 项目中的资产,请使用 projects/my_cloud_project/assets/my_asset

对于较旧的旧版项目,清单中的资源名称需要与 Earth Engine 中其他位置显示的资源 ID 略有不同。如需上传资产 ID 以 users/some_userprojects/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.csvregion2.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.csv。如需将其作为 Earth Engine 资产提取,请创建一个清单,并在 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 存储分区路径。如果需要进一步缩减大小,请尝试缩短文件名。