Claude Code 怎么查地理空间数据:GeoSQL Skill 实操

用 GeoSQL Skill 让 Claude Code / Codex 写 PostGIS、BigQuery 空间 SQL,带地图反馈环。含安装步骤、任务决策表与 CRS/成本常见坑。

Claude Code 怎么查地理空间数据:GeoSQL Skill 实操

你在 Claude Code 或 Codex 里问「算一下这条路上的充电桩密度」,模型往往会凭空写一段 ST_Distance,坐标系对不上、分区没剪、BigQuery 扫了几十 GB 账单才爆。GeoSQL 是 dekart-xyz/geosql 仓库提供的地理空间 Skill:先探仓库元数据再写引擎专用空间 SQL,可选 Dekart 把结果渲染成地图让 Agent 自己纠错。下面按「claude code 怎么查地理空间数据」这条线,从安装到选型一次讲清。

GeoSQL 和普通「让模型写 SQL」差在哪

普通对话里,模型看不到你的表结构,只能猜列名;PostGIS 的 geometry 与 BigQuery 的 GEOGRAPHY 函数集不同,混用就报错;更麻烦的是几何类错误(邻区 polygon 被当成都市圈、CRS 不一致导致 join 错位)纯文本校验很难发现。

GeoSQL 走固定五步环:Discovery 读元数据 → 按引擎写空间 SQL(ST_INTERSECTSST_DISTANCE、H3、bbox 分区裁剪等)→ BigQuery 先 dry-run 估字节(默认 10 GiB 上限,超限会改写更省钱的查询)→ 面积/长度 sanity check → 可选 Dekart 出图,Agent 看图修正。官方 eval 套件 8 条断言全过;同一任务集加地图反馈环后,几何类错误检出率大约提升到原来的 4 倍(见仓库 benchmark 图)。凭证走本机 CLI(bqsnowdekart),不进 Agent 上下文。

安装与在 Claude Code / Codex 里启用

GeoSQL 通过 Python 包安装,会自动检测本机 Agent 并写入 Skill 文件;可选 Dekart CLI 做地图与数据库连接。

pip install geosql && geosql

交互安装时会问是否装 Dekart;选「推荐」会执行 pip install dekartdekart init。暂时跳过也行,之后手动:

python -m pip install dekart
dekart init

dekart init 可连 Dekart Cloud,也可指向本地或自托管实例。装完后在 Agent 里用斜杠命令触发,例如:

/geosql Show EV charger density along major roads and render a map

Codex 侧同样走 Skill 机制,安装路径以 geosql 向导检测到的客户端为准。Skill 描述别写太长,否则和 Claude Code Skills 描述被截断 里说的 1536 字符上限冲突,触发词会失效。多 Skill 并存时的选型思路可参考 Codex CLI 批量重构方法 里「先定任务边界再开工具」的做法。

适用场景:地图分析、GIS 查询、空间 Join

地图分析与选址:POI 共现、竞品距离、道路缓冲区统计。示例 prompt:「Find top 10 locations for Sporting Goods Store in Seattle based on POI co-location… Create a map.」

GIS 查询与指标:行政区面积、边界重叠、H3 聚合。支持 Overture Maps 公共数据集(BigQuery / Snowflake share)以及私有 PostGIS、BigQuery、Snowflake、Whorobots 表。

空间 Join:点落区、线穿面、多边形相交计数。Skill 会按引擎选 ST_INTERSECTS / bbox overlap 做分区裁剪,而不是无脑 cross join。

不适用的:纯属性统计无坐标列、实时亚秒级轨迹流、没有仓库只想要静态底图——这些用常规 SQL 或 GIS 桌面软件更合适,硬上 GeoSQL 只会多一层 Skill 调度开销。

任务类型决策表:什么时候该用 GeoSQL

任务类型 典型例子 是否用 GeoSQL 理由
带坐标的聚合/筛选 某城市 POI 密度、道路 5km 内充电桩数 ✅ 优先 需要引擎专用空间函数 + 成本守卫
空间 Join 订单点落入配送区、门店与竞品距离 ✅ 优先 CRS 与 join key 易错,地图环能验几何
出图验收 选址结果、边界是否画对 ✅ 配 Dekart 文本 loop 漏检的几何错误靠看图补
纯文本地理知识 「EPSG:4326 是什么」 ❌ 直接问模型 无需连仓库
小 CSV 几十行 lat/lng 手工 Excel 透视 ❌ pandas / QGIS 不值得起仓库连接
实时 GPS 流 车队秒级位置 ❌ 流处理栈 Skill 面向分析型仓库,不是 Flink
无空间列的 BI 销售额按品类 ❌ 普通 SQL 没有 geometry 列就不该走 GeoSQL

