【GIS与AI】

最近经常用各种 AI 工具测试空间数据分析,一方面是实际需要,另一方面是想看看到底哪种工具对 GIS 分析更方便。用过 cursor、Trae、Qclaw ,最近用的主要工具是 workbuddy。纯编程来说的话,主要是前两种。故进行了一个横向的比较。

测试山西省各县区土地利用变化分析及过程中的数据处理,117 个县(市区),1980-2020 年 8 期土地利用数据,传统做法得消耗较长时间。

我用 AI 编程工具驱动 ArcPy,2 小时搞定了。

但问题来了:Cursor 和 Trae,到底选哪个?

网上测评不少,但几乎没人从GIS 视角测过。于是我决定自己动手,选了 10 个 GIS 常见任务,两个工具各跑一遍,记录用时、代码质量、踩坑情况。

结论先说:Cursor 胜出(满血版更 ok),但 Trae 也有它的价值(免费也不是很差)。

下面是完整测评过程。


一、测试背景与条件

测试环境

项目

配置

操作系统

Windows 11

ArcGIS 版本

ArcGIS Pro 3.5

Python 环境

arcgispro-py3(Python 3.11)

Cursor 版本

2.6.22

Trae 版本

最新版

测试数据

8个栅格图层(土地利用),117 个县(市、区)

测试周期

3 天

测试任务清单

我选了 10 个 GIS 工作中常见的任务,覆盖数据处理、空间分析、可视化三个维度:

序号

任务类型

具体内容

1

数据处理

批量裁剪栅格(180 个文件)

2

数据处理

批量重命名文件(按规则)

3

数据处理

坐标系检测与转换

4

数据处理

属性表批量更新

5

空间分析

缓冲区分析 + 叠加统计

6

空间分析

栅格计算(NDVI)

7

空间分析

邻域分析(最近设施)

8

可视化

批量出图(PDF)

9

可视化

Folium 交互地图生成

10

综合任务

完整工作流(裁剪→统计→出图)

评分标准

每个任务从 4 个维度评分(满分 5 分):

维度

说明

代码生成质量

生成的代码是否可用、是否需要修改

ArcPy 理解程度

是否熟悉 ArcPy 的函数、参数、常见坑

调试效率

报错时的解决能力和速度

上下文理解

能否理解 GIS 领域的特定需求


二、任务逐一对比

任务 1:批量裁剪栅格

需求描述:

将 8 个土地利用栅格文件,按县(市、区)边界裁剪,输出到指定文件夹。

给两个工具的 Prompt(相同):


Cursor 生成的代码:

运行结果:✅ 直接可用,无需修改


Trae 生成的代码:

运行结果:❌ 报错

报错信息:

ArcPy 错误: Clip_management 参数数量不正确

问题分析:

  1. Trae 生成的 Clip_management 参数顺序错了

  2. 正确顺序是:in_raster, out_extent, out_raster, ...

  3. Trae 写成了:in_raster, out_raster, boundary(漏了 out_extent 参数)

修复后才能运行。


本轮对比:

维度

Cursor

Trae

代码生成质量

⭐⭐⭐⭐⭐

⭐⭐⭐

ArcPy 理解程度

⭐⭐⭐⭐⭐

⭐⭐⭐

调试效率

⭐⭐⭐⭐⭐(无需调试)

⭐⭐⭐⭐(修复后可用)

上下文理解

⭐⭐⭐⭐

⭐⭐⭐

Cursor 胜出。ArcPy 函数参数多、顺序严格,Cursor 明显更熟悉。


任务 2:批量重命名文件

需求:将 2015_耕地.tif 格式的文件,统一改成 LC_2015_耕地.tif

结果:两个工具都生成了正确的代码,质量相当。

维度

Cursor

Trae

代码生成质量

⭐⭐⭐⭐⭐

⭐⭐⭐⭐⭐

平局。这是纯 Python 任务,不涉及 ArcPy,两边都能搞定。


任务 3:坐标系检测与转换

需求:

检测一个 Shapefile 的坐标系,如果是 WGS84,转换成 CGCS2000 投影坐标

Prompt:

Cursor 的回答:

运行结果:✅ 直接可用

亮点:Cursor 自动补充了 CGCS2000 的 EPSG 代码(4547),还解释了"3-degree Gauss-Kruger zone 47"的含义。


Trae 的回答:

问题:

  1. 没有判断 EPSG 代码,用字符串匹配 "WGS" —— 不够严谨;

  2. 硬编码了 4547,没有做成参数;

  3. 没有 else 分支处理不需要转换的情况

需要手动补全逻辑。


本轮对比:

维度

