ArcGIS
编程语法规范速览
VB / Python / SQL 三语言对照
日常开发 / 语法避坑 / 字符规范
一、三种语言的角色定位
ArcGIS 的二次开发与日常数据处理依赖三种语言,适用场景各不相同。
语言 | 应用场景 | ArcGIS 模块 |
Python (ArcPy) | 推荐方案;ArcGIS Pro 标准自动化脚本,跨平台 |
ArcGIS Pro Python 控制台、ArcPy 模块 |
VBA / VB | ArcMap 时代的经典桌面脚本(已被 Python 替代) | ArcMap VBA 编辑器 |
SQL | 企业级地理数据库直接查询;定义查询;空间 SQL | Query Layers、ArcSDE、ST_Geometry |
建议: 新项目一律采用 Python + ArcPy 方案;SQL 用于企业级数据库直接读写。
二、大小写敏感性
语言 | 是否区分大小写 |
示例 |
Python | 严格区分 | arcpy.SelectLayerByAttribute() ≠ arcpy.selectLayerByAttribute() |
VB | 不区分 | SELECT = Select = select(关键字相同) |
SQL | 通常不区分(关键字层面) | WHERE = where(关键字相同) |
其中: 文件地理数据库 / 企业数据库 SQL 关键字不区分大小写,但字段名是否区分与平台有关。
•Oracle: 表名、字段名不区分大小写,但内容区分
•PostgreSQL / SQL Server: 均为小写形式存储,需使用双引号保留原始大小写
实战注意: Python 中 ArcPy 函数和参数名称严格区分大小写。使用代码补全工具可以避免拼写错误。
import arcpy
# 正确: 函数名首字母大写
arcpy.analysis.Buffer("roads", "roads_buf", "100 Meters")
# 函数名拼写错误会抛 NameError 或 AttributeError
三、引号使用规则
3.1 数字不加引号,字符串加引号
三类语言都遵循此通用规则。
# 正确: 数字不加引号
arcpy.analysis.Buffer("roads", "roads_buf", 100) # 100 是数值
# 注意: 部分工具需要字符串参数时反而会报错
3.2 三种语言对字符串引号的不同要求
语言 | 规定 | 示例 |
SQL | 单引号 (') 包裹字符串 | SELECT * FROM cities WHERE name = 'Beijing' |
VB | 一定双引号 (") | arcpy.SelectLayerByAttribute_management "cities" "NEW_SELECTION" ""NAME" = 'Beijing'" |
Python |
单引号或双引号均可,建议统一 | name = 'Beijing' 或 name = "Beijing" |
3.3 嵌套引号的处理
当字符串内部需要包含引号时,需要转义或使用不同引号。
# Python: 用反斜杠转义或换用另一种引号
label = "He's a student" # 双引号包裹,内部单引号
# SQL: 字符串内嵌引号用两个连续单引号
SELECT * FROM cities WHERE name = 'O''Brien'
四、半角字符与全角字符
重要原则: ArcGIS 编程语言要求使用半角字符(英文标点),而不是全角字符(中文标点)。全角符号会导致 SyntaxError 或语法解析失败。
4.1 容易混淆的字符对照
类别 | 半角(正确) | 全角(错误) |
逗号 | , | , |
括号 | () | () |
引号 | ' " | ' " |
|
冒号 | : | : |
分号 | ; | ; |
空格 | ASCII 空格 U+0020 | 全角空格 U+3000 |
4.2 典型错误案例
坑:复制粘贴导致全角: 从网页、Word、PDF 复制的代码经常带入全角符号,例如中文逗号 ',' 或全角冒号 ':' 在 Python 中会被当作非法字符而直接报错。
# 错误: 使用了全角逗号(Chinese comma)
arcpy.analysis.Buffer("roads","roads_buf",100) # SyntaxError
# 正确: 全部使用半角符号
arcpy.analysis.Buffer("roads", "roads_buf", 100)
4.3 调试方法
•将代码复制到记事本(或 Notepad++),使用「显示所有字符」功能
•在编辑器中将字体设置为 Consolas / Courier New,便于区分全角与半角
•使用专业代码编辑器(VS Code、PyCharm)的高亮提示功能
•若提示 invalid character,首先检查不可见字符:制表符、空格、零宽字符
五、语法错误排查技巧
5.1 常见错误信号
错误信息 |
常见原因 | 排查方向 |
SyntaxError | 标点符号错误(中文/全角)、括号不匹配 | 逐字符核对括号、逗号、引号 |
IndentationError | 缩进不一致或混入 Tab 与空格 | 编辑器中显示空格和 Tab,统一为 4 空格 |
NameError | 变量名拼写错误、大小写错误 | 检查变量定义和大小写 |
AttributeError | ArcPy 函数或参数名拼写错误 |
用 arcpy.提示确认函数名 |
TypeError | 参数类型不匹配(字符串当作数字) | 使用 str() / int() 转换 |
5.2 标准排查流程
出现语法错误,建议按以下流程排查:
•第一步: 将代码复制到记事本,仔细观察每一个标点
•第二步: 用开发工具重新输入,避免隐藏字符干扰
•第三步: 从最小可运行代码开始,逐段添加定位问题
•第四步: 使用 print() / arcpy.AddMessage() 打印中间结果
•第五步: 对比 Esri 帮助文档中的官方示例确认语法
5.3 三语言对照速记
要点
| Python | VB | SQL |
大小写 | 严格 | 不区分 | 大多不区分 |
字符串引号 | 单/双均可 | 必须双 | 必须单 |
嵌套引号 |
\' \ 或混用 | 连续 "" | 连续 '' |
注释符号 | # 单行 | ' 或 Rem | -- 单行 / /* */ 多行 |
数组/列表 | [ 1, 2, 3 ] | 无内建数组 | IN(1,2,3) 或子查询 |
— 文档结束 —