【ArcGIS之AI写Python代码】(3)批量添加字段

这篇具有很好参考价值的文章主要介绍了【ArcGIS之AI写Python代码】(3)批量添加字段。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

        我们知道在ARCGIS中常用的添加字段方式有一下几种:

        1、使用属性表工具:打开ArcMap,选择要添加字段的图层,右键点击图层,选择属性表,在弹出的对话框中找到表选项,点击添加字段按钮,输入要添加的字段名称、数据类型等信息,点击确定按钮即可。

        2、使用添加字段工具:打开ArcMap,在ArcToolbox中选择Data Management Tools -> Fields -> Add Field 工具,输入要添加字段的图层、输入要添加的字段名称、数据类型等信息,点击确定按钮即可。

        3、使用Python脚本添加字段:使用ARCGIS的Pytho库,可以通过AddField_management本来添加字段。

        在我们实际工作中,经常需要建库,会涉及大量的字段,因此,我们就希望能批量的添加字段。当然ARCGIS也提供了批量添加字段的功能,通过在ArcToolbox中选择Data Management Tools -> Fields -> Add Field 工具 ->右键批处理来添加字段,但是也是需要大量的输入,非常不方便。那么,我们能不能根据设定好的Excel模板,来批量添加字段呢?答案是:当然!

二、基本要求

        我们经常会看到一些数据库标准,规定的一些图层的字段如下:

字段Excel模板

序号

字段名称

字段代码

字段类型

字段长度

小数位数

值域

约束条件

备注

1

标识码

BSM

LONG

10

 

>0

M

 

2

要素代码

YSDM

TEXT

20

 

 

M

 

3

地类编码

DLBM

TEXT

4

 

 

M

 

4

地类名称

DLMC

TEXT

30

 

 

M

 

5

图斑面积

TBMJ

DOUBLE

16

4

 

M

 

6

图斑地类面积

TBDLMJ

FLOAT

16

2

 

M

 

7

编号

TBBH

SHORT

4

 

 

M

 

8

备注

BZ

STRING

50

 

 

M

 

        我们希望能根据以上模板,批量对图层新建字段。

三、实现过程

        我们把我们的想法告诉AI软件,让他帮我们写一段代码。但是往往信息专递与理解是有一些偏差的,AI提供的代码是很好的思路,这也是我们最想要的,将代码综合起来就可以得到我们想要的结果。

(1)列如,当我们输入:

用Python写一个完整的ARCGIS脚本代码,读取Excel中Sheet1的内容,对shp用AddField_management新建字段。Excel中从第二行开始,C列存储field_name,D列存储field_type,E列存储field_length ,F列存储field_scale,B列存储field_alias 并返回成功信息

我们得到以下代码:

import arcpy
import xlrd

# 定义Excel文件路径
excel_path = r"path_to_excel_file.xlsx"
# 定义Sheet名称
sheet_name = "Sheet1"

def add_fields_from_excel(shp_path, excel_path, sheet_name):
    # 打开Excel文件并获取工作表
    workbook = xlrd.open_workbook(excel_path)
    sheet = workbook.sheet_by_name(sheet_name)
    # 获取字段信息的起始行数
    start_row = 1
    # 循环读取Excel中的字段信息并添加到shp文件
    for row in range(start_row, sheet.nrows):
        field_name = sheet.cell_value(row, 2)  # C列存储field_name
        field_type = sheet.cell_value(row, 3)  # D列存储field_type
        field_length = int(sheet.cell_value(row, 4))  # E列存储field_length
        field_scale = int(sheet.cell_value(row, 5))  # F列存储field_scale
        field_alias = sheet.cell_value(row, 1)  # B列存储field_alias
       
        # 使用AddField_management函数添加新字段
        arcpy.AddField_management(shp_path, field_name, field_type, field_precision=field_length, field_scale=field_scale,
                                  field_alias=field_alias)
    return "字段添加成功!"

# 可以根据自己的实际情况修改以下参数
shp_file_path = r"path_to_shapefile.shp"
result = add_fields_from_excel(shp_file_path, excel_path, sheet_name)
print(result)

 

        代码基本思路还算清晰,雏形已经出来了。

(2)列如,当我们输入:

Excel表格的Sheet1中,第一行为标题行,第二行开始,依次有field_alias在B列,field_name在C列,field_type在D列,field_length在E列,field_scale在F列, 用Python写一个完整的ARCGIS脚本代码,读取Excel中Sheet1的内容,对shp用AddField_management新建字段。执行成功后打印提示信息

我们得到以下代码:

import arcpy
import xlrd

# 设置 Excel 文件路径和 Sheet 名称
excel_file = r"C:\path\to\your\excel_file.xlsx"
sheet_name = "Sheet1"

# 打开 Excel 文件
workbook = xlrd.open_workbook(excel_file)
sheet = workbook.sheet_by_name(sheet_name)

