0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

衛星データをAPIで扱いたい。FastAPIで地理空間データ配信の第一歩(環境構築編)

0
Posted at

はじめに

これまで私は、気象データやnetCDFデータを使った解析やGIS処理を中心に業務をしてきました。
ただ、解析した結果を「他の人が使える形で提供する」という経験がほとんどありませんでした。

そこで今回、
netCDFデータから特定の地点・日時・成分を取得できるAPIを作ることにしました。

あわせて、

  • FastAPIによるAPI開発
  • Git/GitHubによるコード管理

も実践的に身につけることを目的としています。


作るもの(全体像)

今回作るAPIのイメージです。

クライアント(ブラウザ / アプリ)
        ↓
FastAPI(Python)
        ↓
netCDFデータ
        ↓
GeoJSON形式で返す
  • 指定された地点(緯度・経度)
  • 指定された日時(または期間)
  • 指定された気象・大気成分

を元にデータを取り出し、GeoJSON形式で返すAPIを目指します。

GeoJSONを採用する理由

GISツール(QGISなど)やWeb地図との相性が良いためです。
また、RFC 7946に準拠した形式として扱えるようにします。

※ 座標は [lon, lat] の順です


技術選定

FastAPIを選んだ理由

  • Pythonで扱いやすい
  • 型ヒント+Pydanticによるバリデーション
  • Swagger UIが自動生成される

Flaskも少し考えましたが、
今回は「まず動かす」ことを優先してFastAPIにしています。


環境構築

前提

  • Python 3.11以上(3.12推奨)

ディレクトリ構成(先に全体像)

satellite-nc-api/
├── app/
│   └── main.py
├── docs/
├── requirements.txt
└── README.md

役割

  • app/:API本体
  • docs/:作業メモ・設計
  • requirements.txt:ライブラリ一覧
  • README.md:概要

プロジェクト作成

mkdir satellite-nc-api
cd satellite-nc-api

仮想環境の作成

python -m venv .venv

仮想環境の有効化

# Mac / Linux
source .venv/bin/activate

# Windows(PowerShell)
.venv\Scripts\Activate.ps1

# Windows(cmd)
.venv\Scripts\activate.bat

最初は「毎回有効化するの面倒だな」と思っていたのですが、
環境の違いでハマるよりは圧倒的に楽でした。


ライブラリのインストール

pip install fastapi uvicorn[standard]

requirements.txt作成

pip freeze > requirements.txt

requirements.txtは、このプロジェクトで使っているライブラリの一覧を記録するためのファイルです。
venv環境でインストールしたものをまとめておくことで、後から同じ環境を再現できるようにしています。

最初はこのファイルの意味がよく分からなかったのですが、
「環境のスナップショット」と考えると理解しやすかったです。


FastAPIで最初のAPIを作る

app/main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def root():
    return {"message": "Hello World"}

サーバ起動

uvicorn app.main:app --reload

satellite-nc-api ディレクトリで実行します


動作確認

ブラウザで以下にアクセス

http://127.0.0.1:8000/

{"message": "Hello World"}

Swagger(自動ドキュメント)

http://127.0.0.1:8000/docs

にアクセスすると、APIの一覧が表示されます。

「Try it out」からブラウザ上でAPIを実行できます。

ブラウザから直接叩けるので、
curlを書かなくていいのはかなり楽でした。


今後やること

  • netCDFの読み込み(xarray)
  • 地点・日時・成分指定
  • GeoJSONレスポンス
  • Pydanticによるバリデーション
  • ルーター分割(APIRouter)
  • DB連携(PostgreSQL / PostGIS)

まとめ

  • FastAPIでAPIの雛形を作成
  • 仮想環境+requirements.txtで環境を管理
  • Swaggerで動作確認

ここからようやく「データを扱うAPI」に入っていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?