mcpField
C
carto-site-selection

carto-site-selection

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

关于 carto-site-selection

carto-site-selection 指导构建 CARTO Workflows,用空间数据评估新设施选址、现有地点间的客流蚕食风险,以及与高绩效地点相似的区域。适用于零售、交通等地点规划分析。

主要功能

  1. 01按需求信号为候选地点评分排序
  2. 02分析新旧地点服务区重叠
  3. 03发现与高绩效地点相似的区域
  4. 04使用 H3 或 Quadbin 网格分析
  5. 05结合人口、收入和兴趣点数据

适用场景

  1. 01筛选新门店候选位置
  2. 02估算新店对现有门店的影响
  3. 03寻找类似优秀门店的扩张区域

MCP 相关

指导通过 CARTO MCP 服务的工作流工具创建、验证和运行 Workflow;未连接时可改用 CARTO CLI。

安装

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

$npx skills add https://github.com/cartodb/agent-skills --skill carto-site-selection

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

详细介绍

选址与蚕食分析

构建 CARTO 工作流,通过组合空间条件,识别新设施(商店、车站、办公室)的最佳位置,并量化重叠商圈带来的蚕食风险。还涵盖双生区域和相似位置发现。

前提条件:加载 carto-create-workflow,了解开发流程、JSON 结构和验证方式。该指南涵盖两种访问路径:连接 MCP 服务时,使用 MCP 服务的工作流工具(create_workflow、validate_workflow、run_workflow);否则使用 carto workflows CLI。路由提示:carto-basics/references/access-paths.md。如果工作流涉及等时圈、缓冲区或商圈丰富化,请加载 carto-trade-area-analysis,其中详细介绍了商圈处理流程。


决策树

用户意图模式
“我应该在哪里开一家新店?”选址(评分 + 排名)
“开一家新店会影响现有门店吗?”蚕食分析
“找到与表现最佳门店相似的位置”双生区域 / 相似位置

说明

模式 A:选址(评分 + 排名)
Existing locations + Target area -> Spatial indexing -> Enrich with demographics/POIs -> Score/Rank -> Filter top candidates -> Save
步骤 1:加载数据

使用 native.gettablebyname 加载两个数据集:

  • 现有位置(当前门店 / 设施)
  • 目标区域(例如城市边界、区级多边形,或覆盖研究区域的网格)

当候选位置和现有网络位于同一张表时进行拆分。 如果用户的数据源是单张表,且通过数值阈值定义“候选位置”(例如 revenue ≥ X、size ≥ Y),则使用一个 native.where 应用该条件,并将其 match 输出连接到候选位置处理流程,将 unmatch 输出连接到现有网络处理流程。从一个节点分出两条数据流——这比 orderby + limit + customsql NOT IN 简洁得多,而且完全不需要 customsql。该阈值近似于“前 N 个”;如果用户明确要求“恰好排名前 25”,仍应使用 orderby + limit,但要清楚这会增加节点数。

成功标准:两张表均已加载,包含几何列和唯一标识符。

步骤 2:构建候选网格

使用 native.h3polyfill 或 native.quadbinpolyfill 将目标区域填充为 H3 或 Quadbin 单元格。每个单元格都是一个候选微观位置。

成功标准:生成覆盖研究区域的连续单元格网格。

步骤 3:丰富候选位置

使用 native.h3enrich、native.joinv2 或 Data Observatory,为每个单元格添加需求信号,例如人口、收入、人流量和 POI 密度。

如果候选区域是连续多边形(商圈 / 区域)而非网格,那么选择 native.enrichpolygons 还是 native.spatialjoin + native.groupby 会很重要——有关取舍(AT 依赖、节点数、谓词 / 连接控制),请参阅 carto-spatial-enrichment 的步骤 4。

成功标准:每个网格单元格都包含表示需求 / 适宜性因素的数值列。

第 4 步:按与现有位置的距离筛选

使用 native.h3distance 计算每个候选网格单元到最近现有位置的跳数距离。筛除距离过近(存在蚕食风险)或过远(物流成本过高)的网格单元。输出的是跳数,而非度量距离——请根据分辨率的边长换算(参见注意事项)。

距离语义——应根据服务范围多边形,而非候选点来衡量蚕食。 当候选位置是带有生成的服务区域(等值线/缓冲区——参见 carto-trade-area-analysis)的点时,应计算候选位置的服务范围多边形到现有竞争对手点的 native.distance,而不是从候选点本身计算。原因:只要竞争对手位于服务区域内,ST_DISTANCE(polygon, point) = 0——这正是你需要的蚕食信号。点到点距离只会显示“最近的竞争对手有多远”,却掩盖了重叠情况。选择与服务区域大小相符的 radius(例如,10 分钟步行服务范围可设为约 5 公里);半径过大会稀释信号。这种多边形到点的模式介于模式 A 的 H3 跳数筛选和模式 B 的完整网格重叠分析之间——只要候选位置已有连续的服务区域几何形状,就应使用它。

成功标准:候选网格单元与现有位置的距离处于合理范围内;若存在服务范围多边形,则从该多边形衡量蚕食信号。

第 5 步:评分与排序

使用 trade-area-analysis 中的评分模式:

  1. 使用 native.normalize 将每个变量归一化至 [0,1]
  2. 使用 native.selectexpression 和用户定义的权重计算综合得分
  3. 使用 native.orderby(降序)和 native.limit(前 N 个)进行排序

成功标准:得到按综合得分和贡献变量排序的候选网格单元清单。

第 6 步:保存

使用 native.saveastable。H3/Quadbin 列可直接在 CARTO Builder 中可视化。

成功标准:已验证且可上传的工作流。


模式 B:蚕食分析
Existing + Proposed locations -> Trade areas (isoline/buffer) -> Polyfill to grid -> Intersect/Join -> Measure overlap -> Save
第 1 步:加载数据

加载现有位置和拟议位置(或加载带有标志列、用于区分两者的单个表)。如果两组数据位于同一个表中,且通过数值阈值(例如 revenue ≥ X)定义划分方式,请参见模式 A 第 1 步中的 native.where 匹配/不匹配划分——它可以从一个节点生成两条数据流,避免使用 customsql。

成功标准:两组数据均已加载,并包含几何信息和唯一标识符。

第 2 步:生成服务区域

使用 native.isolines(真实路网)或 native.buffer(简单缓冲区),为现有位置和拟议位置生成服务区域。两组位置使用相同参数,以确保结果可比。

成功标准:每个位置都有一个参数一致的服务范围多边形。

第 3 步:填充空间索引

使用 native.h3polyfill 将所有服务范围多边形转换为 H3 或 Quadbin 网格单元。保留位置标识符和 is_proposed 标志。

成功标准:每个位置的每个网格单元各占一行,并包含位置 ID 和类型标志。

第 4 步:查找重叠

在现有位置网格单元和拟议位置网格单元之间,使用 native.joinv2 基于空间索引列执行内连接。结果包含至少同时属于一个现有位置和一个拟议位置的网格单元。

成功标准:输出仅包含同时落入现有位置和拟议位置服务范围内的网格单元。

第 5 步:衡量影响

使用 native.groupby 汇总重叠情况:

  • 按现有位置统计:重叠网格单元数量/该位置服务范围内的网格单元总数 = 重叠百分比
  • 为重叠网格单元添加数据:关联人口或收入数据,以量化共享需求

使用 native.selectexpression 计算重叠率。

成功标准:每个现有位置都有一个重叠指标,显示其服务范围中与拟议位置共享的比例。

第 6 步:保存

使用 native.saveastable。

成功标准:已验证的工作流,并包含各位置的蚕食指标。


模式 C:孪生区域/相似位置
Top-performing locations -> Trade areas -> Enrich -> Build similarity model -> Score all candidate areas -> Rank -> Save
步骤 1:确定参考位置

加载完整的位置数据集。使用 native.wheresimplified 或 native.orderby + native.limit,筛选表现最佳的位置(例如,按收入排名位于前四分位数的位置)。

成功标准:筛选出一组表现出色的位置,作为参考集。

步骤 2:生成并丰富商圈

在参考位置周围创建等时圈或缓冲区商圈。填充到 H3/Quadbin。使用人口统计数据、POI 和任何相关变量进行丰富。

成功标准:每个参考位置都有丰富的人口统计资料。

步骤 3:构建孪生区域模型

使用 native.buildtwinareasmodel(BUILD_TWIN_AREAS_MODEL),根据经过丰富的参考位置创建基于 PCA 的相似度模型。

  • 输入:带有数值特征列的经过丰富的参考位置
  • 模型捕捉表现出色位置的多变量“特征”