# 获取 Sheet 中有效数据的行数
num_rows = sheet.nrows

# 遍历每一行数据,从第二行开始
for row_index in range(1, num_rows):
    field_alias = sheet.cell(rowx=row_index, colx=1).value
    field_name = sheet.cell(rowx=row_index, colx=2).value
    field_type = sheet.cell(rowx=row_index, colx=3).value
    field_length = sheet.cell(rowx=row_index, colx=4).value
    field_scale = sheet.cell(rowx=row_index, colx=5).value

    # 添加新字段
    arcpy.AddField_management("path/to/your/shp", field_name, field_type, field_length, field_scale, field_alias)

# 打印提示信息
print("新字段已成功添加到 shp 文件!")

        跟前边的一样,思路也比较清晰,这段代码当遇到DOUBLE就出问题了。

(3)列如,当我们输入:

用Python写一个完整的arcgis脚本代码,对shapeflie通过读取Excel表格的sheet1来批量新增字段,添加字段完成后提示完成信息。其中,Excel表第一行为标题行,从第二行开始:B列代表field_alias;C列代表field_name;D列代表field_type;当D列为TEXT、STRING、GUID时E列代表field_length,当D列为SHORT、LONG、FLOAT、DOUBLE时E列代表field_precision;当D列为FLOAT、DOUBLE时F列代表field_scale。

我们得到以下代码:

import arcpy
import xlrd

# 设置输入的Shapefile路径
shapefile_path = r"path_to_shapefile\shapefile.shp"

# 设置输入的Excel表格路径
excel_path = r"path_to_excel\excel_file.xlsx"

# 设置Sheet的名称或索引,默认为第一个Sheet
sheet_name = "Sheet1"

# 打开Excel表格
excel_book = xlrd.open_workbook(excel_path)

# 获取指定的Sheet
sheet = excel_book.sheet_by_name(sheet_name)

# 获取Sheet的行数和列数
num_rows = sheet.nrows
num_cols = sheet.ncols

# 遍历从第二行开始的每一行数据
for row in range(1, num_rows):
    # 获取字段别名、字段名、字段类型、字段长度等信息
    field_alias = str(sheet.cell(row, 1).value)
    field_name = str(sheet.cell(row, 2).value)
    field_type = str(sheet.cell(row, 3).value)
    field_length = sheet.cell(row, 4).value if sheet.cell(row, 4).value else None
    field_precision = sheet.cell(row, 4).value if sheet.cell(row, 4).value else None
    field_scale = sheet.cell(row, 5).value if sheet.cell(row, 5).value else None
   
    # 根据字段类型创建字段对象
    if field_type in ["TEXT", "STRING", "GUID"]:
        field = arcpy.Field(field_name, field_type, field_alias, field_length)
    elif field_type in ["SHORT", "LONG", "FLOAT", "DOUBLE"]:
        field = arcpy.Field(field_name, field_type, field_alias, field_precision, field_scale)

    # 打开编辑会话
    edit = arcpy.da.Editor(arcpy.env.workspace)
    edit.startEditing(False, True)
    edit.startOperation()

    # 批量添加字段
    arcpy.AddField_management(shapefile_path, field_name, field_type, field_precision, field_scale,field_length, field_alias)

    # 保存编辑结果
    edit.stopOperation()
    edit.stopEditing(True)

# 提示完成信息
print("批量添加字段完成!")

        上边的代码也是没能覆盖所有类型,还是需要进一步修改。

四、结果

AI提供的这几个代码,给了我们很好的思路,读取Excel表的数据,遍历每一行数据,从第二行开始,这也是我们想要的,所以,综合起来,我们对代码进行了修改完善,得到我们想要的结果。

完整代码:

# -*- coding: UTF-8 -*-
import arcpy
import xlrd

# 设置输入的Shapefile路径
shapefile_path = r"path_to_shapefile\shapefile.shp"

# 设置输入的Excel表格路径
excel_path = r"path_to_excel\excel_file.xlsx"

# 设置Sheet的名称或索引,默认为第一个Sheet
sheet_name = "Sheet1"

# 打开Excel表格
excel_book = xlrd.open_workbook(excel_path)
# 获取指定的Sheet
sheet = excel_book.sheet_by_name(sheet_name)

# 获取Sheet的行数和列数
num_rows = sheet.nrows
num_cols = sheet.ncols

