在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。字段计算器可以对所有记录或选中记录执行简单计算和高级计算。 计算可以通过【Python】或【VBScript】执行。建议使用【Python】,字段计算器的使用,其实主要就是【Python】基础语法的简单应用。 注意,在代码框里输入的符号都必须是在英文状态下输入。 编辑 字段计算器的使用方法在任一要素类或者表上右击【打开属性表】,再找到要计算的字段上右击【字段计算器】,即可打开字段计算器。 编辑 打开窗口如上图。 1)选择脚本语言。默认是【VB】,需要手动改成【Python】。 2)要素或表的字段名,可以双击,会自己在(5)或者(6)的代码里自动生成字段名的代码。 3)python的一些简单函数和方法,同样可以双击自动生成。 4)如果勾选【显示代码块】,则会出现代码框(6)。默认是不勾选的,如果计算脚本比较复杂,需要多行,就勾选,在代码框(5)中定义方法,再在代码框(6)中进行引用。 5)主代码框。 6)引用方法的时候用到的代码框,默认是不开启的。 编辑 使用方法示例1、四则运算简单的加减乘除运算,例如: !数值01! * !数值02! 编辑 2、字符串叠加
编辑 3、字符串切片如字符串的前3位: !字符串01![:3] 编辑 类似的情况还有,取字符串的后3位:
取字符串的2到4位。 !字符串01![1:4] 取关键字及前面或后面的文字,如,取“市”及前面的字。 注意,要查找的如果是中文,需要在前面加u,这是python2.*版本的问题。如果是ArcgisPro就不用加。
编辑 如果要考虑“市”和“县”2个关键字,情况就稍微复杂一些。可以勾选【显示代码块】,写一个方法再引用。
编辑 4、英文转大写、小写、首字母大写等全部转大写: !字符串01!.upper() 全部转小写:
首字母大写,其余字母小写: !字符串01!.capitalize() 编辑 5、字符串替换如:要把“县”替换成“市”,注意这里不是在新字段里生成结果,而是修改原字段,要小心。
引申一下,如果要去取字符串中的空格,则可以如下计算: !字符串01!.replace(' ', '') 6、在字符串的每个字符中插入一个指定字符如:要把【福州市】计算成【福_州_市】,字符也可以是空格。 '_'.join( !字符串01! ) 编辑 7、保留2个小数如果要把一个小数类型的字段,保留2个小数,可以如下: round(!Shape_Area!,2) 编辑 8、计算椭球面积注意,要计算的字段必须是float或是double类型。要素也不能没有定义坐标系。
9、提取中文、英文、数字、特殊符号这里有用到正则表达式。如,提取汉字:
编辑 如果是提取英文,则上面第3行代码替换成: va = re.findall(r'[a-zA-Z]', 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位。注意要计算的字段必须是字符串类型。
编辑 13、度分秒转十进制度这个例子算是一个综合运用,代码较长。
编辑 |
|