基于ArcGIS的Python——要素类至地理数据库

本文介绍了一种使用Python和ArcPy批量将不同地理数据库(GDB)中的要素类合并到单一GDB的方法。通过使用da.walk()函数遍历指定目录下的所有要素类,并将其导入到目标GDB中。

需求

(1)将目录下中的多个(甚至多达1000个)gdb中的要素类合并到同一个gdb中

(2)目录结构如下图所示:

思路

利用da.walk()来输出目录中gdb数据库里要素类的实际名称;walk函数式arcpy.da的一部分,通过自上而下或自下而上的方式遍历目录树,生产目录树中的文件名;每个目录或工作空间生产一个包含目录路径、目录名称和文件名的元组。

这个函数类似Python的os.walk(),但是da.walk()具有识别地理数据库结构的优点。具体实现代码如下:

... import arcpy.da as da
... import os 
... 
... rootdir="F:\\panzhao" 
... print("arcpy da walk")
... 
... for dirpath, dirnames, filenames in da.Walk(rootdir,datatype="FeatureClass"):
...     for filename in filenames:
...         print(os.path.join(dirpath, filename))
...         arcpy.FeatureClassToGeodatabase_conversion(os.path.join(dirpath, filename),'F:/output1.gdb')

 代码中将目录路径传递给变量rootdir;da.walk()函数有两个参数,要进行检索的顶层工作空间(当前工作空间)和用于筛选返回列表的数据类型,本例检索了要素类的相关文件。walk()函数返回一个包含目录路径、目录名称和文件名的元组。

其中函数FeatureClassToGeodatabase_conversion (Input_Features, Output_Geodatabase),如果名称在输出地理数据库中已存在,系统会在要素类名称的结尾追加一个数字以确保其唯一性(例如b11_1)。见参考资料中官网介绍。

参考资料

http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/conversion-toolbox/feature-class-to-geodatabase.htm

我在编写一个适用于arcgis10.2的拓扑检查工具,建立临时拓扑时,地理数据库已经被创建了,但是还是未被识别到,创建的地理库名为TopologyCheck_20251105_194448.gdb。执行: 图层间拓扑检查 "D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\R_BLD_A" 'D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\R_GRO_A';'D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\T_INT_A' no_overlap "D:\BaiduNetdiskDownload\ArcGIS Python\1010" 开始时间: Wed Nov 05 19:44:47 2025 正在运行脚本 图层间拓扑检查... 开始验证输入参数... 主要要素验证成功: D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\R_BLD_A 解析出的次要要素列表: [u'D:\\BaiduNetdiskDownload\\ArcGIS Python\\1010\\(533103)\u8292\u5e02\u4e00\u5f20\u56fe\u5730\u7406\u5e95\u56fe\\\u6210\u679c\u6570\u636e\\test.gdb\\R_GRO_A', u'D:\\BaiduNetdiskDownload\\ArcGIS Python\\1010\\(533103)\u8292\u5e02\u4e00\u5f20\u56fe\u5730\u7406\u5e95\u56fe\\\u6210\u679c\u6570\u636e\\test.gdb\\T_INT_A'] 次要要素验证成功: D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\R_GRO_A 次要要素验证成功: D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\T_INT_A 主要要素: D:\BaiduNetdiskDownload\ArcGIS Python\1010\(533103)芒市一张图地理底图\成果数据\test.gdb\R_BLD_A 次要要素: [u'D:\\BaiduNetdiskDownload\\ArcGIS Python\\1010\\(533103)\u8292\u5e02\u4e00\u5f20\u56fe\u5730\u7406\u5e95\u56fe\\\u6210\u679c\u6570\u636e\\test.gdb\\R_GRO_A', u'D:\\BaiduNetdiskDownload\\ArcGIS Python\\1010\\(533103)\u8292\u5e02\u4e00\u5f20\u56fe\u5730\u7406\u5e95\u56fe\\\u6210\u679c\u6570\u636e\\test.gdb\\T_INT_A'] 拓扑规则: [u'no_overlap'] 获取要素信息... 正在创建输出地理数据库: D:\BaiduNetdiskDownload\ArcGIS Python\1010\TopologyCheck_20251105_194448 等待地理数据库创建... 尝试 1/5 等待地理数据库创建... 尝试 2/5 等待地理数据库创建... 尝试 3/5 等待地理数据库创建... 尝试 4/5 等待地理数据库创建... 尝试 5/5 创建地理数据库后验证失败: D:\BaiduNetdiskDownload\ArcGIS Python\1010\TopologyCheck_20251105_194448 脚本执行失败! Completed script 图层间拓扑检查... 执行(图层间拓扑检查)失败。 失败 在 Wed Nov 05 19:44:54 2025 (经历的时间: 6.97 秒)
最新发布
11-06
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值