# 遍历从第二行开始的每一行数据
for row in range(1, num_rows):
    # 获取字段别名、字段名、字段类型、字段长度等信息
    field_alias = unicode(sheet.cell(row, 1).value).encode('utf-8')
    field_name = unicode(sheet.cell(row, 2).value).encode('utf-8')
    field_type = unicode(sheet.cell(row, 3).value).encode('utf-8')
    field_length = sheet.cell(row, 4).value if sheet.cell(row, 4).value else None
    field_precision = sheet.cell(row, 4).value if sheet.cell(row, 4).value else None
    field_scale = sheet.cell(row, 5).value if sheet.cell(row, 5).value else None   

    # 根据字段类型创建字段对象
    if field_type in ["TEXT", "STRING", "GUID"]:
        arcpy.AddField_management(shapefile_path,field_name, field_type,"" ,"", field_length,field_alias)
    elif field_type in ["SHORT", "LONG"]:
        arcpy.AddField_management(shapefile_path,field_name, field_type,field_precision,"","",field_alias)
    elif field_type in ["FLOAT", "DOUBLE"]:
        arcpy.AddField_management(shapefile_path,field_name, field_type,field_precision,field_scale,"",field_alias)

# 提示完成信息
print("批量添加字段完成!")

          以上代码其实还可以进一步完善,不足之处请广大网友指出,希望能看到您更好的想法。文章来源地址https://www.toymoban.com/news/detail-820809.html

到了这里,关于【ArcGIS之AI写Python代码】(3)批量添加字段的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RWEQ风蚀方程模型与ArcGIS数据处理Python代码库添加结合理论研究和科研实践

       RWEQ模型是应用比较普遍的能适应大区域定量估算风蚀量的模型。该模型是基于大量野外实验的一种经验模型,在实际测定风力导致的土壤侵蚀量以及当地的气象、地表植被、土壤湿度、地表的结皮和地表的可蚀性等因子的基础上得出的一个经验方程。 1、掌握土壤风蚀模

    2024年02月13日
    浏览(59)
  • 【ArcGIS Pro二次开发】(63):批量更改字段别名

    在我工作中遇到的大多数图斑,字段名称一般是英文,字段别名是中文,使用起来是比较方便的。 但有时候也会遇到一些不一样的情况,不知是经过了怎样的处理,图斑的字段别名被修改成了和字段名称一样的英文,这样就很理解字段名称的意思,特别是其它专业、不熟悉的

    2024年02月11日
    浏览(81)
  • (Arcgis)Python3.8批量裁剪利用shp文件裁剪tif栅格影像数据

    使用环境: pycharm2020 arcgis pro 中的python3.8 一、pycharm中设置python编译器。左上角“文件”——“设置”——找到python interpreter——找到arcgis pro安装文件夹中的python 使用arcgis pro原因 :自带 arcpy 库,不需要进行 pip install 安装。(我是有python官网上的,但是不知道为什么装不了

    2024年01月21日
    浏览(56)
  • ArcGIS Pro字段操作代码汇总

    属性表是GIS数据的重要组成部分,有了属性表才可以进行分析和分类配色等操作,这里为大家介绍一下ArcGIS Pro中字段操作的相关代码,希望能对你有所帮助。 打开属性表,点击按属性选择,如下图所示。 点击按属性选择 在显示的按属性选择对话框内,根据要求进行选择,如

    2024年02月13日
    浏览(38)
  • 用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码

      本文介绍在 ArcMap 软件中,通过创建 模型构建器 ( ModelBuilder ),导出 地理坐标系 与 投影坐标系 之间相互 转换 的 Python 代码的方法。   在 GIS 领域中,矢量、栅格图层的投影转换是一个经常遇见的问题;而由于地理坐标系与投影坐标系各自都分别具有很多不同的种

    2024年01月18日
    浏览(47)
  • NC文件读取及批量转为TIFF-史上最详细讲解-含代码(ArcGIS/MATLAB)

    何为NC文件,如何读取,如何批量转为TIFF(ArcGIS/MATLAB) 相信有好多遥感、地信、地理的同学经常会用到全球月均降水数据/气温等数据,而该类数据常以NC文件保存,大家拿到手后常常会迷惑,这是一种什么数据格式,如何读取,又如何转为我们熟悉的栅格数据。今天来为大

    2024年01月21日
    浏览(41)
  • arcgis字段计算器

    1、两字段叠加 。要求待叠加的字段类型为文本或字符串类型。如下:  2、字符串部分提取。

    2024年02月14日
    浏览(43)
  • ArcGis 字段值统计脚本更新

    本文实现的功能主要是根据已知字段值,给指定的名称字段赋上对应的值;整个处理的逻辑很简单,就是通过判断语句,判断其他字段值,然后给指定的字段填上对应的值即可; 字段统计界面如下图所示:   #脚本代码如下 def updatefiles(ssssss):     if(ssssss == 1):         total

    2024年02月08日
    浏览(45)
  • arcgis更改图层字段名脚本

    2024年02月13日
    浏览(35)
  • python调用arcgis功能一例

    python调用arcgis功能一例 执行方法: window11下环境变量设置 此电脑/属性/系统/高级系统设置/高级/环境变量/path path中添加全局目录:C:Python27ArcGIS10.4 test_Select.py脚本内容 —the—end—

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包