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一起交流,希望更多相同愛好者共同進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM