当前位置:首页>python>ArcGIS字段计算器封神操作:用Python/ VBScript让属性表自己干活

ArcGIS字段计算器封神操作:用Python/ VBScript让属性表自己干活

  • 2026-08-26 07:27:20
ArcGIS字段计算器封神操作:用Python/ VBScript让属性表自己干活

🚀 ArcGIS字段计算器封神操作:用Python/ VBScript让属性表自己干活

你还在ArcGIS里手动一个个改属性表吗?今天这篇,直接把字段计算器从“小工具”变成“生产力神器”,学会这些技巧,别人3小时的活你10分钟搞定✨

🔍 为什么说它是ArcGIS隐藏杀器?

很多人只知道用它算个面积、求和,但其实字段计算器能通过Python和VBScript实现:

- 批量字符串清洗:一键把“上海市”替换成“上海”,比Excel还快

- 智能分类赋值:根据人口密度自动标注“高/中/低”风险区

- 几何属性提取:直接导出每个要素的WKT坐标和外接矩形

- 动态时间戳:给每个记录自动打上计算时的日期和时间

🛠️ 语法基础:先搞懂这3件事不踩坑

Python 核心规则

1. 字段用 ! 包裹: !STATE_NAME! ,这是和VBScript最直观的区别

2. 缩进是语法:代码块必须用2或4个空格对齐,错一个位置就报错

3. 中文加 u 前缀:处理中文时写  u"中国" ,避免编码乱码

VBScript 核心规则

1. 字段用 [] 包裹: [POP90_SQMI] ,兼容老版本ArcGIS项目

2. 变量无类型:不用写  Dim x As String ,直接  Dim x  就行

3. 字符串用 & 连接: [Field1] & "-" & [Field2] ,别用 + 

🎯 高频场景:9个实战案例直接抄

1. 字符串魔法:从脏数据到标准化

需求 Python 表达式 VBScript 表达式 

首字母大写,其余小写  !PERSON_NAME!.title()   UCase(Left([PERSON_NAME],1)) & LCase(Right([PERSON_NAME],Len([PERSON_NAME])-1))  

移除首尾空格  !ADDRESS!.strip()   Trim([ADDRESS])  

替换所有“市”为空  !CITY!.replace("市", "")   Replace([CITY], "市", "")  

取最后3个字符  !CODE![-3:]   Right([CODE], 3)  

拼接并格式化  "%s-%s" % (!ID!, !TYPE!)   [ID] & "-" & [TYPE]  

2. 数学计算:不止是加减乘除

- 人口密度(保留2位小数):

python  

round(float(!POPULATION!) / !AREA!, 2)

- 球体体积(带公式注释):

python  

# 4/3πr³ 计算球体体积

4.0 / 3 * math.pi * !RADIUS! ** 3

- 米转英亩(单位转换):

python  

!shape.area! * 0.000247105  # 1平方米=0.000247105英亩

3. 几何黑科技:直接挖要素的“隐私”

- 获取要素中心点坐标:

python  

!shape.centroid.X!  # 中心点X坐标

!shape.centroid.Y!  # 中心点Y坐标

- 计算最小外接矩形:

python  

!shape.extent.XMin!  # 最小X

!shape.extent.YMax!  # 最大Y

- 导出WKT坐标串:

python  

!shape.wkt!  # 直接生成可复制的坐标文本

4. 逻辑判断:让属性表自己做决策

Python版:按产量分级

python  

# 代码块

def YieldClass(value):

    if value < 10:

        return "低产井"

    elif 10 <= value < 50:

        return "中产井"

    else:

        return "高产井"

# 表达式

YieldClass(!WELL_YIELD!)

VBScript版:按人口密度标注

vb  

Dim level

If [POP_DENSITY] < 50 Then

    level = "低密度"

ElseIf [POP_DENSITY] < 200 Then

    level = "中密度"

Else

    level = "高密度"

End If

5. 时间与随机值:给数据加动态属性

- 当前日期(格式:2026-02-01):

python  

time.strftime("%Y-%m-%d")

- 当前时间戳(格式:2026-02-01 09:30):

python  

time.strftime("%Y-%m-%d %H:%M")

- 生成0-100随机整数:

python  

import random

def RandInt():

    return random.randint(0, 100)

最新文章

随机文章