🐕

SpatioTemporal Asset Catalogとは

2021/01/07に公開

SpatioTemporal Asset Catalog (STAC)について調べたことを日本語で簡単にまとめます。

STACとは

地理空間情報を管理するためのフォーマットで、主に衛星データ(Point Clouds、Data Cubes含む)をターゲットとしている。
地理空間情報のメタデータやそのファイルの在処をJSONで表現する。

本家

https://stacspec.org/

STAC Item

STACのコアとなる要素で、GeoJSONの拡張。
衛星データを表現しやすくするために項目が追加されている。
sample

STAC Catalog

Itemのjsonへのリンクをまとめたもの。
sample

さらにCatalog間の階層構造を表現することもできる
sample1
sample2

STAC Collection

Catalogを拡張したもので、観測バンドの説明や含まれるファイルの種類、Catalogが含むItemの緯度経度範囲(bbox)などの項目が追加されている。
sample

Extensions

Item, Catalog, CollectionにはそれぞれExtensionsが定義されており、必要に応じて項目を増やすことができる。
サードパーティによるExtensionsも歓迎している。
現時点ではすべてProposalレベルである。

API

https://stacspec.org/STAC-api.html
エンドポイントの定義が公開されている。
これを実現するためのライブラリも存在する。

STAC Item について深堀り

前述の通りGeoJSONの拡張である。

{
  "stac_version": "1.0.0-beta.2",
  "stac_extensions": [
    "eo",
    "view",
    "https://example.com/stac/landsat-extension/1.0/schema.json"
  ],
  "id": "LC81530252014153LGN00",
  "type": "Feature",
  "bbox": [
    49.16354,72.27502,51.36812,75.67662
  ],
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [51.33855,72.27502],
        [51.36812,75.70821],
        [49.19092,75.67662],
        [49.16354,72.3964],
        [51.33855,72.27502]
      ]
    ]
  },
  "collection": "landsat-8-l1",
  "properties": {
    "datetime": "2014-06-02T09:22:02Z",
    "gsd": 30,
    "eo:cloud_cover": 78,
    "view:off_nadir": 0,
    "landsat:path": 107,
    "landsat:row": 18,
  },
  "links": [
    {
      "rel": "self",
      "href": "https://landsat-stac.s3.amazonaws.com/landsat-8-l1/107/018/2018-10-01/LC81530252014153LGN00.json"
    },
    {
      "rel": "collection",
      "href": "https://landsat-stac.s3.amazonaws.com/landsat-8-l1/catalog.json"
    }
  ],
  "assets": {
    "B1": {
      "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC81530252014153LGN00/LC81530252014153LGN00_B1.TIF",
      "type": "image/tiff; application=geotiff",
      "eo:bands": [
        {
          "name": "B1",
          "common_name": "coastal",
          "center_wavelength": 0.44,
          "full_width_half_max": 0.02
        }
      ],
      "title": "Band 1 (coastal)"
    },
    "MTL": {
      "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC81530252014153LGN00/LC81530252014153LGN00_MTL.txt",
      "title": "original metadata file",
      "type": "text/plain"
    },
    "thumbnail": {
      "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC81530252014153LGN00/LC81530252014153LGN00_thumb_large.jpg",
      "title": "Thumbnail image",
      "type": "image/jpeg"
    }
  }
}

landsat8-sample.jsonより一部項目を抜粋。

stac_version(必須)

stacのバージョン。執筆時点ではまだβ版。
公式github以外のstacは定義が古いものが多い(例えばawsなど)ので参考にする際は注意。

stac_extensions

利用するextensionsを記述している。
このサンプルではeoviewと独自定義のlandsat-extension(本来はschemaを用意して公開しておくのだが、ここではexample.comとなっている)を利用している。

id(必須)

データのID。大抵の衛星データの場合シーンIDとなるでしょう。
グローバルにユニークとなるようにつけることを推奨するそうです。

type(必須)

GeoJSONに必要な項目。Featureとする。

bbox(geometryがnullでない場合は必須)

Bounding Boxのこと。

重要なのはRFC 7946, section 5に従うということ。
180度線をまたぐ場合は5.2にある通り、[177.0, -20.0, -178.0, -16.0]となります。
[minlon, minlat, maxlon, maxlat]ではなく[left, bottom, right, top]
ことに注意してください[1]

geometry(必須)

GeoJSONのgeometryオブジェクト。座標は経度緯度。
衛星データの場合は四隅のPolygon。
RFC7946では、経度が180度以上、-180度以下の座標は非推奨とされているが、awsのstacを見るとけっこう180度以上の座標が存在していたりする(180度線をまたぐ撮像範囲のデータの場合、180度線で分割したMultiPolygonで表現するのがベスト)。

collection

属するSTAC CollectionのId。

properties(必須)

datetime(必須)

データの取得時刻、UTC。

stac-common-metadataやextensionsにより定義される。
start_datetime/end_datetimeも定義されている[2]

gsb

the best Ground Sample Distance (resolution)とのこと。つまり分解能。

eo:cloud_cover

被雲率。eoで定義される項目。
extensionの項目には接頭辞がつく。

view:off_nadir

オフナディア角。センサと地上の角度。viewで定義される項目。
これもextensionの項目なので接頭辞がつく。

landsat:path/landsat:row

landsatの独自項目。
このようにデータごとに独自項目を作ってもよいが、STACで定義された項目と区別ができるように独自の接頭辞をつけることが推奨されている[3]

links(必須)

関連ファイルのリンクを記述する。
親のSTAC Catalogなど。

assets(必須)

このデータ(シーン)が持つファイルの情報。
Landsat-8の場合は観測バンド毎にファイルが分かれているのでそのGeoTIFFについて(省略したがB1からB11まである)や、サムネイル画像、MLTと呼ばれる観測時の条件を記述したテキストファイルなどを持つ。

まとめ

STACはざっくりいうと地理空間情報(衛星データとか)をより管理、表現しやすくしたGeoJSONの拡張フォーマットです。
Extensionsには衛星の軌道情報を表現するためのものや、SARの偏波情報を表現するためのものもあります。

衛星だけでなくドローンのデータ用のExtensionも提案されているので、地理空間情報全般に興味がある人はspecを読み込んでみることをおすすめします。

脚注
  1. ただ、5.2は5.1の式と矛盾する気がするがどうなんだろう。5.2のほうが記述が詳細なのでこちらが勝つと信じるが果たして。 ↩︎

  2. あるシーンの観測開始時刻と終了時刻が必要になることがあったり、複数日の観測データから作られる統計データも存在するため、datetimeだけでは不十分。 ↩︎

  3. https://github.com/radiantearth/stac-spec/tree/master/extensions#prefixes ↩︎

Discussion