ArcGIS提取字段一部分内容加上顺序码的方法

问题

当图斑发生破斑后需要用到标识码加顺序码已确保唯一性。有时需要在一个区县、一个乡镇或者一个行政村内重新编号,此时需要截取BSM的前几位数字加上顺序码来编号。

一、解决办法

使用Python代码来搞定,在字段计算窗口左下角有帮助,能直接找到ArcGIS自带的加顺序码的基础代码,在此基础上修改即可。

ArcGIS提取字段一部分内容加上顺序码的方法_第1张图片

ArcGIS提取字段一部分内容加上顺序码的方法_第2张图片

 

二、实例代码一

以下部分是主体代码:

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

 

你可能感兴趣的:(ArcGIS相关,arcgis,python,顺序码,分组)