Claude 怎么连接 QGIS?3 种方法同一任务实测
发布于
Anthropic 没有为 QGIS 发布官方插件。在 QGIS 中使用 Claude 主要有三种方法:通过 QGIS MCP 服务器连接 Claude Desktop 或 Claude Code,让 Claude 编写 PyQGIS 代码再粘贴到 Python 控制台中运行,或者在 QGIS 内安装一个智能体插件。
2026 年 11 月 7 日,我测试了 Claude 处理一项真实任务的表现:加载印度浦那(Pune)的行政区和 OpenStreetMap 学校数据,统计每个多边形内的学校数量,并制作分级统计图。Claude Sonnet 5.5 写的两个 PyQGIS 脚本,粘贴后都没能直接运行,其中一个在我替换了数据服务器 URL 之后用 44 到 48 秒跑通。QGIS 内的智能体连续两次运行同一条提示词,分别在 45 到 63 秒内完成。

在 QGIS 中使用 Claude 有哪些方法?
把 Claude 连接到 QGIS,要么是给 Anthropic 的模型搭一座桥,让它能在您打开的工程中运行工具,要么是在聊天窗口和 QGIS Python 控制台之间来回复制 PyQGIS 脚本。第三种方法不用搭桥,而是直接在 QGIS 内放一个 AI 智能体面板。
大多数教程只介绍 Model Context Protocol(MCP)这座桥。在安装额外的命令行工具或编辑配置文件之前,最好先看清三种方法各需要什么,以及给它们同一项任务时会发生什么。
| 方法 1:Claude + QGIS MCP | 方法 2:Claude 编写 PyQGIS | 方法 3:QGIS 内的智能体 | |
|---|---|---|---|
| 设置步骤 | 5 步(安装插件、uv、客户端、配置,每次会话都要点 Run MCP) | 0 个设置步骤(每项任务点 3 次:打开编辑器、粘贴、运行) | 3 步(从 QGIS 插件管理器安装、打开面板、登录) |
| 需要什么 | Claude Desktop(免费或付费)或 Claude Code(付费套餐),外加 uv 和一个本地服务器 | 任何 Claude 聊天,无需额外软件 | QGIS 3.28+ 和一个免费账户(无需 API 密钥或信用卡) |
| 谁运行代码 | Claude 通过本地 MCP 端口触发工具 | 您在 Python 控制台中粘贴并运行脚本 | 插件运行 QGIS 工具并自己检查地图 |
| 能看到您的工程吗? | 能,前提是 MCP 服务器正在运行 | 不能,除非您在提示词中写明图层名称和 CRS | 能,读取已打开的图层、字段和地图范围 |
| 撤销 | 在 QGIS 中手动清理 | 在 QGIS 中手动清理 | 每条回答下都有一键撤销更改按钮 |
| 浦那任务结果 | 未在浦那上运行(在类似的里昂学校任务上用了 9 分 28 秒) | 2 个脚本粘贴后 0 个能直接运行;改 URL 后 1 个在 44 到 48 秒内跑通(14 个 taluka 中 447 所学校) | 2 次运行均通过,分别用时 63 秒和约 45 秒(58 个城市选区中 256 所学校) |
如果您想不借助任何 AI 手工完成这项任务,免费的 QGIS 做法需要四步:用 矢量 > QuickOSM > QuickOSM...(英文界面为 Vector > QuickOSM > QuickOSM...)下载边界和 amenity=school 点,运行 Vector > Analysis Tools > Count Points in Polygon...(native:countpointsinpolygon,即统计多边形内的点数),然后在 图层属性 > 符号化(英文界面为 Layer Properties > Symbology)中把新的计数字段设为“分级”(Graduated)。
QGIS 插件库里有 Claude 插件吗?
QGIS 插件库中没有 Anthropic 的官方插件。我在 2026 年 11 月 7 日查看插件库索引时(QGIS 3.44 有 4,399 个插件,QGIS 4.0 有 1,697 个),有 45 个插件的元数据中包含“claude”一词,但其中 36 个只是把 Claude 列为编程助手,或者作者名叫 Claude。
真正把 Claude 模型或订阅连接到 QGIS 的社区插件只有九个:
- QGIS MCP(作者 Nicolas Karasiak,v0.15.2,截至 2026 年 11 月 7 日下载 77,002 次):开放一个本地端口,让 Claude Desktop、Claude Code 或 Cursor 能在 QGIS 内运行 125 个工具。
- WAI QGIS MCP(v0.3.0,下载 753 次):通过单个
.mcpb扩展文件连接 Claude Desktop,您不必自己安装 Node.js。 - QGIS Agent(作者 bunkmr,v2.4.15,下载 3,783 次)、QGIS Agent Mcp(v0.5.0,下载 3,210 次)、QGIS Salah MCP(v1.1.1,下载 2,037 次)和 ClaudIA QGIS(v0.4.6,下载 784 次):其他 MCP 套接字服务器或面板,需要使用您自己的 API 密钥。
- LandTalk.AI(v1.5.0,下载 5,927 次)和 AI Copilot(v1.8.0,下载 2,098 次):支持多种模型的聊天面板,可接入 Claude、OpenAI 或 Gemini 密钥。
- Mapsuke(作者 MIERUNE,v1.6.0,下载 1,242 次,2026 年 10 月 30 日更新):QGIS 3.44+ 内的聊天面板,直接使用您现有的 Claude Code 或 Codex 登录,无需 MCP 服务器,前提是您已安装 Claude Code CLI。
需要哪种 Claude 套餐,取决于您的连接方式。根据 Anthropic 的套餐对比页面(2026 年 11 月 7 日查阅),Claude Desktop 聊天在 Free 套餐以及 Pro、Max、Ultra、Team 和 Enterprise 套餐中都可以使用,您可以通过 Settings > Developer > Edit Config 或 Desktop Extensions 接入本地 MCP 服务器。Claude Code 是 Mapsuke 等插件和命令行工作流所依赖的命令行工具,Free 套餐不包含它,需要 Pro、Max 或 Ultra 订阅。
测试:统计浦那各区的学校数量
我为分析搜索结果空白而读过的每篇教程,都是在作者硬盘上已有的文件上测试 Claude。而在真实的 GIS 工作中,您经常需要让工具去获取一座它从没见过的城市的开放数据。
2026 年 11 月 7 日,我在运行任何东西之前先写下了成功标准。提示词只有一句话:
Load the districts of Pune, India and the schools from OpenStreetMap, count schools per district and make a choropleth.
(意思是:从 OpenStreetMap 加载印度浦那的行政区和学校,统计每个区的学校数量,并制作分级统计图。)
我特意选了浦那,因为“districts of Pune”有歧义。浦那是马哈拉施特拉邦的一个县,下分 14 个分县(taluka 或 tehsil),而浦那市则分为 15 个行政区办事处和 58 个选区。好的工作流程要么会问您指的是哪种边界,要么会明确说明它加载的是哪一种。
方法 2:让 Claude 写 PyQGIS 代码再粘贴
对于复制粘贴这种方法,我用完全相同的提示词运行了 Claude Sonnet 5.5 两次(claude-sonnet-5-5,通过 Claude Code 2.1.306 调用,关闭所有工具和网络访问,相当于一个普通聊天窗口),只额外加了一句“I use QGIS. Write the PyQGIS code I can paste in the QGIS Python console for this task”。如果您从没用过控制台,我们的 PyQGIS 指南介绍了脚本在那里如何运行。
Claude 生成第一个 134 行的脚本用了 77 秒,第二个 108 行的脚本用了 67 秒。两次回答都指出“districts”有歧义,选择了 admin_level=6(浦那县的 14 个 taluka),并说明了如何在代码中修改级别。第二次回答末尾还加了一句中肯的提醒:“I haven't run it, so the first run is the test.”(我没有运行过它,所以第一次运行就是测试。)
两个脚本粘贴到 QGIS 3.44.15 后都没能直接运行:
- **第 1 次回答在 1 秒后失败,报错
URLError: <urlopen error [Errno 61] Connection refused>。**脚本调用的是主公共 Overpass 服务器(overpass-api.de),那天上午它拒绝了来自我们 IP 的连接。 - **第 2 次回答在第 3 行就失败了,还没发出任何网络请求。**它报错
ImportError: cannot import name 'QgsClassificationNaturalBreaks' from 'qgis.core'。

