てゆーか、STAC APIって何？

STACについて知っている方が多いかと思いますが、今回はSTAC APIについて解説したいと思います。

STACは衛星画像の管理に広く使われている規格であり、STAC Catalog、STAC CollectionとSTAC Itemによって様々な時間や場所で撮影された衛星写真を管理する規格です。

https://stacspec.org/en

この記事を書いている人はアイドルのライブで写真を撮ることが趣味ですが、ライブで撮影された写真に例えると、STAC企画に沿って写真を管理する大体このような感じで衛星写真を管理する感じになります。

以下それぞれが一つのJSONファイルになっていて、データを取得する際にはCatalogやCollectionの`links`部分から一つ一つの画像ファイルをまとめたアイテムを探します。

ポイントになるのは、STAC規格に沿ってJSONファイルを整備しただけでも検索機能がなくて、原則としては`links`部分で手動で一つ一つのJSONファイルのURLや中身を確認してデータを探す必要があることです。

Catalog

```jsx
{
    "stac_version": "1.0.0",
    "type": "Catalog",
    "id": "2025_tour_yokohama",
    "description": "2025年ツアー横浜公演",
    "links": [
      {
          "rel": "child",
          "href": "2025_tour_yokohama/2025_tour_yokohama_photo_1.json"
      }
    ]
}
```

Collection

```jsx
{
    "stac_version": "1.0.0",
    "type": "Collection",
    "group": "＝JOY",
    "id": "2025_tour_yokohama",
    "description": "2025年ツアー横浜公演",
    "links": [
	    {
          "rel": "child",
          "href": "2025_tour_yokohama/2025_tour_yokohama_photo_1.json"
      }
    ],
    "extent": {},
    "summaries": {}
}
```

STAC Item
```jsx
{
    "stac_version": "1.0.0",
    "type": "Feature",
    "id": "2025_tour_yokohama_photo_1",
    "bbox": [],
    "geometry": {},
    "properties": {
	    "member": "山田衣織",
		  "group":"＝JOY"
	   },
    "collection": "2025_tour_yokohama",
    "links": [],
    "assets": {
	    "thumbnail":{
		    "url":"dsc_1000.jpg"
	    },
	    "raw": {
		    "url": "dsc_1000.arw"
	    }
    }
}
```

### STAC APIについて

データが少ない場合は簡単に管理ができますが、100万件を超えるデータがある場合、検索機能がなくては利用することが難しいということで整備されたのがSTAC APIという規格です。

[GitHub - radiantearth/stac-api-spec: SpatioTemporal Asset Catalog API specification - an API to make geospatial assets openly searchable and crawlable](https://github.com/radiantearth/stac-api-spec)

STAC APIはREST APIを使って衛星データを管理や検索するためのオープンソースの規格であり、静的ファイルを使って衛星データを管理するSTAC規格と違って、データベース（Opensearch、PostGIS）を元にデータを検索するための規格を提供しています。

STAC APIを使うメリットとしては、STAC APIはオープンソースの規格であるため、このAPIに沿ったエンドポイントを利用することでブラウザ上でGUIを使って衛星データを検索するためのSTAC BrowserやPythonで衛星データを取り扱う際に便利にデータを検索できるpystacなどのツールが利用できるようになります。

また、STAC APIを構築するためのツールとして、複数のインフラテンプレートが用意されていて、データベースの設計を行う必要がないことがSTAC APIを使う一つ大きなメリットです。

STAC APiを採用する場合、最低限として用意する必要があるのがCoreエンドポイントですが、Coreに定められている部分以外にもExtensionsを利用することで、簡単にニーズに合わせることができます。

規格に合わせてSTAC Browserなどのリソースを使って衛星データを管理するためにはCoreエンドポイント部分で定められているエンドポイントの整備が必須です。

Coreエンドポイント

[stac-api-spec/core at release/v1.0.0 · radiantearth/stac-api-spec](https://github.com/radiantearth/stac-api-spec/tree/release/v1.0.0/core)

Core部分では以下のエンドポイントが含まれています。（以下転記）

| rel | href | 形式 | 説明 |
| --- | --- | --- | --- |
| `root` | `/` | application/json | ルートとしてんURI（必須） |
| `self` | `/` | application/json | セルフレファレンス、ルートURIと同様（必須） |
| `service-desc` | `/api` | 複数 | 機械が読み込める形でのサービスの説明（必須） |
| `service-docs` | `/api.html` | html | APIのドキュメント |
| `child` | 複数 | application/json | データベース内に含まれているコレクション、またはカタログ |
| `item` | 複数 | application/json | データベース内に含まれているアイテム |

その他Extensions部分で定められているものは、任意に含めることができます。

[stac-api-spec/extensions.md at release/v1.0.0 · radiantearth/stac-api-spec](https://github.com/radiantearth/stac-api-spec/blob/release/v1.0.0/extensions.md)

STAC規格は便利ですが、大量のSTACデータを管理する際にはAPIが整備されているほうが利用者も整備する側も楽なので、ぜひ使ってみてください。