Cursor

Trae

代码生成质量

⭐⭐⭐⭐⭐

⭐⭐⭐

ArcPy 理解程度

⭐⭐⭐⭐⭐

⭐⭐⭐

调试效率

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

Cursor 胜出。坐标系处理是 GIS 的核心场景,Cursor 的理解更深。


任务 4:属性表批量更新

需求:

遍历 500 个点位要素的属性表,给每个点计算"到最近道路的距离"并写入字段

Prompt:


Cursor 生成的代码:

亮点:

  1. 用 arcpy.da.UpdateCursor(数据访问游标),比老的 arcpy.UpdateCursor 快很多

  2. 添加了进度打印,每 50 条显示一次

  3. 代码结构清晰,注释完整

运行结果:✅ 直接可用


Trae 生成的代码:

问题:

  1. 用旧式游标:arcpy.UpdateCursor 已废弃,性能远不如 arcpy.da.UpdateCursor

  2. 没有进度反馈:500 条记录跑完才知道结果

  3. 没有添加字段检查:直接假设字段存在

  4. 无限循环风险:如果道路数据为空,min_dist 保持 999999

修复后才能运行。


本轮对比:

维度

Cursor

Trae

代码生成质量

⭐⭐⭐⭐⭐

⭐⭐⭐

ArcPy 理解程度

⭐⭐⭐⭐⭐

⭐⭐⭐

调试效率

⭐⭐⭐⭐⭐(无需调试)

⭐⭐⭐(需要改游标)

上下文理解

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

Cursor 胜出。数据访问游标(arcpy.da.*)是 ArcPy 的核心,Cursor 显然更熟悉新旧 API 的差异。


任务 5:缓冲区分析 + 叠加统计

需求:

给所有县(市、区)边界生成 2km 缓冲区,统计每个缓冲区内的道路总长度

结果:两个工具都生成了正确的代码,质量相当。

Cursor 生成的代码更简洁;

Trae 生成的代码也正确,但用了更多中间步骤。

平局。


任务 6:栅格计算(NDVI)

需求:

用 Landsat 影像计算 NDVI(归一化植被指数),公式:(NIR - Red) / (NIR + Red)

Prompt:


Cursor 生成的代码:

亮点:

  1. 自动导入 arcpy.sa 模块(空间分析)

  2. 检查并签出扩展模块(ArcPy 常见坑)

  3. 代码结构完整,有错误处理

运行结果:✅ 直接可用


Trae 生成的代码:

问题:

  1. 没有导入空间分析模块:直接用 arcpy.Raster(),但更规范的是 from arcpy.sa import *

  2. 没有检查扩展:如果用户没开启 Spatial Analyst,会报错

  3. 没有错误处理:栅格计算失败时没有提示

运行时提示:RuntimeError: 无法识别函数 Raster

修复后需要添加:from arcpy.sa import *


本轮对比:

维度

Cursor

Trae

代码生成质量

⭐⭐⭐⭐⭐

⭐⭐⭐

ArcPy 理解程度

⭐⭐⭐⭐⭐

⭐⭐⭐

调试效率

⭐⭐⭐⭐⭐(无需调试)

⭐⭐⭐(需要补导入)

Cursor 胜出。空间分析模块的导入是新手最常见的坑,Cursor 直接就避开了。


任务 7:邻域分析(最近设施)

需求:

找到每个居民点到最近医院的距离和名称

结果:两个工具都用了 arcpy.analysis.Near 工具,代码质量相当。

Cursor 生成的代码:

Trae 生成的代码类似,只是多了一些打印信息。

平局。



任务 8:批量出图(重点测试)

需求:

使用 ArcGIS Pro 的地图模板,批量输出 100张以上专题地图(PDF)

这是我最关心的任务——因为之前的多项工作就是用 Cursor 搞定的。

Prompt:


Cursor 的表现:

Cursor 生成的代码直接用了 arcpy.mp 模块(ArcGIS Pro 的制图接口),包括:

  • 加载 .pagx 模板

  • 遍历地图和图层

  • 更新数据源

  • 修改布局元素(标题、图例)

  • 批量导出 PDF

关键代码片段:

运行结果:✅ 可用,需要小调整(路径和元素名称)


Trae 的表现:

Trae 一开始生成了ArcMap(.mxd)的代码:

mxd = arcpy.mapping.MapDocument(r"G:\项目\模板\专题图.mxd")

我提醒它:"我用的是 ArcGIS Pro,不是 ArcMap"

Trae 才改成了 arcpy.mp.ArcGISProject,但参数和函数还是有问题——它把 listLayouts() 写成了 listLayout()(少了 s),报错。