在 QGIS 3.44 中,自然断点分类的类名是 QgsClassificationJenks,而不是 QgsClassificationNaturalBreaks。没有工具的聊天机器人无法针对您的 QGIS 版本测试自己的导入语句,所以一个编造的类名就能让整个脚本停下来。我们在安纳西用三项任务测试 ChatGPT 用于 QGIS 时,也看到了完全相同的盲猜模式。
为了看看 Claude 的第一个脚本其他部分是否可靠,我在第 1 次回答中改了一个常量,把 overpass-api.de 换成法国镜像 overpass.openstreetmap.fr,然后在干净的图层树上运行了三次。服务器可用时,它分别用 48、44 和 45 秒完成。

第 1 次回答的计算是对的:它加载了 14 个 taluka 多边形和 447 个学校要素,我独立重新计算点在多边形内的数量后,447 所学校全部与 n_schools 字段吻合,零误差(Pune City Subdistrict 246 所,Haveli 75 所,Mulshi 55 所,Indapur、Velhe 和 Ambegaon 都是 0 所)。不过,这张地图还有一些需要人工收拾的毛病:分位数图例对整数的学校数量打印出了 0,0000 - 1,2000 这样的小数断点,中心区的标注在默认缩放下互相重叠。
方法 1:通过 QGIS MCP 连接 Claude Desktop 或 Claude Code
给 Claude 配一个 QGIS MCP 服务器,就解决了它看不见的问题:Claude 可以检查您的图层,运行 execute_code,看到错误回溯,然后重试。
我没有在浦那上重新运行 MCP 服务器,因为那天上午公共 Overpass 服务器拒绝了我们的网络,同样的 OpenStreetMap 调用也会被挡住。不过,我们在 2026 年 9 月下旬和 10 月已经测量过 Claude Sonnet 5.5 在 Claude Code 中驱动 QGIS MCP(v0.15.0 到 0.15.2)的表现,涵盖四项真实任务和一个 41 题的基准测试:
- 设置需要 5 步,约 3 分钟(前提是已装好
uv和客户端),第一次调用还要多花 16 秒,下载一个提供 125 个工具的 90 MB 服务器。每次重启 QGIS,都要记得再点一次 Run MCP,否则 Claude 会返回Error executing tool ping。我们的 QGIS MCP 设置与测试指南逐一介绍了每个步骤和配置文件。 - 在类似的里昂学校任务上(统计有轨电车站 300 m 范围内的学校),Claude + QGIS MCP 用 9 分 28 秒得出了正确数量(87 所学校)。它的十个步骤中有六个是原始 Python,脚本遇到 Overpass 的 406、504 和 502 错误时,QGIS 卡住了约 7 分钟。
- **数据已经干净时,MCP 很快。**在波尔图的建筑物和打印布局任务上,Claude + QGIS MCP 用 2 分 48 秒完成,比我们自己的智能体的 5 分 26 秒还快。
- 在 Google 的 GeoExpertQueries 基准测试(41 个保留任务)中,Claude Code 中的 Claude Sonnet 5.5 加 QGIS MCP 得分为 24.9 分(满分 100),而 Low 强度的 AI Agent 为 43.8 分(查看完整基准测试结果)。
如果您已经付费订阅了 Claude Pro 或 Max,并且整天都在 Claude Code 里工作,MCP 不需要额外花钱,还能让您在一个终端里自由组合 shell 脚本、本地文件和 QGIS。
方法 3:使用 QGIS 内的智能体插件
AI Agent 是我们开发的,所以这一节讲的是我们自己的插件。它不是把外部应用桥接到 QGIS,而是在地图画布旁边直接停靠一个聊天面板,读取您的工程状态,从内置的数据目录中取数据(约 90 个来源、2,800 个数据集,外加 OpenStreetMap 和 Overture Maps),回答之前会检查渲染出的地图图像,并在每条回答下放一个撤销更改按钮。
我在 QGIS 3.44.15 中把完全相同的浦那提示词运行了两次(Balanced 权限,Medium 强度)。
第一次运行时,11 秒后面板暂停,显示一张澄清卡片,问 “Which subdivisions of Pune should the school counts use?”(学校数量应按浦那的哪种分区统计?),并提供两个可点击的选项:Pune city wards(浦那城市选区)和 Pune district tehsils(浦那县分县)。选择 Pune city wards 后,从点击发送开始算起,总用时 63 秒,共 15 步。

