mcpField
C
carto-territory-planning

carto-territory-planning

github.com/cartodb数据与数据库655 次安装1 周前更新
代码仓库

关于 carto-territory-planning

面向 CARTO Workflow 构建者的空间规划技能,用于划分需求均衡且空间连续的区域,或选择设施位置以提升覆盖率、降低距离成本。它提供从数据加载、空间索引和聚合到运行与保存结果的流程。

主要功能

  1. 01构建均衡且连续的服务区域
  2. 02按需求和相似性分配区域
  3. 03选择设施以最大化需求覆盖
  4. 04选择设施以最小化加权距离
  5. 05保存并验证规划工作流

适用场景

  1. 01按收入或工作量划分销售区域
  2. 02设计人口均衡的服务区
  3. 03规划仓库或应急响应设施位置
  4. 04结合设施选址与区域分配

MCP 相关

配合 carto-create-workflow 技能使用;连接 MCP 服务时,可通过 create_workflow、validate_workflow 和 run_workflow 工具构建、验证和运行工作流。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cartodb/agent-skills --skill carto-territory-planning

安装后在 Claude Code 中输入/carto-territory-planning确认已加载。

详细介绍

区域规划(区域均衡 + 位置分配)

构建 CARTO 工作流,以解决两个相关的空间优化问题:将区域划分为均衡的区域(例如销售区域、服务区),以及寻找可最大化覆盖范围或最小化成本的最优设施位置。

前提条件:加载 carto-create-workflow,了解开发流程、JSON 结构和验证方式。该指南涵盖两种访问路径——连接 MCP 服务时使用其工作流工具(create_workflow、validate_workflow、run_workflow),否则使用 carto workflows CLI。路由信号:carto-basics/references/access-paths.md。两个组件都要求连接上已安装 Territory Planning Extension Package。


区域均衡

将研究区域划分为在空间上连续、并按需求变量(例如工作量、人口、收入)保持均衡的区域。

流程
Source Data (points) -> Spatial Indexing -> Aggregate per Cell -> Territory Balancing -> Save
步骤 1:加载源数据

使用 native.gettablebyname。输入通常为点数据,其中包含一个或多个要用于均衡的数值指标。

成功标准:节点输出包含几何列和数值指标列的表。

步骤 2:转换为空间索引

使用 native.h3frompoint(或 native.quadbinfromgeopoint)将每个点分配到一个网格单元。

分辨率指导:分辨率越高,网格单元越小,区域划分越精细,但计算量也越大。城市级分析通常使用 H3 分辨率 8-9。

成功标准:输出包含空间索引列(例如 h3)。

步骤 3:按网格单元聚合

使用 native.groupby,按网格单元生成一行,并包含要均衡的指标:

  • 分组依据:空间索引列(h3)
  • 聚合方式:例如 geom,count,revenue,sum,population,avg

成功标准:每个网格单元对应一行,包含需求数值列,以及可选的相似性特征。

步骤 4:运行区域均衡

使用 native.territorybalancing,并设置:

输入说明示例
input_table表输入(来自上一步)
index_columnH3 或 Quadbin 列h3
demand_column要在各区域间均衡的数值列geom_count
similarity_feats用于衡量区域内部相似性的可选数值列["sentiment_avg", "popularity_avg"]
npartitions要创建的区域数量9
keep_input_columns在输出中包含所有输入列true

成功标准:输出包含所有输入行,并额外包含区域分配列。每个网格单元恰好分配到一个区域。

步骤 5:保存

使用 native.saveastable 持久化结果。空间索引列可直接在 CARTO Builder 中可视化,并按区域 ID 着色。

成功标准:经过验证的工作流可通过 create_workflow(MCP)或 carto workflows create(CLI)上传。


位置分配

寻找候选设施位置的最优子集,以最大化需求覆盖范围,或最小化总成本/距离。

流程
Demand Data (grid/points) -> Candidate Locations -> Location Allocation -> Save
步骤 1:加载需求数据

使用 native.gettablebyname 加载表示需求的网格或点数据集(例如每个 H3 网格单元的人口、客户位置)。