本轮对比:

维度

Cursor

Trae

代码生成质量

⭐⭐⭐⭐⭐

⭐⭐

ArcPy 理解程度

⭐⭐⭐⭐⭐

⭐⭐

调试效率

⭐⭐⭐⭐

⭐⭐⭐

Cursor 大幅领先。ArcGIS Pro 的 arcpy.mp 模块比较新,资料少,Cursor 明显训练得更好。


任务 9:Folium 交互地图

需求:用 Folium 生成交互式地图

结果:两个工具都表现良好。这是纯 Python 任务,不涉及 ArcPy。

平局。


任务 10:完整工作流(综合测试)

需求:

写一个完整的土地利用变化分析工作流:批量裁剪 → 面积统计 → 趋势图 → 专题图输出

Cursor:生成了一个完整的 LandUseAnalyzer 类,包含 5 个方法,代码结构清晰,注释完整。

Trae:生成了 5 个独立函数,没有封装成类,但功能也能实现。

对比:

维度

Cursor

Trae

代码架构

⭐⭐⭐⭐⭐(面向对象)

⭐⭐⭐(函数式)

完整性

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

可维护性

⭐⭐⭐⭐⭐

⭐⭐⭐

Cursor 胜出。代码结构更适合实际项目。


三、综合评分

总分对比

维度

Cursor

Trae

代码生成质量

4.8 / 5

3.5 / 5

ArcPy 理解程度

4.7 / 5

3.2 / 5

调试效率

4.5 / 5

3.8 / 5

上下文理解

4.3 / 5

3.5 / 5

综合得分 4.6 / 5 3.5 / 5

分场景建议

场景

推荐工具

理由

ArcPy 自动化

Cursor

ArcPy 函数参数、版本差异处理更好

纯 Python 任务

都可以

两边能力相当

ArcGIS Pro 制图

Cursor arcpy.mp 模块理解更深

快速原型验证

Trae

界面简洁,启动快

长期项目开发

Cursor

代码架构更规范,适合维护


四、踩坑记录

Cursor 的坑

路径问题:Cursor 默认用 / 分隔路径,Windows 下有时需要改成 \ 或用 r"" 原始字符串

版本差异:有时候会混用 ArcMap 和 ArcGIS Pro 的函数,需要手动纠正

过度注释:生成的代码注释有点多,需要自己精简

Trae 的坑

ArcPy 参数错误:多次出现参数顺序、数量错误

模块导入缺失:栅格计算忘了 from arcpy.sa import *

版本混用:经常默认生成 ArcMap(.mxd)的代码

缺少边界处理:异常处理、边界判断写得少


五、我的最终选择

主力用 Cursor(免费额度内),Trae 做备选。

理由:

GIS 工作的核心是 ArcPy,Cursor 在这方面的表现明显更好

实际项目中,代码质量比生成速度更重要——生成的代码不正确,改起来更费时间

Cursor 的上下文理解更好,能记住我之前提过的环境配置

但 Trae 也有优点:

界面更简洁

响应速度快

做简单任务够用

最重要的是免费

如果你是 GIS 初学者(从业者我就不敢班门弄斧了),想用 AI 驱动 ArcGIS,我建议刚开始可以试试 Trae(主要是免费,而且随着不断升级迭代,肯定会好用起来),熟练后,有大需求的时候可以用用 Cursor(免费额度有限) 。


六、给新手的建议

1. 先从简单任务开始

不要一上来就让它写完整工作流。先试:

批量重命名

格式转换

简单的缓冲区分析

熟悉了 AI 的"脾气"之后,再逐步增加复杂度。

2. 学会"追问"

AI 第一次生成的代码不完美是正常的。要学会追问:

你生成的代码报错了,错误信息是:xxx

请分析原因并修复

或者:这段代码运行很慢,有优化方案吗?

3. 建立自己的代码库或技能库

每次 AI 生成的代码,如果好用,就保存下来,逐步升级为 skills(可以看看我的上一篇文章)。慢慢积累成自己的工具库。


写在最后

AI 编程工具不是万能的,但它确实能大幅降低 ArcPy 的学习门槛。

以前需要啃文档、查示例、调试半天的代码,现在用自然语言描述一下,AI 就能生成 80% 可用的版本。

剩下的 20%,是你对 GIS 的理解、对项目的判断、对结果的负责——这些,AI 替代不了。

工具是工具,核心还是人。


你用过 Cursor 或 Trae 吗?在 GIS 工作中有什么体验?欢迎留言分享~



扫码关注公众号:获取 【GIS与AI】实战经验、源码模板、避坑指南

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