mcpField
S
spatial

spatial

github.com/duckdbデータ・データベース613734 回インストール28 週間前に更新
リポジトリ

spatial について

DuckDB の spatial 拡張機能で空間に関する質問に答えるスキルです。ユーザー提供のファイルを分析し、ファイルがない場合は Overture Maps を使った地点検索にも対応します。

主な機能

  1. 01DuckDB による空間データの検索
  2. 02Overture Maps による地点情報の取得
  3. 03ユーザー提供の空間ファイルの分析
  4. 04距離、包含判定、H3 分析
  5. 05空間結果の GeoJSON エクスポート

活用シーン

  1. 01近くの場所、建物、道路の検索
  2. 02地点間の距離の計測
  3. 03点がポリゴン内にあるかの判定
  4. 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 MapsST_Distance_Spheroid、bbox フィルタリング
「A と B の距離はどれくらいか」ジオコードまたはユーザーデータST_Distance_Spheroid
「ポリゴン内にある点はどれか」ユーザーファイルST_Contains
「この GeoJSON/Shapefile/GPX を分析」ユーザーファイルST_Read、計測関数
「密度/ホットスポットを表示」ユーザーデータまたは Overture データH3 六角形ビニング
「GeoJSON/GeoPackage に変換」ユーザーファイルCOPY TO (FORMAT GDAL)
「エリア内の建物/道路を数える」Overture Mapsbbox フィルタリング+集計

質問に実在する場所、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 を広げる、カテゴリのスペルを確認する、またはより広い範囲で検索するよう案内します

コメント