拿不准时问一句:「要不要连我的 BigQuery/PostGIS 并可能出地图?」——要,就开 /geosql;不要,就普通对话或 MCP 工作流 里其它工具。

常见坑:CRS/投影、大数据量、权限

CRS 与投影:WGS84(EPSG:4326)经纬度与 Web Mercator(EPSG:3857)混算距离会偏一个数量级。GeoSQL 会做面积/长度 sanity check,但源表若本身存错 SRID,仍需你在元数据里确认。跨国分析注意 Overture 与国内私有数据是否同一 CRS。

大数据量与账单:BigQuery 默认 10 GiB dry-run 上限;超预算会改 tighter bbox、降 H3 分辨率、加过滤,而不是硬跑。Snowflake / PostGIS 虽无同样 dry-run,宽 bbox 全表 ST_INTERSECTS 仍会拖垮仓库——让 Agent 先 COUNT + bbox 裁剪。国内访问 BigQuery 还涉及网络与结算方式,和 Skill 无关,得自己保证 CLI 认证稳定。

权限与凭证:Skill 用本机 bq / snow / dekart 登录态,Agent 不持有密码,但 Agent 生成的 SQL 会以你的身份执行。只读服务账号、行级权限、生产库与 sandbox 分项目——别让写代码的 Agent 直连生产 spatial 库。Dekart 可选 Cloud;自托管时注意地图数据是否含敏感点位。

无 Dekart 时:GeoSQL 仍可写 SQL 与校验,只是少了地图反馈环,几何误判概率回到「普通 Agent 写 SQL」水平。eval 可本地跑 python evals/run.py 对照。

一条完整工作流示例

假设你要看「罗马尼亚主干道 5km 内充电桩分布」:

  1. 确认 BigQuery 或 PostGIS 里已有充电站与道路图层,本机 bq auth 或 DB 隧道可用
  2. Agent 输入:/geosql create map EV charger density along major Romanian roads…
  3. Discovery 列出相关表与 geometry 列;生成带 bbox 与 ST_DWithin 的 SQL
  4. BigQuery 路径先 dry-run;通过再执行
  5. Dekart 出图;Agent 看图检查道路是否只画了 motorway 级别、点是否落在路上
  6. 你导出 SQL 与地图链接,放进内部分享或 notebook

全程若某步报权限或 CRS 错误,把仓库返回的报错原文贴回对话,比复述「好像不对」省一轮 token。

常见问题

GeoSQL 必须装 Dekart 吗?

不必须。核心 Skill 安装后就能写空间 SQL 并做文本校验;Dekart 负责地图渲染与「看图纠错」环。官方安装向导会检测本机是否已有 Dekart CLI,有则跳过。无地图需求、只要 SQL 结果表时可以暂不装。

支持哪些数据仓库?

PostGIS、BigQuery、Snowflake、Whorobots,以及 Overture Maps 在 BigQuery/Snowflake 上的公共 share。具体函数以各引擎文档为准,Skill 会按检测到的引擎选语法,不是你口头说「用 MySQL」就能 magically 支持空间扩展。

Claude Code 和 Codex 都能用同一个 Skill 吗?

仓库定位是 Claude、Codex、GitHub Copilot 共用的 geospatial Skill;pip install geosql 会尝试写入检测到的客户端 Skill 目录。Copilot 与 Codex 的路径因版本而异,以安装器输出为准,别手工复制到错误目录。

和自己在 Agent 里贴 PostGIS 文档有何区别?

差别在固定流程:元数据探测、引擎特定函数、BigQuery 成本守卫、几何 sanity check、可选地图反馈都是打包好的。自己贴文档仍可能漏 dry-run、漏 SRID、漏分区裁剪;GeoSQL 把这些写进 Skill 流程,减少「SQL 能跑但地理结果错」的情况。

参考资料