テーブル マニフェストのアップロード

Code Editor UIearthengine コマンドライン ツールupload コマンドよりも柔軟に Google Earth Engine(EE)にテーブルをアップロードする必要がある場合は、マニフェストと呼ばれる JSON ファイルを使用してテーブルのアップロードを記述し、コマンドライン ツールの upload table --manifest コマンドを使用します。

1 回限りの設定

  1. マニフェストのアップロードは、Google Cloud Storage にあるファイルでのみ機能します。Google Cloud Storage の使用を開始するには、Google Cloud プロジェクトを作成します(まだ作成していない場合)。設定には、お支払い用のクレジット カードの指定が必要です。EE 自体は現時点では料金を請求していませんが、EE にアップロードする前にファイルを Google Cloud Storage に転送すると、少額の費用が発生します。一般的なアップロード データサイズ(数十ギガバイトまたは数百ギガバイト)の場合、費用は非常に低くなります。
  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_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 が 2 回言及されている名前(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 ソースまたはシェープファイル ソースを指定できます。ソースごとに 1 つのファイルです。この場合、各 CSV ファイルの構造は同じである必要があります。たとえば、region1.csvregion2.csv の 2 つの 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 リストに 2 つのエントリを含むマニフェストを作成します。

{
  "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 など)を使用します。アセットに時間がない場合は、終了時刻を開始時刻と同じに設定します。 マニフェスト内の時刻は ISO 8601 文字列で表します。日付値を簡素化するために、終了時間が除外されている(たとえば、日次アセットの場合は翌日の午前 0 時)と想定することをおすすめします。

例:

{
  "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>
  }
}

マニフェストのフィールドの定義

name

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

頂点の最大数。0 でない場合、ジオメトリは空間的に分離された部分に分割され、それぞれがこの上限を下回ります。

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 になります。{xColumn}_{yColumn} という名前の列がすでに存在する場合は、{xColumn}_{yColumn}_N が一意になるように N が追加されます。CSV ソースまたは TFRecord ソースにのみ使用します。

sources[i].yColumn

string

ポイント ジオメトリを推測するための数値の Y 座標列の名前。xColumn も指定され、両方の列に数値が含まれている場合は、CRS で指定された座標系の x,y 値を使用してポイント ジオメトリ列が作成されます。空白のままにして、CRS で投影座標系が指定されていない場合、デフォルトは「緯度」になります。空白のままにして、CRS で投影座標系が指定されている場合、デフォルトは空の文字列になり、ポイント ジオメトリは生成されません。

生成されたポイント ジオメトリ列の名前は {xColumn}_{yColumn}_N になります。{xColumn}_{yColumn} という名前の列がすでに存在する場合は、{xColumn}_{yColumn}_N が一意になるように N が追加されます。CSV ソースまたは TFRecord ソースにのみ使用します。

sources[i].dateFormat

string

日付をエンコードするフィールドを解析する形式。形式のパターンは、Joda-Time DateTimeFormat クラスのドキュメントに記載されているとおりにする必要があります。空白のままにすると、日付は文字列としてインポートされます。CSV ソースまたは TFRecord ソースにのみ使用します。

sources[i].csvDelimiter

string

CSV ファイルを取り込むときに、行内の列値の区切りとして使用される 1 文字。空白のままにすると、デフォルトで ',' になります。CSV ソースのみ。

sources[i].csvQualifier

string

CSV ファイルを取り込むときに、列値を囲む文字(「引用符」)。空白のままにすると、デフォルトで " になります。CSV ソースのみ。

列値が修飾子で囲まれていない場合、先頭と末尾の空白文字は切り捨てられます。次に例を示します。

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
while:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

マニフェストで定義されているすべての uris の先頭に追加する省略可能な接頭辞。

startTime

integer

アセットに関連付けられているタイムスタンプ(存在する場合)。これは通常、データが収集された時刻に対応します。1 か月または 1 年間の平均値など、期間に対応するアセットの場合、このタイムスタンプはその期間の開始に対応します。エポック(1970-01-01)からの秒数と(省略可)ナノ秒数で指定します。UTC タイムゾーンにあると想定されます。

endTime

integer

期間に対応するアセット(1 か月または 1 年間の平均値など)の場合、このタイムスタンプはその期間の終了時刻(除く)に対応します。エポック(1970-01-01)からの秒数と(省略可)ナノ秒数で指定します。UTC タイムゾーンにあると想定されます。

プロパティ

dictionary

Key-Value ペアの任意のフラット ディクショナリ。キーは文字列にする必要があります。値は数値または文字列にできます。ユーザーがアップロードしたアセットでは、リスト値はまだサポートされていません。

columnDataTypeOverrides

dictionary

自動型検出が正しく機能しない場合は、このフィールドで列名をキーとして使用し、COLUMN_DATA_TYPE_STRING、COLUMN_DATA_TYPE_NUMERIC、COLUMN_DATA_TYPE_LONG のいずれかを値として使用します。

制限事項

JSON マニフェストのサイズ

JSON マニフェスト ファイルのサイズの上限は 10 MB です。アップロードするファイルが多い場合は、データセットの記述に必要な文字数を減らす方法を検討してください。たとえば、uriPrefix フィールドを使用すると、uris リスト内の各 URI の GCP バケットパスを指定する必要がなくなります。サイズをさらに縮小する必要がある場合は、ファイル名を短くしてみてください。