ArcGIS字段计算器的详细使用案例
文章目录
- 1. 字段计算器
- 2. 基本使用
- 3. 典型应用案例
- 3.1 计算新字段值(数值计算)
- 3.2 字符串拼接
- 3.3 日期计算
- 3.4 条件计算(IF 语句)
- 3.5 从坐标计算经纬度
- 4. 高级用法
- 4.1 自定义函数
- 4.2 正则表达式
- 5. 使用要点总结
- 5.1 编辑与非编辑状态
- 5.2 脚本语言版本差异
- 5.3 语法规范与排错技巧
- 5.4 特殊符号与运算规则
- 5.5 空值处理注意事项
- 5.6 要点补充
- 6. 结论&典型示例对照表
1. 字段计算器
字段计算器(Field Calculator)是 ArcGIS 中用于修改或计算字段值的工具。它支持Python 和 VBScript 语言,可以进行数值计算、字符串操作、日期处理、几何计算等。
2. 基本使用
🔹 使用步骤
-
打开 ArcGIS(ArcMap 或 ArcGIS Pro)。
-
右键点击属性表(Attribute Table),选择 “打开”。
-
选中要计算的字段,右键点击**“字段计算器”**。
-
选择计算语言(Python 或 VBScript)。
-
在计算框中输入表达式,并执行计算。
3. 典型应用案例
3.1 计算新字段值(数值计算)
场景:
假设我们有一个字段 Population,需要计算该值增加 10% 后的新值,并存入新字段 NewPopulation。
操作步骤
-
在属性表中添加一个新字段 NewPopulation(类型:Double)。
-
右键 NewPopulation → 选择 字段计算器。
-
选择 Python 语法,输入以下公式:
!Population! * 1.1
点击 OK,完成计算。
3.2 字符串拼接
场景:
在 City 和 Country 两个字段的基础上,创建 Full_Location 字段,合并成 “City, Country” 格式。
操作步骤
-
添加新字段 Full_Location(类型:Text)。
-
右键 Full_Location → 选择 字段计算器。
-
选择 Python 语法,输入:
!City! + ", " + !Country!
点击 OK,字段将填充 “New York, USA” 这样的值。
3.3 日期计算
场景:
计算 StartDate 字段的 30 天后的日期,并存入 EndDate 字段。
操作步骤
-
添加新字段 EndDate(类型:Date)。
-
右键 EndDate → 选择 字段计算器。
-
选择 Python 语法,输入:
import datetime
!StartDate! + datetime.timedelta(days=30)
点击 OK,完成计算。
3.4 条件计算(IF 语句)
场景:
创建 Category 字段,按 Population 大小分类:
-
人口 ≥ 100 万:设为 “Large”
-
50 万 ≤ 人口 < 100 万:设为 “Medium”
-
人口 < 50 万:设为 “Small”
操作步骤
-
添加新字段 Category(类型:Text)。
-
右键 Category → 选择 字段计算器。
-
选择 Python 语法,输入:
def classify(pop):
if pop >= 1000000:
return "Large"
elif pop >= 500000:
return "Medium"
else:
return "Small"
classify(!Population!)
点击 OK,完成计算。
3.5 从坐标计算经纬度
场景:
计算点要素的经纬度,并存入 Longitude 和 Latitude 字段。
操作步骤
-
添加 Longitude 和 Latitude 字段(类型:Double)。
-
右键 Longitude → 选择 字段计算器。
-
选择 Python 语法,输入:
!SHAPE!.centroid.X
-
右键 Latitude → 选择 字段计算器。
-
选择 Python 语法,输入:
!SHAPE!.centroid.Y
点击 OK,完成计算。
4. 高级用法
4.1 自定义函数
可以在 Python 代码框中定义更复杂的计算逻辑,例如计算面积:
def calculate_area(shape):
return shape.area
calculate_area(!SHAPE!)
4.2 正则表达式
如果 Address 字段存储地址 “123 Main St, New York, NY”,我们想提取城市:
import re
def extract_city(address):
match = re.search(r', (.*?),', address)
return match.group(1) if match else ""
extract_city(!Address!)
5. 使用要点总结
5.1 编辑与非编辑状态
非编辑状态下计算结果不可撤销,建议重要数据先备份
5.2 脚本语言版本差异
- ArcMap支持VBScript/Python,Pro仅支持Python/Arcade
- VB字段名用[中括号],Python用!叹号!包裹字段名(需半角符号)
5.3 语法规范与排错技巧
- VB字符串用双引号,Python可用单/双引号(需成对出现)
- Python严格区分大小写,字符数字连接需str()转换
- 出现错误时,粘贴代码到记事本检查半角符号/引号配对
5.4 特殊符号与运算规则
- 字段计算器自带"="号,脚本中无需重复添加
- VB用"&“连接字符串与数字,Python用”+"但需类型统一
- 涉及NULL值的运算结果恒为NULL(包括字符串拼接)
5.5 空值处理注意事项
- 任何字段含NULL的数学运算返回NULL
- 字符串长度计算时NULL≠0,需先进行非空判断
- 日期/数值字段建议设置默认值避免空值问题
5.6 要点补充
- 批量更新时建议先备份数据
- 处理大数据时使用"计算字段"工具比交互式计算更稳定
- Python脚本换行需用反斜杠\ 或括号包裹
- 处理中文路径可能导致脚本错误,建议使用英文路
- 径涉及几何计算时确保要素类已建立空间索引
- 计算前可用arcpy.CalculateField_management测试脚本语法
6. 结论&典型示例对照表
字段计算器 是 ArcGIS 处理数据的重要工具,可用于数值计算、字符串操作、日期计算、条件判断、几何计算等。
典型示例对照表
操作类型 | VB语法示例 | Python语法示例 |
---|---|---|
截取字符串 | Left([CODE],4) | !CODE![:4] |
替换字符 | Replace([NAME],“A”,“B”) | !NAME!.replace(‘A’,‘B’) |
类型转换 | CStr([ID]) | str(!ID!) |
保留小数 | Round([AREA],2) | round(!AREA!,2) |
取字段 ZLDWDM 的前 9 位 | left([ZLDWDM],9) | !ZLDWDM![0 :9] |
空值 | null | None |
替换操作 | Replace([ZLDWDM],“0”,“1”) | !ZLDWDM!.replace(“0”,“1”) |
面积字段保留一位小数 | round( [SHAPE_Area],1) | round (!SHAPE_Area!,1) |
获得字符串长度 | Len([DLMC]) | len(!DLMC!) |
日期更新 | CDate(“2018-8-31”) | datetime.datetime(2018,8,31) |
计算面积 | - | !shape.area! |
椭球面积计算 | - | !shape.geodesicArea! |
获得多部件要素 | - | !shape.partcount! |
条件判断 | - | “大图斑” if !SHAPE_Area! > 1000 else “小图斑” |
数学运算 | Round(([FieldA]/[FieldB])*100, 2) & “%” | - |
类型转换 | - | float(!TEXT_FIELD!.replace(“,”,“”)) |
几何计算 | - | 获取要素周长:!shape.length! |
随机数生成 | - | import random; random.randint(1,100) |
字段拼接 | [省名] & [市名] & [区名] | !省名! + “-” + !市名! + “-” + !区名! |
Python 语法更强大,适用于复杂计算。
通过 条件语句、正则表达式、几何操作,可以大幅提高数据处理效率!
人生怎样度过,没有所谓的标准答案,回头看,轻舟已过万重山