mcpField
C
carto-spatial-enrichment

carto-spatial-enrichment

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

carto-spatial-enrichment について

carto-spatial-enrichment は、CARTO Workflows で人口統計やリスクスコアなどを空間データに付加するスキルです。グリッド方式と直接方式を説明し、それぞれの選び方を示します。

主な機能

  1. 01ポイントとポリゴンを直接エンリッチ
  2. 02バッファーと等時間圏を作成
  3. 03H3 または Quadbin で領域を索引化
  4. 04空間インデックスでデータを結合
  5. 05結果を元のエンティティ単位に集計

活用シーン

  1. 01店舗位置に人口統計データを追加
  2. 02地点や領域の周辺リスクを評価
  3. 03グリッドデータからエンティティ別の合計を算出

MCP 対応

エンリッチメントは専用の MCP ツールではなく、CARTO Workflows で実行すると説明しています。MCP サーバー接続時は create_workflow、validate_workflow、run_workflow などのワークフローツールを利用します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cartodb/agent-skills --skill carto-spatial-enrichment

インストール後、Claude Code で/carto-spatial-enrichmentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

enrich_grid.json
enrich_points.json
estimate_population_around_retail_stores.json

詳細

CARTO ワークフローにおける空間エンリッチメント

前提条件:開発プロセスについては carto-create-workflow を読み込んでください。これは、両方のアクセス方法(接続時に使用する MCP サーバーのワークフローツール(create_workflow、validate_workflow、run_workflow など)、それ以外の場合に使用する carto workflows CLI、および carto-basics/references/access-paths.md に記載されたルーティングシグナル)を説明しています。エンリッチメント用の直接的な MCP ツールはありません。エンリッチメントは常にワークフローとして実行されるため、これらのワークフローツールを経由してください。

このスキルでは、デモグラフィックデータ、リスクスコア、または空間フィーチャーデータセットの任意の変数を使って空間データをエンリッチするための汎用パターンを説明します。


手順

5 ステップの汎用エンリッチメントパターンに従ってください。各ステップは 1 つ以上のワークフローコンポーネントに対応しています。

Step 1: ソースデータを読み込む

エンリッチメントが必要な事業体(店舗、ポイント、ポリゴン)を読み込みます。

  • テーブルからポイントまたはポリゴンを読み込む場合:ReadTable ソースノードを使用します
  • カスタムジオメトリの場合:native.tablefromgeojson を使用して GeoJSON ポリゴンをインラインで指定します
Step 2: 対象エリアを定義する

ユースケースに基づいて、次のいずれかの方法を選択します。

方法コンポーネント使用する状況
バッファーnative.buffer距離に基づくエリア(例:各店舗の周囲 1km)
等時間圏native.isolines車または徒歩での所要時間に基づくエリア
直接ポリゴン(不要)ソースデータがすでにポリゴンの場合
直接ポイント(不要)Step 4 の native.enrichpoints までスキップします
Step 3: 空間インデックス作成(ポリフィル)

エリアをエンリッチメント用のグリッドに変換します。グリッドベースのエンリッチメント(native.h3enrich)または手動 JOIN を使用する場合、このステップは必須です。

  • H3 グリッド(最も一般的):native.h3polyfill — resolution をエンリッチメントデータセットに合わせて設定します
  • Quadbin グリッド:native.quadbinpolyfill — resolution をエンリッチメントデータセットに合わせて設定します

重要な判断 — インデックスタイプ:エンリッチメントデータがネイティブに Quadbin 形式でない限り、H3 を使用します。

Step 4: エンリッチする

出力列の命名方法が異なる 2 つのアプローチがあります。

A) CARTO ENRICH プロシージャ(Data Observatory または空間フィーチャーデータの場合に推奨):

  • native.h3enrich — H3 グリッドをエンリッチします
  • native.enrichpoints — ポイントを直接エンリッチします(Step 3 をスキップ)
  • native.enrichpolygons — ポリゴンを直接エンリッチします(Step 3 をスキップ)
  • 出力列は {variable}_{aggregation} という名前になります(例:population_sum、air_quality_avg)

native.enrichpolygons と native.spatialjoin + native.groupby の比較 — どちらもグリッドのステップ(Step 3)を省略し、ソースデータセットを対象ポリゴンに直接集約します。次のトレードオフを考慮して選択してください。

アプローチメリットデメリット
native.enrichpolygonsノードが 1 つ;Workflows に専用 UI がある;意味が最も明確Analytics Toolbox に依存;結合後の中間行を確認できない;集約方法が SelectColumnAggregation リストに制限される
native.spatialjoin + native.groupbyAT に依存しない;結合後の中間テーブルを Workflows で確認できる;結合述語(intersects / covers / touches)、結合タイプ、列のエイリアスを完全に制御できるノードが 2 つ;冗長;スキーマを簡潔に保つには、空間結合で maintablecolumns / secondarytablecolumns を設定する必要がある

