赞
踩
当图斑发生破斑后需要用到标识码加顺序码已确保唯一性。有时需要在一个区县、一个乡镇或者一个行政村内重新编号,此时需要截取BSM的前几位数字加上顺序码来编号。
使用Python代码来搞定,在字段计算窗口左下角有帮助,能直接找到ArcGIS自带的加顺序码的基础代码,在此基础上修改即可。
以下部分是主体代码:
- rec=0 #定义成整数
- out="" #定义成字符串
- def autoIncrement(id):
- global rec
- global out
- pStart = 1 #adjust start value, if req'd
- pInterval = 1 #adjust interval value, if req'd
- if (rec == 0):
- rec = pStart
- new_rec= str(rec).zfill(3) #整数转字符串并以0补充满三位数。
- out = id + new_rec
- else:
- rec = rec + pInterval
- new_rec= str(rec).zfill(3) #整数转字符串并以0补充满三位数。
- out = id + new_rec
- return out
.zfill(3)是python自带的以0来补位的函数,3表示3位数,不足的以0来填补,该函数只对字符串类型的值有效,故需要对数值类型的参数进行转换。
以下部分是调用函数:
autoIncrement(!BSM![0:9])
感叹号那部分是直接双击字段添加进来的,[0:9]表示提取该字符串的前9位数。
字符串提取知识点:
- str = ‘0123456789’
- print str[0:3] #截取第一位到第三位的字符
- print str[:] #截取字符串的全部字符
- print str[6:] #截取第七个字符到结尾
- print str[:-3] #截取从头开始到倒数第三个字符之前
- print str[2] #截取第三个字符
- print str[-1] #截取倒数第一个字符
- print str[::-1] #创造一个与原字符串顺序相反的字符串
- print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
- print str[-3:] #截取倒数第三位到结尾
- print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
结果:
- 0123456789
- 0123456
- 9
- 78
- 96
有时候,我们在编号时需要按照图层中某一字段属性类型对要素进行编号。我们需要按每个区县、乡镇、行政村都从0开始编号。同样可以在字段计算器中采取Python脚本的方式进行实现。我们定义一个isDuplicateIndex(inValue)函数,然后调用即可,同时让编号按3位数对齐。
- UniqueDict = {} #定义字典
-
- def isDuplicateIndex(inValue):
- UniqueDict.setdefault(inValue,0)
- UniqueDict[inValue] += 1
- string=str(UniqueDict[inValue]).zfill(3) #强制转字符串并补位。
- return string
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。