第二次运行在一个新的聊天中进行,它没有提问,而是在回答中说明它把浦那的 58 个选区作为城市的区,用时约 45 秒(16 步),并用橙色色板为选区设置了样式。

为什么两次运行都成功了,而粘贴的脚本却遇到了连接错误?因为智能体没有从原始脚本中调用超负荷的 overpass-api.de 接口;它从 DataMeet 获取了 2022 年的选区边界,并通过内置的数据工具获取了 256 个学校要素(108 个节点和 148 条路径,把多边形学校转换为面内点)。我对两次输出都做了独立的点在多边形内核查,256 个学校点全部位于 58 个选区内,与 schools 属性字段零误差。
它还把三个中间图层收进了一个隐藏的 Working layers 组,让图层树保持整洁,并在回答中提醒我 OpenStreetMap 不是官方的学校普查数据。我唯一的不满是:在第 1 次和第 2 次运行之间,它对是该问我“选区还是分县”还是自己决定,改了主意。
该选哪种方法?
在我自己的工作中,编写可复用的处理脚本,或者调试一个横跨二十个文件的自定义插件时,我仍然会在浏览器或终端里用普通的 Claude。这时您希望读得到 Python 代码,把它提交到 Git,并在图形界面之外运行。只是要记得把 QGIS 版本、图层名称、字段名称和 CRS 贴进提示词,并做好修一两处导入语句的准备。
如果您已经有付费的 Claude 订阅,熟悉 uv 和 JSON 配置文件,并且想在 Claude Desktop 或 Claude Code 中把本地文件操作和 QGIS 调用结合起来,就选 Claude + QGIS MCP。它在您现有的套餐之外不额外收费,数据图层已经加载好时速度很快。
如果您想要地图和数字,而不想时刻盯着 Python 回溯、Overpass 超时或断开的端口,就选 QGIS 内的智能体。对于赶截止日期的分析人员,或者需要统一符号、数据来源引用和一键撤销的团队来说,把智能体和数据目录内置在 QGIS 中最省时间。您可以在我们的指南什么是 QGIS 中的 AI 智能体中了解架构上的区别,或者在 QGIS AI 中心浏览目前所有的工具。
**我们如何测量。**所有浦那测试都在 2026 年 11 月 7 日巴黎时间 10:29 到 11:03 之间进行,环境为 macOS 上的 QGIS 3.44.15-Solothurn(Qt 5.15.19)。成功标准在第一条提示词之前的 10:14 写好。Claude Sonnet 5.5(claude-sonnet-5-5)通过 Claude Code 2.1.306(claude -p --safe-mode --tools "" --model sonnet)在一个空目录中调用,没有 MCP 服务器,也没有网络访问;返回的两个脚本在 QGIS Python 中执行,并用独立的点在多边形内脚本核查。AI Agent 1.9.4(Balanced 模式,Medium 强度)在干净的工程中对同一句话运行了两次。测试期间同一台 Mac 上还运行着其他 QGIS 会话,所以实际用时比空闲机器上慢。每种方法在一项任务上运行两次是很小的样本,而 overpass-api.de 拒绝连接的情况只是在一个网络、一个上午观察到的。
常见问题
QGIS 有官方的 Claude 插件吗?
没有。Anthropic 没有发布 QGIS 插件。截至 2026 年 11 月 7 日,QGIS 插件库中有九个把 Claude 连接到 QGIS 的社区插件,连接方式有三种:本地 Model Context Protocol(MCP)服务器(例如 QGIS MCP 和 WAI QGIS MCP)、您自己的 API 密钥,或者本地的 Claude Code 登录(Mapsuke)。另一个选择是 AI Agent,它直接从 QGIS 插件管理器安装,内置 AI 模型和数据目录。
Claude Desktop 能免费控制 QGIS 吗?
能,但有限制。根据 Anthropic 的套餐文档,Claude Desktop 聊天在 Free 套餐中可用,并支持通过 claude_desktop_config.json 或 Desktop Extensions(.mcpb)接入本地 MCP 服务器。从终端运行 Claude Code 则需要付费的 Claude Pro、Max 或 Ultra 套餐。
Claude 能写出在 QGIS 3.44 中运行的 PyQGIS 代码吗?
能,Claude Sonnet 5.5 写的 PyQGIS 结构清晰,但它看不到您的 QGIS 安装,也无法测试自己的代码,所以有时会编造类名,或者依赖会失败的外部服务器。在我们于 QGIS 3.44.15 上做的两次样本测试中,一个脚本因 QgsClassificationNaturalBreaks 报 ImportError 而失败(真正的类是 QgsClassificationJenks),另一个直到我们替换了 Overpass API URL 才跑通。
不设置 MCP,在 QGIS 中使用 AI 最简单的方法是什么?
在 QGIS 中从 插件 > 管理和安装插件(英文界面为 Plugins > Manage and Install Plugins)安装一个集成的智能体插件。使用 AI Agent,无需维护 Python 环境、uv 包管理器或配置文件:免费登录,每月 5 个任务(Pro 为 300 个),在停靠的面板中输入您的需求即可。
发布官方插件。在 QGIS 中使用 Claude 主要有三种方法:通过 QGIS MCP 服务器连接 Claude Desktop 或 Claude Code,让 Claude 编写 PyQGIS 代码再粘贴到 Python 控制台中运行,或者在 QGIS 内安装一个智能体插件。