ソース 1 つのデータを対象ポリゴンに単純に合計または平均する場合は、既定で native.enrichpolygons を使用してください。既定以外の述語、同じ列に対する複数の集約、または中間結合の確認が必要な場合は、native.spatialjoin + native.groupby に切り替えてください。ポイントを対象とする場合の native.enrichpoints と、それに相当する spatialjoin + groupby のチェーンにも同じトレードオフが当てはまります。

B) 空間インデックス列を使った手動 JOIN:

  • H3/Quadbin 列を結合キーとして、native.join を使用します
  • セカンダリテーブルの出力列には _joined サフィックスが付きます
  • 既定値は INNER JOIN です(一致しないセルは通知なしに除外されます)

集約方法の指針:

  • SUM — 人口数、合計値
  • MAX / MIN — リスクスコア、しきい値
  • AVG — 品質指標、インデックス
ステップ 5:結果を保存する

native.saveastable を使用して、エンリッチメントした出力を保存します。

店舗ごとの人口など、エンティティ単位のエンリッチメントが目的の場合は、2つ目の JOIN + GROUP BY を追加して、グリッドレベルの結果を元のエンティティレベルに集約し直します。

成功条件:ソースデータを読み込み、エリアを定義し、正しい集約方法でエンリッチメントして保存する、検証済みのワークフローが完成していること。後続のカラム参照が、使用したエンリッチメント方法と一致している必要があります。create_workflow(MCP)または carto workflows create(CLI)を使用してアップロードします。


注意点

  • プロバイダーの大文字・小文字と SQL 方言。 このスキルでは出力カラム名を小文字(population_sum、air_quality_avg、<column>_joined など)で記載しています。これは BigQuery/Databricks/Postgres/Redshift の慣例です。Snowflake では、引用符で囲まれていない識別子は大文字で表示されるため、POPULATION_SUM、AIR_QUALITY_AVG、<COLUMN>_JOINED として参照してください。大文字・小文字の規則と SQL 方言の対応については、carto-create-workflow/references/providers/<provider>.md を参照してください。
  • 解像度の一致が重要です。 ポリフィルの解像度は、エンリッチメント対象データセットのネイティブ解像度と必ず一致させてください(例:解像度 8 の空間フィーチャーには H3 解像度 8)。一致しない場合、エラーが発生せずに JOIN の一致件数がゼロになります。
  • 手動 JOIN では一致しないセルが除外されます。 native.join はデフォルトで INNER JOIN を使用し、エンリッチメントデータのないセルを暗黙的に除外します。網羅性が重要な場合は LEFT JOIN を使用してください。
  • ポリフィルの後に重複を除去します。 SELECT DISTINCT またはインデックスカラムでの GROUP BY を使用して、重複セルを除去します。どの店舗から各セルが生成されたかなど、ソースの識別情報を保持する必要がある場合は、ポリフィルノードで includecols: true を設定してください。
  • カラム名は方法によって異なります(ステップ 4 を参照)。ENRICH プロシージャでは {variable}_{aggregation}、手動 JOIN では {column}_joined が生成されます。
  • バッファー距離の単位はメートルです。 等時線の範囲の単位はタイプによって異なり、時間ベースでは秒、距離ベースではメートルです。
  • エンティティレベルの結果には再集約が必要です。 グリッドエンリッチメントのデータはセルレベルのままです。店舗ごと/場所ごとの合計に集約し直すには、2つ目の JOIN + GROUP BY を追加してください(ステップ 5 を参照)。

参照テンプレート

このスキルフォルダーには、CARTO Workflows のテンプレートリポジトリから取得したテンプレートが含まれています。

ファイルパターン説明
enrich_grid.jsonGeoJSON ポリゴン -> H3 ポリフィル -> ENRICH_GRIDカスタムエリアを社会人口統計 H3 データでエンリッチメントします
enrich_points.jsonポイントをフィルター -> ENRICH_POINTSポイントの位置をポリゴンベースのリスクデータでエンリッチメントします
estimate_population_around_retail_stores.jsonポイント -> バッファー -> H3 ポリフィル -> JOIN -> GROUP BY再集約を含む、完全なエンティティレベルのエンリッチメントです

よくあるバリエーション

バリエーション使用するステップ主な違い
ポイントを直接エンリッチメントする1 -> 4 -> 5グリッドを省略し、native.enrichpoints を使用します
ポリゴンを直接エンリッチメントする1 -> 4 -> 5グリッドを省略し、native.enrichpolygons を使用します
バッファー + グリッドエンリッチメント1 -> 2 -> 3 -> 4 -> 5native.buffer の後にポリフィルを行い、エンリッチメントします
等時線 + グリッドエンリッチメント1 -> 2 -> 3 -> 4 -> 5native.isolines の後にポリフィルを行い、エンリッチメントします
ソースエンティティに再集約する1 -> 2 -> 3 -> 4 -> JOIN + GROUP BY -> 52つ目の JOIN を追加して、セルをソースエンティティに対応付けます

コメント