当前位置: 首页 > article >正文

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. 基本使用

🔹 使用步骤

  1. 打开 ArcGIS(ArcMap 或 ArcGIS Pro)。

  2. 右键点击属性表(Attribute Table),选择 “打开”。

  3. 选中要计算的字段,右键点击**“字段计算器”**。

  4. 选择计算语言(Python 或 VBScript)。

  5. 在计算框中输入表达式,并执行计算。

3. 典型应用案例

3.1 计算新字段值(数值计算)

场景:
假设我们有一个字段 Population,需要计算该值增加 10% 后的新值,并存入新字段 NewPopulation。

操作步骤

  1. 在属性表中添加一个新字段 NewPopulation(类型:Double)。

  2. 右键 NewPopulation → 选择 字段计算器。

  3. 选择 Python 语法,输入以下公式:

!Population! * 1.1

点击 OK,完成计算。

3.2 字符串拼接

场景:
在 City 和 Country 两个字段的基础上,创建 Full_Location 字段,合并成 “City, Country” 格式。

操作步骤

  1. 添加新字段 Full_Location(类型:Text)。

  2. 右键 Full_Location → 选择 字段计算器。

  3. 选择 Python 语法,输入:

!City! + ", " + !Country!

点击 OK,字段将填充 “New York, USA” 这样的值。

3.3 日期计算

场景:
计算 StartDate 字段的 30 天后的日期,并存入 EndDate 字段。

操作步骤

  1. 添加新字段 EndDate(类型:Date)。

  2. 右键 EndDate → 选择 字段计算器。

  3. 选择 Python 语法,输入:

import datetime
!StartDate! + datetime.timedelta(days=30)

点击 OK,完成计算。

3.4 条件计算(IF 语句)

场景:
创建 Category 字段,按 Population 大小分类:

  • 人口 ≥ 100 万:设为 “Large”

  • 50 万 ≤ 人口 < 100 万:设为 “Medium”

  • 人口 < 50 万:设为 “Small”

操作步骤

  1. 添加新字段 Category(类型:Text)。

  2. 右键 Category → 选择 字段计算器。

  3. 选择 Python 语法,输入:

def classify(pop):
    if pop >= 1000000:
        return "Large"
    elif pop >= 500000:
        return "Medium"
    else:
        return "Small"

classify(!Population!)

点击 OK,完成计算。

3.5 从坐标计算经纬度

场景:
计算点要素的经纬度,并存入 Longitude 和 Latitude 字段。

操作步骤

  1. 添加 Longitude 和 Latitude 字段(类型:Double)。

  2. 右键 Longitude → 选择 字段计算器。

  3. 选择 Python 语法,输入:

!SHAPE!.centroid.X
  1. 右键 Latitude → 选择 字段计算器。

  2. 选择 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]
空值nullNone
替换操作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 语法更强大,适用于复杂计算。

通过 条件语句、正则表达式、几何操作,可以大幅提高数据处理效率!

在这里插入图片描述


人生怎样度过,没有所谓的标准答案,回头看,轻舟已过万重山



http://www.kler.cn/a/612134.html

相关文章:

  • 机器学习核心评估指标解析:AUC-ROC、RMSE、轮廓系数与PR AUC详解
  • 深度解析 | Android 12系统级禁用SIM卡功能实现与Framework层定制
  • 城电科技 | 光伏植物墙 一款会发电发光自动浇水的植物墙
  • STM32八股【2】-----ARM架构
  • OpenHarmony子系统开发 - init启动引导组件(七)
  • 在Windows docker desktop 中安装Dify
  • Android Studio编译问题
  • 单元测试mock
  • SSE SseEmitter.completeWithError(e) 触发的处理逻辑
  • Android 地区选择器或者其他选择器
  • WHAT - 程序员英语之美式发音学习系列(二)
  • springboot使用阿里限流框架-sentinel
  • C++———— Vector
  • 深入解析 Spring IOC AOP:原理、源码与实战
  • UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击
  • 模拟电子技术-基本放大电路
  • ⑦(ACG-网络配置)
  • RCE学习情况
  • 使用 Node.js 和 163 邮箱发送邮件
  • 详解TCP的四次握手和三次挥手,以及里面每个阶段的状态