arcgis 字段计算器 条件赋值_ArcGIS字段计算器(Python篇)——字段查重等问题汇总...

65adb045fc106b1e8a5aa5e039ef8f9d.gif

作为近年Esri支持得最好的脚本语言,Python能够在字段计算器中解决不少简单的属性问题(如编号、截位等)。ArcPy则是直接能够进行ArcGis二次开发。系统性文章目标太大,目前我会把之前问的字段计算器问题以及ArcPy问题汇总。

另注:python是对代码缩进要求很严格的编程语言。本博客统一采用4个空格作为缩进。

python很少使用分号,逗号一定使用英文半角。(同学们请注意)

问题一:多字段的最大、最小值

python的基础函数中有求数值的求和、最大、最小值函数,所以我们也可以直接使用的。

举例:假设有三个字段,NumA,NumB,NumC三个字段都是数值型的字段,我们需要求三个字段的最大值,并写入到MaxNum字段中。

只需在表达式中输入 max([NumA,NumB,NumC])即可。

最大值函数:max([NumA,NumB,NumC])

最小值函数:min([NumA,NumB,NumC])

多字段求和函数:sum([NumA,NumB,NumC])

 最大值使用截图如下:

63a022dd4009ef85574debe7ebc45676.png

问题二:流水号编码

举例1:举例描述:已有宗地图层,包含字段“地籍子区”、“特征码”、“宗地编码”按照 宗地统一编码 规则给图层内的宗地编码。

宗地统一编码规则:宗地编码 = "地籍子区" + "特征码" + 5位自然数流水号。

原始属性表截图:

059e32ad25b2f7e59757837c3aaa26e6.png

字段计算器使用截图:

9e7d68b5e90c4aafa12fce0f907ba1f1.png

处理结果截图:

284359a0c0d2af91dc15c8f283f8a41a.png

代码块如下:

dict={}

def funZdbm(fldVal,tzm):

    if fldVal == None:

        return None

    if tzm == None:

        return None

    temp = 0

    key = fldVal + tzm

    if dict.has_key(key) == True:

        temp = dict[key]

        strVal = key + str(temp+1).zfill(5)

        dict[key] = temp+1

        return strVal

    else :

        dict[key] = 1

        strVal = key + str(temp+1).zfill(5)

        return strVal

举例2:描述:有文本型字段流水号,其中有两行记录已编号,需要续编其他记录,并在前面补零。保证流水号为6位数

原始属性表截图:

debc1cfeffa6099a380636b2334cd74b.png

字段计算器使用截图:

db42369732a5d27e1e7a5e306a376e49.png

处理结果截图:

b41ac7efd09a9dc51efb26fa3f704648.png

 代码块:

max = 504

def funLsh(fldVal): 

    global max

    fldVal = fldVal.strip()

    if fldVal == None or fldVal == "":

        max = max + 1

        return str(max).zfill(6)

    else:

        return fldVal

问题三:文本型字段查重

描述:检查宗地图层,将“宗地代码”字段有重复记录的内容标记出来,并将检查结果赋给"检查结果"字段。

原始属性表截图:

87e30f3c315ddbd8e93f5147ecf924a7.png

字段计算器使用截图:

f47bc67b443150f7977e6085fd219fb9.png

处理结果截图:

019d6cb53f26479dd2434e10a78900b5.png

代码块:(此代码在数据量太大的情况下慎用,估计会比较卡,预计十万以内还是可以承受)

dict={}

def adjRepeat(fldVal,id):

    if fldVal == None:

        return None

    temp = 0

    strVal = ""

    if dict.has_key(fldVal) == True:

        temp = dict[fldVal]

        strVal = "宗地代码字段和FID为" + str(temp) + "的图元重复"

        return strVal

    else :

        dict[fldVal] = id

        return ""

文章转载于CSDN,作者蓝胖子- chinagj0 7 版权归原作者所有,如有侵权请告知删除 - END -

ArcGIS应用分析—学校选址

使用Python制作ArcGIS插件基础篇——工具介绍ArcGIS中不可不知的Python技术(PPT可下载)

使用Python脚本将Excel表批量赋值到ArcGIS属性表

7.72GB ARCGIS  ERDAS  ENVI干货教程网盘下载

a38208d3b652d1489dd99771a7c69630.png


版权声明:本文为weixin_28889007原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。