ArcGIS字段计算器的详细使用案例

news/2025/4/1 2:21:36/

文章目录

    • 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.areacalculate_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.ppmy.cn/news/1584026.html

相关文章

单端信号差分信号

单端信号和差分信号是电路中常见的两种信号传输方式&#xff0c;它们在具体的应用场景和特点上有着明显的区别。下面就来详细说明一下单端信号和差分信号的区别。 首先&#xff0c;单端信号是指信号通过一个信号线传输&#xff0c;通常一个信号线携带一个信号。这种传输方式适…

MySql修改全部表和字段编码

修改全部表 SELECT CONCAT(ALTER TABLE , TABLE_NAME, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;) AS sql_statements FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 数据库名称 返回的下面这种SQL,然后批量执行即可 ALTER TABLE gen_table CO…

Flutter项目之table页面实现

目录&#xff1a; 1、首页页面index.dart&#xff08;首页table页面&#xff09;searchbar.dart (搜索页面)common_swiper.dart (轮播图)index_navigation.dart (导航区域)index_navigatorItem_list.dart (数组构造) 2、房屋推荐index_recommond.dart (房屋推荐区域)IndexRecom…

Git 基础入门:从概念到实践的版本控制指南

一、Git 核心概念解析 1. 仓库&#xff08;Repository&#xff09; Git 的核心存储单元&#xff0c;包含项目所有文件及其完整历史记录。分为本地仓库&#xff08;开发者本地副本&#xff09;和远程仓库&#xff08;如 GitHub、GitLab 等云端存储&#xff09;&#xff0c;支持…

蓝桥杯嵌入式第十二届程序设计题

一、题目概览 设计一个小型停车计费系统 二、分模块实现 1、LCD void disp_proc() {if(view0){char text[30];sprintf(text," Data");LCD_DisplayStringLine(Line2,(uint8_t *)text);sprintf(text," CNBR:%d ",Cnum);LCD_DisplayStri…

SpringBoot中WebMvcConfigurer注册多个拦截器(addInterceptors)时的顺序问题(二)

在Spring MVC的拦截器&#xff08;Interceptor&#xff09;中&#xff0c;preHandle、postHandle 和 afterCompletion 这三个方法的执行顺序与整个请求-响应流程密切相关。以下是它们的详细执行顺序和触发时机&#xff1a; 1. 完整执行顺序流程图 客户端请求 → Interceptor1.…

TraeAI结合Proteus实现AI编程并仿真一个复杂工业物联网控制系统的开发(视频)

简介&#xff1a; 本视频聚焦基于国内首个 AI 原生集成开发环境&#xff08;AI IDE&#xff09;的 AI 编程实践。借助提示词&#xff0c;在 Proteus 环境下结合 ESP32 - S3&#xff0c;运用 MicroPython 进行状态机程序设计。展示如何通过在Trae CN人工智能集成编程开发环境&am…

蓝桥杯备考:BFS之马的遍历

这道题我们得知道象棋里的马能怎么走,应该是按日字走的 如图&#xff0c;就这么走&#xff0c;我们按基础的bfs遍历一下标记每个格子的最短的路径就行了&#xff0c;没到达的格子就设置为-1 #include <iostream> #include <queue> #include <cstring> using…