01 前言
首先给各位读者道个歉,公众号停更了半个月。不过,罗罗攀满血复活,从这周起,开始重新更新,每周一、三、五早上9点20,不见不散。
其次,感谢故人兄对于本篇文章的技术指导。
02 问题描述
在工作项目中,对于数据都要进行唯一编码,有的时候是录入一行数据就进行一次编码,但这种方法效率太慢。下图是项目中编码的要求:
- 不同土地利用类型需要不同缩写,例如,居民点对应JM。
- 编码为4位数,而且不同类型都是从0001开始。
- 编码在ArcGIS中完成,要么使用VB,要么使用Python。
03 解决思路
首先,说一下解决的思路:
① 对于土地利用类型的缩写,有两种方法,一是整理成索引表格,到时候利用代码进行索引,第二种,自己定义一个字典进行索引。
考虑到类型不多,加上要共享给同事,选择在代码中定义字典(这样就不用共享表格,比较方便和稳定)。
② 对于按不同土地类型进行顺序编码问题,这里可以先定义一个空字典,土地利用类型为key,值计数为value,最后格式化数据即可。
04 解决代码
以下为解决的代码:
from collections import defaultdict
index_dict = {
u'采石场':'CS',
u'工矿用地':'GK',
u'能源设施':'NY',
u'交通设施':'JT',
u'旅游设施':'LY',
u'养殖场':'YZ',
u'居民点':'JM',
u'农业用地':'NT',
u'其他人工设施':'QT',
u'道路':'DL'
}
m = defaultdict(int)
def code(x):
m[x] += 1
return index_dict[x] + '-' + "{0:04d}".format(m[x])
code( !一级类型! )
这里特别注意 defaultdict 的方法,读者可以自行学习。
在ArcGIS中使用字段计算器,进行如下设置就行了。
今天的分享就到这了,又是充实(摸鱼)的一天。