成功标准:表中包含空间索引列和需求数值列。

步骤 2:加载候选位置

使用第二个 native.gettablebyname 加载潜在设施位置(例如现有基础设施、候选地点)。

如果需要筛选候选项,可使用 native.wheresimplified 或 native.limit 缩小集合——候选项越少,计算速度越快。

成功标准:表中包含表示候选地点的空间索引列。

步骤 3:运行位置分配

根据目标选择相应的变体:

最大化覆盖率

使用 native.locallocallocation_maximizecoverage:

输入说明示例
demand包含需求值的表
demand_index_column需求表中的空间索引列h3
demand_column数值型需求变量population
candidates包含候选位置的表
candidates_index_column候选位置表中的空间索引列h3
nfacilities要开设的设施数量5
coverageradius最大服务距离(地理类型的单位为米)5000

成功:输出会指出要开设哪些设施,以及每个设施服务哪些需求单元,从而在半径范围内最大化总覆盖需求。

最小化总成本

使用 native.locallocallocation_minimizetotalcost。输入与最大化覆盖率相同,但不包含 coverageradius ——目标是总加权出行距离,而非半径范围内的覆盖率。

成功:输出会指出要开设哪些设施,并最小化需求与分配到的设施之间的总加权出行距离。

步骤 4:保存

使用 native.saveastable 保存结果。

成功:经过验证的工作流可通过 create_workflow(MCP)或 carto workflows create(CLI)上传。


注意事项

  • 提供商的大小写规则和 SQL 方言。 此技能使用小写列名(h3、geom_count、population、sentiment_avg 等),遵循 BigQuery / Databricks / Postgres / Redshift 的惯例。在 Snowflake 中,未加引号的标识符会显示为大写——请将其写作 H3、GEOM_COUNT、POPULATION、SENTIMENT_AVG。有关大小写规则和 SQL 方言的对应形式,请参阅 carto-create-workflow/references/providers/<provider>.md。
  • 需要扩展包:地域均衡和位置分配都要求在所用的特定连接上安装 Territory Planning Extension Package。此扩展包默认不可用,用户必须自行安装。如果缺少该扩展包,验证将失败。
  • 候选位置较多时,位置分配的计算开销较大。按地理区域、容量或其他条件预筛选候选位置,以缩小候选集。数百个候选位置可能导致运行缓慢;数千个候选位置则可能超时。
  • 覆盖半径的单位取决于空间参考系统——使用 geography 类型时,通常以米为单位。请确认单位符合预期。
  • 地域均衡会在空间连续性与均衡性之间进行权衡。无法保证完全均衡——各地域的需求变量大致相等,但不会完全相等。
  • 网格分辨率敏感性:输入网格的分辨率会显著影响结果。更精细的网格能提供更精准的边界,但会增加计算量。城市尺度分析可从 H3 分辨率 8 开始,再根据需要调整。
  • 组件名称使用 native.territorybalancing(“territory balancing”中没有点分隔符)以及 native.locallocallocation_maximizecoverage / native.locallocallocation_minimizetotalcost(注意前缀中的 “local” 重复了两次)。
  • 需求数据必须覆盖研究区域。需求网格中的空缺区域对优化器而言不可见。如需完整覆盖,请使用 polyfill + COALESCE(value, 0)。

参考模板

Academy 教程

常见变体

变体方法
销售区域平衡点 -> H3 -> 按网格聚合收入 -> 将收入作为需求进行区域平衡
服务区设计使用人口数据创建网格 -> 进行区域平衡,创建人口均等的区域
仓库/配送中心选址使用人口网格作为需求 + 现有仓库作为候选地点 -> 最小化总成本
应急响应中心选址使用人口网格作为需求 + 候选地点 -> 通过响应时间半径最大化覆盖范围
零售网络扩张使用客户密度网格作为需求 + 潜在门店位置 -> 最大化覆盖范围
区域平衡 + 位置分配组合先运行位置分配以选出中心位置,再运行区域平衡,将区域分配给各个中心

评论

支持 Markdown