Arcgis小技巧【10】 |
您所在的位置:网站首页 › 车载计亩器怎么使用 › Arcgis小技巧【10】 |
欢迎关注同名微信公众号,更多文章推送: PS:由于更新内容较多,新写了一篇2.0,可移步参观: Arcgis小技巧【15】——字段计算器的简单用法和示例2.0 在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。可以对所有记录或选中记录执行简单计算和高级计算。 计算可以通过Python或VBScript执行。建议使用Python,字段计算器的使用,其实主要就是Python基础语法的简单应用。 注意,在代码框里输入的符号都必须是在英文状态下输入。 在任一要素类或者表上右击【打开属性表】,再找到要计算的字段上右击【字段计算器】,即可打开字段计算器。 打开窗口如上图。 1)选择脚本语言。默认是VB,需要手动改成Python。 2)要素或表的字段名,可以双击,会自己在(5)或者(6)的代码里自动生成字段名的代码。 3)python的一些简单函数和方法,同样可以双击自动生成。 4)如果勾选【显示代码块】,则会出现代码框(6)。默认是不勾选的,如果计算脚本比较复杂,需要多行,就勾选,在代码框(5)中定义方法,再在代码框(6)中进行引用。 5)主代码框。 6)引用方法的时候用到的代码框,默认是不开启的。 简单的加减乘除运算,例如。 !数值01! * !数值02! 如,如字符串的前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]全部转大写: !字符串01!.upper()全部转小写: !字符串01!.lower()首字母大写,其余字母小写: !字符串01!.capitalize() 如:要把“县”替换成“市”,注意这里不是在新字段里生成结果,而是修改原字段,要小心。 !字符串01!.replace(u'县', u'市')引申一下,如果要去取字符串中的空格,则可以如下计算: !字符串01!.replace(' ', '') 6、在字符串的每个字符中插入一个指定字符。如:要把【福州市】计算成【福_州_市】,字符也可以是空格。 '_'.join( !字符串01! )如果要把一个小数类型的字段,保留2个小数,可以如下: round(!Shape_Area!,2)注意,要计算的字段必须是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 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |