当前位置:首页>python>ArcGIS 字段计算器 python 全套公式手册

ArcGIS 字段计算器 python 全套公式手册

  • 2026-10-11 06:24:24
ArcGIS 字段计算器 python 全套公式手册

关注【GIS技术杂货铺】,开启GIS学习

获取系统、实用的 GIS 干货

【适用版本】

ArcMap 10.x/ ArcGIS Pro 2.x~3.x

包含内容:   1文本字符串处理;2数值计算;3数字 ↔ 文本互转;4条件判断 IF 多分支(地籍分类、地类编码最常用);5日期时间处理;6空间几何属性计算(面、线、点图层通用);7批量编码、自动编号函数;8高级拓展函数

一、文本字符串处理(最常用)

1. 基础拼接

① 多字段拼接

!NAME! +"-"+ !CODE!示例:NAME = 小区,CODE=001 → 小区 - 001
② 字段 + 固定文字
"地块_"+ !DLBM!
③ 空值容错拼接(避免 None 报错)
代码块:deflink(a,b):    if a isNone:        a = ""    if b isNone:        b = ""    return a + "_" + b使用:   link(!XZQMC!, !XZQDM!) 
2. 截取字符(切片)
语法:#字符串[起始索引:结束索引],从 0 开始!DLBM![0:2]# 取第3位到末尾!DLBM![2:]# 最后3位!DLBM![-3:]# 第2位单个字符!DLBM![1]
3. 大小写转换
# 全部大写!NAME!.upper()# 全部小写!NAME!.lower()# 首字母大写!NAME!.capitalize()
4. 去除空格
# 前后空格!TEXT!.strip()# 仅左边空格!TEXT!.lstrip()# 仅右边空格!TEXT!.rstrip()# 去除所有空格!TEXT!.replace(" ","")
5. 替换文字
# 替换指定字符!ADDRESS!.replace("村","社区")# 批量多替换(封装函数)defrepStr(s):if s isNone:return""    s = s.replace("0","一")    s = s.replace("1","二")    s = s.replace("2","三")return s表达式:repStr(!NUM!)
6. 字符串长度统计
# 文本字符长度len(!NAME!)# 空值容错长度defstrLen(s):if s isNone:return0returnlen(s)表达式:strLen(!NAME!)
7. 查找包含字符
# 返回字符所在索引,不存在返回-1!ADDRESS!.find("街道")# 判断是否包含(返回True/False)"街道"in !ADDRESS!
8. 分割字符串(拆分)
#代码块defsplitTxt(s,idx):if s isNone:return""    arr = s.split("-")iflen(arr)> idx:return arr[idx]else:return""#表达式(取分隔后第 1 段):splitTxt(!BH!,0)
二、数值计算(整型 / 浮点 / 面积长度换算)
1. 基础四则运算
# 加减乘除!MJ! +100!MJ! - !LJ!!KD! * !GD!!MJ! /10000# 取余!NUM! %10# 乘方(平方)!MJ! **2
2. 单位换算(国土测绘高频)
# 平方米 → 公顷(÷10000)!AREA! /10000# 平方米 → 亩(×0.0015)!AREA! *0.0015# 公顷 → 亩!HJ! *15# 米 → 千米!LENGTH! /1000
3. 四舍五入、取整
# 保留2位小数round(!MJ!,2)# 向上取整import mathmath.ceil(!MJ!)# 向下取整import mathmath.floor(!MJ!)# 取绝对值abs(!SJ!)
4. 空值容错计算(防止 None 运算报错)
#代码块defcalc(a,b):if a isNone:        a =0if b isNone:        b =0return a + b#表达式:calc(!JS!, !XS!)
5. 随机数生成
import random# 0~1随机小数defrandFloat():return random.random()# 1~100随机整数defrandInt():return random.randint(1,100)#表达式:randInt()
三、数字 ↔ 文本互转
1. 数字转文本
str(!MJ!)# 数字拼接固定字符str(!NUM!)+"号"
2. 文本转数字(空值容错)
#代码块deftoNum(s):if s isNoneor s =="":return0try:returnfloat(s)except:return0#表达式:toNum(!TXT_NUM!)
四、条件判断 IF 多分支(地籍分类、地类编码最常用)
1. 单条件二选一(三元表达式,无需预代码)
"耕地"if !DLBM! in["0101","0102"]else"非耕地"
2. 多分支判断(标准 def 函数,推荐)
# 示例 1:地类代码转地类名称defdlName(code):if code isNone:return"未知"if code.startswith("01"):return"耕地"elif code.startswith("02"):return"园地"elif code.startswith("03"):return"林地"elif code.startswith("04"):return"草地"elif code.startswith("10"):return"交通运输用地"elif code.startswith("11"):return"水域及水利设施用地"elif code.startswith("12"):return"其他土地"else:return"建设用地"#表达式:dlName(!DLBM!)#示例 2:面积分级defmjLevel(mj):if mj isNone:return"无数据"if mj <100:return"小型地块"elif mj <1000:return"中型地块"else:return"大型地块"#表达式:mjLevel(!MJ!)
3. 空值判断填充
!NAME! if !NAME! isnotNoneelse"无名称"
五、日期时间处理
1. 当前系统时间写入字段
#代码块import datetimedefnowTime():return datetime.datetime.now()#表达式:nowTime()
2. 日期格式化转文本
#代码块import datetimedefdateToTxt(dt):if dt isNone:return""return dt.strftime("%Y-%m-%d")#表达式:dateToTxt(!RKSJ!)
3. 获取年份 / 月份 / 日
# 提取年份!RKSJ!.year# 提取月份!RKSJ!.month# 提取星期!RKSJ!.weekday()
4. 日期差值(天数)
#代码块defdateDiff(d1,d2):if d1 isNoneor d2 isNone:return0return(d2 - d1).days#表达式:dateDiff(!STARTDATE!, !ENDDATE!)
六、空间几何属性计算(面、线、点图层通用)
注意:坐标系必须为投影坐标系(米单位),地理坐标系(经纬度)不能直接算面积长度
1. 面要素:面积
# 平方米!Shape_Area!# 公顷!Shape_Area! /10000
2. 线要素:长度
# 米!Shape_Length!# 千米!Shape_Length! /1000
3. 点要素:X、Y 坐标
# 横坐标X!Shape!.firstPoint.X# 纵坐标Y!Shape!.firstPoint.Y
4. 面中心点坐标
# 面中心点X!Shape!.centroid.X# 面中心点Y!Shape!.centroid.Y
5. 几何要素周长(面)
!Shape!.length
七、批量编码、自动编号函数
1. 连续自增编号
#代码块rec =0defautoNum():global rec    rec +=1return rec#表达式:autoNum()
2. 固定前缀 + 补零编号(001、002)
#代码块rec =0defautoBH():global rec    rec +=1# 3位补零return"DK"+str(rec).zfill(3)#表达式:autoBH()输出:DK001、DK002...
3. 按分类分组编号(同村 / 同地类重新从 1 开始)
#代码块group_dict ={}defgroupNo(groupField):global group_dictif groupField notin group_dict:        group_dict[groupField]=0    group_dict[groupField]+=1return group_dict[groupField]#表达式(按行政区分组编号):groupNo(!XZQDM!)
八、高级拓展函数(测绘 / 国土专用)
1. 地类编码提取一级类(前两位)
!DLBM![0:2]
2. 四至拼接(东、南、西、北字段合并)
#代码块defsiZhi(d,n,x,b):    lst =[]if d:lst.append("东:"+d)if n:lst.append("南:"+n)if x:lst.append("西:"+x)if b:lst.append("北:"+b)return"、".join(lst)if lst else"无"#表达式:siZhi(!D!,!N!,!X!,!B!)
3. 身份证截取出生日期
# 18位身份证取第7-14位生日!SFZ![6:14]
4. 判断字段是否为空(返回文字标记)
"空"if(!NAME! isNoneor !NAME! =="")else"有值"
5. 批量去除特殊符号
#代码块defcleanStr(s):if s isNone:return""    symbol =[",","。","、","!","?","#","@"]for sym in symbol:        s = s.replace(sym,"")return s.strip()#表达式:cleanStr(!DZ!)
九、常见报错避坑手册NoneType 无属性报错
:字段存在空值,必须用 def 函数做空值判断数字无法拼接字符串:数字先用 str () 转换切片索引越界:封装函数判断字符串长度再截取面积数值极小:图层是地理坐标系,投影转 CGCS2000 3 度带zfill 补零失效:先转字符串再 zfill中文乱码:ArcGIS 字段计算器默认 UTF-8,不要使用中文引号

⚠️重要提醒

  1. 可点赞收藏,需要时查阅
  2. 领到工具的朋友欢迎在评论区留言打卡,说说你最需要哪个功能;

📥领取方式

后台 / 评论区留言回复:【002】即可自动获取pdf/word文档下载链接

点点点,赞和在看都在这儿!

【关注GIS技术杂货铺,获取GIS干货】

最新文章

随机文章