概述
在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。可以对所有记录或选中记录执行简单计算和高级计算。
计算可以通过Python或VBScript执行。建议使用Python,字段计算器的使用,其实主要就是Python基础语法的简单应用。
注意,在代码框里输入的符号都必须是在英文状态下输入。
字段计算器的使用方法
在任一要素类或者表上右击【打开属性表】,再找到要计算的字段上右击【字段计算器】,即可打开字段计算器。
打开窗口如上图。
1)选择脚本语言。默认是VB,需要手动改成Python。
2)要素或表的字段名,可以双击,会自己在(5)或者(6)的代码里自动生成字段名的代码。
3)python的一些简单函数和方法,同样可以双击自动生成。
4)如果勾选【显示代码块】,则会出现代码框(6)。默认是不勾选的,如果计算脚本比较复杂,需要多行,就勾选,在代码框(5)中定义方法,再在代码框(6)中进行引用。
5)主代码框。
6)引用方法的时候用到的代码框,默认是不开启的。
使用方法示例
1、四则运算。
简单的加减乘除运算,例如。
!数值01! * !数值02!
2、字符串叠加。
!字符串01! + !字符串02!
3、字符串切片。
如,如字符串的前3位:
!字符串01![:3]
类似的情况还有,取字符串的后3位:
!字符串01![-3:]
取字符串的2到4位。
!字符串01![1:4]
取关键字及前面或后面的文字,如,取“市”及前面的字。
注意,要查找的如果是中文,需要在前面加u,这是python2.*版本的问题。如果是ArcgisPro就不用加。
!字符串01! [:!字符串01!.find(u'市')+1]
如果要考虑“市”和“县”2个关键字,情况就稍微复杂一些。可以勾选【显示代码块】,写一个方法再引用。
def ss(a):
list_str = [u'市', u'县']
index = -1
for s in list_str:
if a.find(s) != -1:
index = a.find(s)
return a [:index+1]
4、英文转大写、小写、首字母大写等。
全部转大写:
!字符串01!.upper()
全部转小写:
!字符串01!.lower()
首字母大写,其余字母小写:
!字符串01!.capitalize()
将字符串中每个单词的首字母大写,其余字母小写,非字母后的第一个字母将转换为大写字母:
!字符串01!.capitalize()
5、字符串替换。
如:要把“县”替换成“市”,注意这里不是在新字段里生成结果,而是修改原字段,要小心。
!字符串01!.replace(u'县', u'市')
引申一下,如果要去取字符串中的空格,则可以如下计算:
!字符串01!.replace(' ', '')
6、在字符串的每个字符中插入一个指定字符。
如:要把【福州市】计算成【福_州_市】,字符也可以是空格。
'_'.join( !字符串01! )
7、保留2个小数。
如果要把一个小数类型的字段,保留2个小数,可以如下:
round(!Shape_Area!,2)
8、计算椭球面积。
注意,要计算的字段必须是float或是double类型。要素也不能没有定义坐标系。
!shape.geodesicarea!
9、提取中文、英文、数字、特殊符号。
这里有用到正则表达式。如,提取汉字:
import re
def ss(a):
va = re.findall(u'[u4e00-u9fa5]+',a)
if len(va) == 0:
result = ''
else:
result = ''
for i in range(0, len(va)):
result += va[i]
return result
如果是提取英文,则上面第3行代码替换成:
va = re.findall(r'[a-zA-Z]', a)
如果是提取数字:
va = re.findall(r'd', a)
特殊符号:
va = re.findall(r'W', a)
10、if-else语句的运用。
例如:通过建筑结构和层数来简单判断建筑质量。
def ss(a,b):
if a == u'混' and b>2:
return '质量较好'
elif a == u'混' and b<=2:
return '质量一般'
else:
return '质量较差'
11、计算要素的四至、部件数等。
# 东
!shape.extent.XMax!
# 西
!shape.extent.XMin!
# 北
!shape.extent.YMax!
# 南
!shape.extent.YMin!
# 部件数
!shape.PartCount!
# 是否是多部件
!shape.isMultipart!
12、字段值前面补齐0。
例如:在OID前补0,补到8位。注意要计算的字段必须是字符串类型。
(8-len(str(!数值01!))) * '0' + str( !数值01! )
13、度分秒转十进制度。
这个例子算是一个综合运用,代码较长。
def ss(a):
index1 = a.find(u'°')
index2 = a.find(u'′')
index3 = a.find(u'″')
degree = float(a[0:index1])
minutes = float(a[index1 + 1:index2])
seconds = float(a[index2 + 1:index3])
result = degree + minutes / 60 + seconds / 3600
return result
最后
以上就是害羞飞鸟为你收集整理的Arcgis小技巧【10】——字段计算器的简单用法和示例字段计算器的使用方法使用方法示例的全部内容,希望文章能够帮你解决Arcgis小技巧【10】——字段计算器的简单用法和示例字段计算器的使用方法使用方法示例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复