Arcgis+Python实现矢量图层批量字段添加

ArcGIS+Python实现矢量图层批量字段添加

本方法解决按规定标准批量添加相应字段

一、代码实现设想

只要通过添加原文件以及该文件对应的属性结构表,就可以自动新建数据库标准字段。

二、问题分析

以行政区为例,行政区属性结构描述表:

序号

字段名称

字段代码

字段类型

字段长度

小数位数

值域

约束条件

备注

1

标识码

BSM

Int

10

 

>0

M

 

2

要素代码

YSDM

Char

10

 

见表1

M

 

3

行政区代码

XZQDM

Char

12

 

见GB/T 2260

M

见本表注1

4

行政区名称

XZQMC

Char

100

 

非空

M

 

5

行政区面积

XZQMJ

Float

15

2

>0

C

见本表注2

该图层要添加5个字段,主要设置参数有字段代码、字段类型、字段长度,如果是浮点型,那么还会有一个小数位数。
接下来就是分析arcgis的AddField函数及其参数(工具帮助查看)
AddField_management(in_table,field_name,field_type,{field_precision},{field_scale}, {field_length},{field_alias},{field_is_nullable},{field_is_required},{field_domain})
可看到该方法有三个必须参数(in_table, field_name, field_type)及七个对应默认参数,我们用到的主要是五个参数(in_table, field_name, field_type,field_precision, field_scale),各个参数对应的详细介绍参考Arcgis工具帮助:

观察调整我们需要的字段及属性,如int改为LONG,char改为TEXT,float改为FLOAT,调整后如下表:

 

(注:此表最好不要有空值,用NULL替代空缺)

三、代码实现

 

 
# -*- coding:utf-8 -*- 
import sys 
reload(sys) 
sys.setdefaultencoding("utf-8")
# 导入读取excel的模块(在cmd中用pip install xlrd安装对应模块)
import xlrd 
import xlwt
# 导入arcgis工具模块arcpy
import arcpy 
# 设置参数(pthon脚本导入arcgis中的两个参数)
in_table = arcpy.GetParameterAsText(0)  #原文件位置
xlspath = arcpy.GetParameterAsText(1)  #标准化后属性结构表excel格式路径
# 定义数据,打开excel
data = xlrd.open_workbook(xlspath)
# 取excel第一个sheet
table = data.sheets()[0]
# for循环遍历每一行
for i in range(1,table.nrows): 
    row_content = []  # 初始化一个列表,用于后面存储读取的excel值
    for j in range(table.ncols):  # 遍历excel每行中的各个值
        ctype = table.cell(i, j).ctype  # 定义每个值类型用于下面判断
        cell = table.cell_value(i, j)  # 定义每个值用于下面判断
        if ctype == 1: 
            row_content.append(cell)   # 如果值类型为字符型,将值加入让面的列表
        if ctype ==2 and cell%1 == 0:  
            cell = int(cell)  # 如果值类型为浮点型,且除以1余数为0,转为整数
            row_content.append(cell)  # 加入列表
           
# 将参数赋值给AddField工具所需的必要参数
    field_name = str(row_content[1])  # 字段名:该行的第二个(列表索引从0开始)
    field_type = str(row_content[2])  # 字段类型:该行第三个
    fieldalias = str(row_content[5])
    if field_type == 'FLOAT':  # 如果字段类型为FLOAT,执行下面代码,其他elif同理
        fieldprecision = row_content[3]  # 字段长度,该行第4个
        fieldscale = row_content[4]  # 小数位数,该行第五个
        arcpy.AddField_management(in_table, field_name, field_type, field_precision = fieldprecision, field_scale = fieldscale, field_alias = fieldalias) 
    elif field_type == 'TEXT': 
        fieldlength = row_content[3] 
        arcpy.AddField_management(in_table, field_name, field_type, field_length = fieldlength, field_alias = fieldalias) 
    elif field_type == 'LONG': 
        fieldprecision = row_content[3] 
        arcpy.AddField_management(in_table, field_name, field_type, field_precision = fieldprecision, field_alias = fieldalias)

 

四:脚本工具展示


在arcgis中导入代码并配置好脚本参数后,工具效果如下:

 


工具运行,目标文件字段如下所示:

 

只要if判断的所有条件包含所有建库字段标准,那么所有文件添加字段仅要点几下即可完成,大大提升了工作效率。

说明:该脚本针对arcgis10版本,运用Python的arcpy模块进行批量添加字段。

 

注:文中一些方法细节,如读取excel文件模块安装及读取excel方法、python脚本导入arcgis并设置参数等,没作出详细介绍,网络上有很多方法,比如:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html关于python读取excel的介绍,以及http://www.cnblogs.com/liweis/p/4252596.html关于arcgis添加python脚本方法,作者参考以上文章完善该过程。读者如有兴趣,亦可联系QQ:961478034一起交流,希望更多相同爱好者共同进步。

posted @ 2017-10-30 16:49  小学生老铁  阅读(4005)  评论(1编辑  收藏  举报