spatial について
DuckDB の spatial 拡張機能で空間に関する質問に答えるスキルです。ユーザー提供のファイルを分析し、ファイルがない場合は Overture Maps を使った地点検索にも対応します。
主な機能
- 01DuckDB による空間データの検索
- 02Overture Maps による地点情報の取得
- 03ユーザー提供の空間ファイルの分析
- 04距離、包含判定、H3 分析
- 05空間結果の GeoJSON エクスポート
活用シーン
- 01近くの場所、建物、道路の検索
- 02地点間の距離の計測
- 03点がポリゴン内にあるかの判定
- 04密度やホットスポットの分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ duckdb/ duckdb-skills --skill spatialインストール後、Claude Code で/spatialを入力して読み込まれたか確認します。
同梱ファイルreferences/functions.mdreferences/overture.md
詳細
DuckDB の空間拡張機能を使用して空間に関する質問に回答します。必要に応じて、無料のグローバルデータソースとして Overture Maps を使用します。
質問またはファイル:$0
追加コンテキスト:${1:-}
ステップ 1 — ユーザーが必要としている内容を把握する
質問を分類します。
| パターン | データソース | 主な関数 |
|---|---|---|
| 「Y の近くにある X を検索」(ユーザーファイルなし) | S3 上の Overture Maps | ST_Distance_Spheroid、bbox フィルタリング |
| 「A と B の距離はどれくらいか」 | ジオコードまたはユーザーデータ | ST_Distance_Spheroid |
| 「ポリゴン内にある点はどれか」 | ユーザーファイル | ST_Contains |
| 「この GeoJSON/Shapefile/GPX を分析」 | ユーザーファイル | ST_Read、計測関数 |
| 「密度/ホットスポットを表示」 | ユーザーデータまたは Overture データ | H3 六角形ビニング |
| 「GeoJSON/GeoPackage に変換」 | ユーザーファイル | COPY TO (FORMAT GDAL) |
| 「エリア内の建物/道路を数える」 | Overture Maps | bbox フィルタリング+集計 |
質問に実在する場所、POI、建物、道路、境界が関係し、ユーザーがファイルを提供していない場合は、Overture Maps を使用します。S3 パスとスキーマについては references/overture.md を参照してください。
空間関数の構文については references/functions.md を参照してください。
ステップ 2 — クエリを作成して実行する
必ず次から始めます。
LOAD spatial;
SET geometry_always_xy = true;
必要に応じて拡張機能を追加します。
- Overture/リモートデータ:
LOAD httpfs; CREATE SECRET (TYPE S3, PROVIDER config, REGION 'us-west-2'); - H3 六角形ビニング:
INSTALL h3 FROM community; LOAD h3;
主な原則
最初に bbox でフィルタリングする — Overture をクエリするときは、空間関数を使用する前に必ず bbox.xmin/xmax/ymin/ymax でフィルタリングします。これにより、Parquet の述語プッシュダウンが使用され、データセット全体のダウンロードを避けられます。
常に geometry_always_xy = true を設定する — すべての空間関数が座標を経度、緯度として解釈するようにします(Overture、GeoJSON、およびほとんどのデータソースでの標準)。設定しない場合、測地線関数は緯度を先に指定すると解釈し、誤った結果を返します。
実世界の距離には測地線関数を使用する — ST_Distance_Spheroid は WGS84 楕円体上の距離をメートルで返します。通常の ST_Distance は平面座標を使用するため、緯度/経度では意味のない結果になります。重要: 測地線関数(ST_Distance_Spheroid、ST_Area_Spheroid など)には、汎用の GEOMETRY ではなく POINT_2D 入力が必要です。Overture のジオメトリ列は GEOMETRY('OGC:CRS84') 型であり、直接キャストできません。まず座標を取り出してください。
ST_Point(ST_X(geometry), ST_Y(geometry))::POINT_2D
緯度/経度を含む CSV では変換が必要 — ST_Point(longitude, latitude)(経度が先)。これは最もよくある注意点です。
1 回の bash 呼び出しでクエリを実行します。
duckdb -c "
LOAD spatial;
<ADDITIONAL_SETUP>
<YOUR_QUERY>
"
ステップ 3 — 結果を提示する
- 表形式の結果:データをそのまま表示します
- 空間的な結果:可視化用に GeoJSON へエクスポートすることを検討します(
COPY TO 'result.geojson' WITH (FORMAT GDAL, DRIVER 'GeoJSON')) - 距離/面積の結果:人が読みやすい単位を使用します(長距離には km、短距離には m)
- 密度/ホットスポットの結果:パターンを説明し、可視化用にエクスポートすることを提案します
クエリが失敗した場合:
duckdb: command not found→/duckdb-skills:install-duckdbに委任します- 拡張機能が見つからない →
INSTALL spatial; LOAD spatial;またはINSTALL h3 FROM community; LOAD h3; - S3 アクセスが拒否された → AWS 認証情報を確認するよう提案します
- Overture で結果が得られない → bbox を広げる、カテゴリのスペルを確認する、またはより広い範囲で検索するよう案内します