DeepSeek最近红的发紫。我没兴趣让他去评论我们的行业,因为我们这个行业有一个很大的护城河——“数据涉密”,所以一个东西总有两面性。
既然不谈论什么行业远景,不去想我们牛马人生会不会被AI替代,我们还是想想该如何运用AI配合好我们的行业,提高我们的工作效率。
今天我们一起来做一个实盘测试,结合DeepSeek与ArcGIS Pro来完成实际工作的需求。(写出来来的代码我一字未改,真的强的可怕)。
需求:利用python写一个arcgis的脚本工具箱实现批量添加字段功能,批量添加字段基于上传的excel提供的字段结构模板,构建一个GDB数据库要素类。
我上传了EXCEL的要素的模板,并在DeepSpeek中给出需求
(注意:Excel模板及工具代码等获取见后文)
DeepSeek实测:
01
以下是DeepSeek中实测的结果
以下为DeepSeek的实际测试并且配合我的一些截图以及ArcGIS Pro中的实际操作截图。
要实现基于Excel提供的字段结构模板批量添加字段到GDB数据库要素类的功能,可以使用Python结合ArcPy库来完成。以下是实现步骤和代码示例:
1. 脚本工具箱设计
-
输入参数:
-
输入Excel文件路径(包含字段结构模板)
-
目标GDB数据库路径
-
目标要素类名称
-
-
输出:
-
在目标GDB数据库中创建或修改要素类,并根据Excel模板添加字段。
-
2. Python脚本实现
以下是完整的Python脚本,用于根据Excel模板批量添加字段到GDB要素类:
import arcpy
import openpyxl
import os
# 定义脚本工具的参数
input_excel = arcpy.GetParameterAsText(0) # 输入Excel文件路径
target_gdb = arcpy.GetParameterAsText(1) # 目标GDB数据库路径
target_fc_name = arcpy.GetParameterAsText(2) # 目标要素类名称
# 检查输入文件是否存在
if not os.path.exists(input_excel):
arcpy.AddError("输入的Excel文件不存在!")
raise Exception("输入的Excel文件不存在!")
# 检查目标GDB是否存在
if not arcpy.Exists(target_gdb):
arcpy.AddError("目标GDB数据库不存在!")
raise Exception("目标GDB数据库不存在!")
# 构建目标要素类的完整路径
target_fc = os.path.join(target_gdb, target_fc_name)
try:
# 打开Excel文件
workbook = openpyxl.load_workbook(input_excel)
sheet = workbook.active # 获取第一个工作表
# 读取Excel中的字段信息
fields_to_add = []
for row in sheet.iter_rows(min_row=2, values_only=True): # 从第二行开始读取
field_name = row[1] # 字段名
field_type = row[2] # 字段类型
field_precision = row[3] if row[3] else None # 字段精度
field_scale = row[4] if row[4] else None # 字段小数位数
field_length = row[5] if row[5] else None # 字段长度
field_alias = row[6] # 字段别名
field_nullable = row[7] # 字段可否为空
field_required = row[8] # 字段是否必填
# 将字段信息添加到列表中
fields_to_add.append({
"name": field_name,
"type": field_type,
"precision": field_precision,
"scale": field_scale,
"length": field_length,
"alias": field_alias,
"nullable": field_nullable,
"required": field_required
})
# 检查目标要素类是否存在
if not arcpy.Exists(target_fc):
arcpy.AddMessage(f"目标要素类 '{target_fc}' 不存在,正在创建...")
# 创建一个空的要素类(假设为面要素类)
arcpy.management.CreateFeatureclass(target_gdb, target_fc_name, "POLYGON")
arcpy.AddMessage(f"要素类 '{target_fc}' 创建成功!")
# 遍历字段信息并添加到要素类
for field_info in fields_to_add:
field_name = field_info["name"]
field_type = field_info["type"]
field_alias = field_info["alias"]
field_length = field_info["length"]
field_precision = field_info["precision"]
field_scale = field_info["scale"]
field_nullable = field_info["nullable"]
field_required = field_info["required"]
# 检查字段是否已存在
existing_fields = [f.name for f in arcpy.ListFields(target_fc)]
if field_name in existing_fields:
arcpy.AddMessage(f"字段 '{field_name}' 已存在,跳过添加。")
continue
# 添加字段
arcpy.AddMessage(f"正在添加字段:{field_name} ({field_type})")
arcpy.management.AddField(
in_table=target_fc,
field_name=field_name,
field_type=field_type,
field_precision=field_precision,
field_scale=field_scale,
field_length=field_length,
field_alias=field_alias,
field_is_nullable="NULLABLE" if field_nullable else "NON_NULLABLE",
field_is_required="REQUIRED" if field_required else "NON_REQUIRED"
)
arcpy.AddMessage("字段添加完成!")
except Exception as e:
arcpy.AddError(f"脚本运行失败:{str(e)}")
以下蓝字及截图为我操作步骤其余为AI提供:
新建一个txt,将代码复制粘贴进去,保存命名为BatchAddfield,并将后缀改为py,
3. 创建ArcGIS脚本工具箱
-
打开ArcGIS Pro:
-
在“目录”窗格中,右键点击“工具箱”文件夹,选择“新建工具箱”。
-
命名为
BatchAddFields.tbx
。 -
-
-
添加脚本工具:
-
右键点击新建的工具箱,选择“添加” -> “脚本”。
-
设置脚本名称(如
BatchAddFields
)和标签。 -
点击“下一步”,选择刚刚编写的Python脚本文件。
-
导入上述的脚本。
-
-
设置脚本参数:
-
参数1:
input_excel
,数据类型为“文件”,方向为“输入”。 -
参数2:
target_gdb
,数据类型为“工作空间”,方向为“输入”。 -
参数3:
target_fc_name
,数据类型为“字符串”,方向为“输入”。
-
添加三个参数:
-
点击“完成”。
-
-
-
测试工具:
-
输入Excel文件路径(如
批量添加字段模板.xlsx
)。 -
目标GDB数据库路径。
-
目标要素类名称(如
TestFeatureClass
)。
-
双击脚本工具,输入以下内容:
-
运行工具,检查目标要素类中是否成功添加了字段。
成功运行,得到结果如下。
-
4. 注意事项
-
Excel文件格式:确保Excel文件的字段结构模板与脚本中的解析逻辑一致。
-
字段类型映射:ArcGIS字段类型与Excel中的字段类型需要正确映射(如
Text
对应TEXT
,Double
对应DOUBLE
等)。 -
要素类类型:脚本默认创建面要素类(
POLYGON
),可以根据需要修改为其他类型(如POINT
、LINE
等)。
5. 示例运行
假设Excel文件内容如下:
序号 | 字段名 | 字段类型 | 字段精度 | 字段小数位数 | 字段长度 | 字段别名 | 字段可否为空 | 字段是否必填 |
---|---|---|---|---|---|---|---|---|
1 | BSM | Text | 18 | 标识码 | False | False | ||
2 | YSDM | Text | 10 | 要素代码 | FALSE | False | ||
3 | XZQDM | Text | 12 | 行政区代码 | FALSE | False |
运行脚本后,目标要素类中将添加以下字段:
-
BSM
(标识码,文本类型,长度18) -
YSDM
(要素代码,文本类型,长度10) -
XZQDM
(行政区代码,文本类型,长度12)
6. 扩展功能
-
字段类型验证:在添加字段前验证字段类型是否合法。
-
批量处理多个要素类:扩展脚本以支持批量处理多个要素类。
-
日志记录:添加日志功能,记录脚本运行状态和错误信息。
通过以上实现,脚本可以根据Excel模板批量添加字段到GDB要素类,满足自动化处理需求。