Python高效办公|ArcGIS批量编码

2019-06-15 18:02:13 浏览数 (1)

01 前言

首先给各位读者道个歉,公众号停更了半个月。不过,罗罗攀满血复活,从这周起,开始重新更新,每周一、三、五早上9点20,不见不散。

其次,感谢故人兄对于本篇文章的技术指导。

02 问题描述

在工作项目中,对于数据都要进行唯一编码,有的时候是录入一行数据就进行一次编码,但这种方法效率太慢。下图是项目中编码的要求:

  • 不同土地利用类型需要不同缩写,例如,居民点对应JM。
  • 编码为4位数,而且不同类型都是从0001开始。
  • 编码在ArcGIS中完成,要么使用VB,要么使用Python。
03 解决思路

首先,说一下解决的思路:

① 对于土地利用类型的缩写,有两种方法,一是整理成索引表格,到时候利用代码进行索引,第二种,自己定义一个字典进行索引。

考虑到类型不多,加上要共享给同事,选择在代码中定义字典(这样就不用共享表格,比较方便和稳定)。

② 对于按不同土地类型进行顺序编码问题,这里可以先定义一个空字典,土地利用类型为key,值计数为value,最后格式化数据即可。

04 解决代码

以下为解决的代码:

代码语言:javascript复制
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中使用字段计算器,进行如下设置就行了。

今天的分享就到这了,又是充实(摸鱼)的一天。

0 人点赞