成功标准:生成一个编码了表现出色位置人口统计特征的模型产物。

步骤 4:查找相似位置

使用 native.findsimilarlocations(FIND_SIMILAR_LOCATIONS),根据孪生区域模型为所有候选区域评分。

  • 输入:使用与构建模型时相同变量进行丰富的候选区域
  • 输出:每个候选区域的相似度分数

成功标准:每个候选区域都有相对于参考集的相似度分数。

步骤 5:排序并保存

按相似度分数降序排序。保存排名靠前的候选区域。

成功标准:生成一份排名列表,其中包含与表现出色位置最相似的区域。


商业热点变体

对于由需求驱动的选址(例如“未满足需求最高的地方在哪里?”),请使用 native.commercialhotspots:

  1. 在研究区域上构建 H3 网格
  2. 使用目标需求变量丰富网格(例如 15-34 岁人口)
  3. 使用 variablecolumns 和 weights 运行 native.commercialhotspots
  4. 按显著性筛选结果(p_value < 0.05)
  5. 可选择使用 native.h3distance 筛选与现有位置的距离,聚焦服务不足的区域

注意:variablecolumns 使用 Python 风格的列表语法(['col1', 'col2']),而 weights 使用逗号分隔;详情请参阅 trade-area-analysis 中的注意事项。


注意事项

  • 提供商的大小写规则和 SQL 方言。 此技能使用小写列名(h3、is_proposed、population 等),符合 BigQuery / Databricks / Postgres / Redshift 的惯例。在 Snowflake 上,未加引号的标识符会显示为大写;请使用 H3、IS_PROPOSED、POPULATION 引用。有关大小写规则和 SQL 方言等效项,请参阅 carto-create-workflow/references/providers/<provider>.md。
  • native.commercialhotspots 需要 Analytics Toolbox 的 Retail 模块。使用 --connection 验证是否可用。
  • 孪生区域和相似位置在内部使用 PCA;结果对变量选择和缩放方式很敏感。仅包含相关且不冗余的变量。如果输入的尺度差异很大,请先进行归一化。
  • 侵蚀重叠高度依赖于商圈定义(缓冲半径、等时线时间)。参数的微小变化就可能导致结果反转。请记录所选参数及其理由。
  • native.h3distance 返回的是跳数,而不是物理距离。将跳数乘以对应分辨率下的近似网格边长,可得粗略的公制距离(例如,分辨率 8 时每跳约为 460m,分辨率 9 时每跳约为 174m)。
  • 比较不同规模的区域时,请将人口统计数据归一化为人均值或单位面积值,以避免规模偏差(例如,使用人口密度而非总人口)。
  • “最佳”位置完全取决于所选的标准和权重;不存在客观正确的答案。请务必记录假设,并允许用户调整权重。
  • 对于孪生区域模型,参考位置和候选位置必须使用相同的一组丰富变量。变量不匹配会导致模型失败或生成毫无意义的分数。

参考模板

Academy 教程
教程提供方URL
夏威夷檀香山 Pizza Hut — 使用商业热点进行选址BigQuery链接
夏威夷檀香山 Pizza Hut — 使用商业热点进行选址Snowflake链接
门店蚕食 — 量化新门店的影响BigQuery链接
Starbucks 蚕食 — H3 网格重叠分析BigQuery链接
门店蚕食 — Quadkey 网格重叠Snowflake链接
查找业绩最佳门店的孪生区域BigQuery链接
根据商圈查找相似地点BigQuery链接
电动汽车充电站选址Workflows链接

常见变体

变体方法
零售扩张等时圈 -> 使用人口统计数据和竞争对手密度进行丰富 -> 综合评分 -> 选取前 N 个
特许经营区域规划采用蚕食模式,在授予经营区域前确保服务范围互不重叠
电动汽车充电/公共服务基于网格的需求(人口、交通)+ 筛除距现有设施过近的区域 -> 对服务不足的网格单元排序
广告牌/户外广告投放缓冲区 -> 受众数据丰富 -> 归一化并加权 -> 选取前 N 个(参见 trade-area-analysis)
银行网点优化根据业绩最佳网点查找孪生区域 -> 查找相似的服务不足区域 -> 提议新网点
竞争对手邻近度分析计算与竞争对手位置的 H3 距离 -> 筛选出远离竞争对手但靠近需求区域的网格单元

评论

支持 Markdown