arcpy脚本工具开发:批量合并文件地理数据库(gdb)


前言

有多个文件地理数据库(即.gdb格式的数据库),数据库内有多个要素类。要求将这些文件地理数据库中相同名称的要素类分别合并到一个文件地理数据库中。如果只有几个数据库,可以用arcgis自带的合并工具一个一个合并。但是,如果有一百个数据库,每个数据库里有十几个要素类,例如:将一百个县的年度变更数据库合并成一个,该怎么办?。如果一个一个添加到合并工具合并,这得要点多少次鼠标啊?今天给大家分享的GDB批量合并工具,就是为了解决这个问题。


一、ArcPy是什么?

ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting功能进而构建而成的站点包。目的是为以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。
该包提供了丰富纯正的 Python 体验,具有代码自动完成功能(输入关键字和点即可获得该关键字所支持的属性和方法的弹出列表;从中选择一个属性或方法即可将其插入),并针对每个函数、模块和类提供了参考文档。

以上是Esri官方给的答案,详情请看帮助文档 https://desktop.arcgis.com/zh-cn/arcmap/latest/analyze/arcpy/what-is-arcpy-.htm

总之,arcpy就是一个用python开发第三方库,可以用import导入python代码中。有了它python就可以调用ArcGIS的ArcToolBox中的工具进行地理数据的分析、数据转换、数据管理等操作。

二、GDB批量合并工具开发思路

  • 1.第一层循环,遍历文件夹下所有文件地理数据库。第二层循环,遍历每个数据库中要素类,获取要素类名称分别添加到列表中,相同名称只添加一次。得到的要素类名称列表就是合并后数据库中所有的要素类名称。
  • 2.第一层循环,遍历得到要素类名称列表。第二层循环,遍历一次文件地理数据库,判断数据库中是否存在该名称的要素类,存在,则拼接绝对路径并添加到列表中。将绝对路径列表作为参数,调用合并工具合并该图层。

python中使用arcpy合并工具语法:
合并工具语法

代码示例:

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.Merge_management(["majorrds.shp", "Habitat_Analysis.gdb/futrds"], "C:/output/Output.gdb/allroads")

三、GDB批量合并工具代码

完整代码如下:

# -*-coding: gbk -*-
import sys
import os
import arcpy
# 添加这两行可以解决乱码问题
reload(sys)
sys.setdefaultencoding("utf-8")

in_path = arcpy.GetParameterAsText(0)  # 文件地理数据库(.gdb)所在文件夹路径
out_gdb_path = arcpy.GetParameterAsText(1)  # 合并后输出的文件地理数据库(.gdb)路径

# 将文件地理数据库(.gdb)所在文件夹设置为当前工作空间环境
arcpy.env.workspace = in_path
# 获取当前工作环境下所有文件数据库列表
workspaces = arcpy.ListWorkspaces("*", "FileGDB")
# workspaces = arcpy.ListWorkspaces("*", "Access")  # 个人地理数据库,即mdb格式
in_fc_list = []  # 用于存放gdb内的要素类名称的列表

# 遍历gdb
for wsp in workspaces:
    # 将gdb设置为当前工作空间环境
    arcpy.env.workspace = wsp
    # 获取gdb内要素类列表
    fc_lss = arcpy.ListFeatureClasses()
    for fc in fc_lss:
        if fc not in in_fc_list:
            # 如果当前遍历到的要素类名称不在in_fc_list列表中,则添加到列表
            in_fc_list.append(fc)

arcpy.AddMessage(u"共{0}个图层。".format(len(in_fc_list)))

cout = 0
# 遍历要素类名称列表
for infc in in_fc_list:
    cout += 1
    merge_list = []  # 用于存放所有gdb中相同名称的要素类的列表
    arcpy.AddMessage(u"  {0}.正在合并: {1}".format(cout, infc))
    for wsp in workspaces:
        # 重新遍历所有gdb,分别拼接路径
        merge_fc = os.path.join(wsp, infc)
        if arcpy.Exists(merge_fc):
            # 如果当前遍历到的gdb内存在该名称的要素类,则添加到merge_list列表中
            merge_list.append(merge_fc)
        else:
            # 如果当前遍历到的gdb内不存在该名称的要素类,则给出警告
            arcpy.AddWarning(u"    警告:{0} 中不存在名称为 {1} 的要素类,请留意!".format(wsp, infc))
    # 合并所有gdb中相同名称的要素类
    arcpy.Merge_management(merge_list, os.path.join(out_gdb_path, infc))
    del merge_list

四、GDB批量合并工具截图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


总结

今天分享的GDB批量合并工具,比较简单,代码也很少,却也很实用(自认为😜)。arcpy脚本工具开发并不是很难,大多时候就是这么简单,只是把各种ArcGIS中自带的工具用python按自己的逻辑串连起来。只要掌握python基本语法,再看看ArcGIS的帮助文档,基本可以做出很多实用的小工具。今天的分享就到这,如有疑问或者工作中有什么实际需求,欢迎评论留言,有时间我会不定期分享。

GDB批量合并工具下载地址 https://download.csdn.net/download/qz_CSDN/87611470

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
可以使用ArcPy模块来编写一个Python脚本来实现批量合并多个mdb到gdb库的操作。以下是一个基本的脚本示例: ```python import arcpy import os # 设置工作空间和输出gdb路径 workspace = r"C:\data" output_gdb = r"C:\output.gdb" # 获取所有的mdb文件 mdb_files = arcpy.ListFiles("*.mdb") # 创建输出gdb,如果已存在则删除 if arcpy.Exists(output_gdb): arcpy.Delete_management(output_gdb) arcpy.CreateFileGDB_management(os.path.dirname(output_gdb), os.path.basename(output_gdb)) # 批量合并mdb到gdb for mdb_file in mdb_files: mdb_path = os.path.join(workspace, mdb_file) feature_datasets = arcpy.ListDatasets("*", "Feature") for fd in feature_datasets: fd_path = os.path.join(mdb_path, fd) arcpy.FeatureClassToGeodatabase_conversion(fd_path, output_gdb) tables = arcpy.ListTables() for table in tables: table_path = os.path.join(mdb_path, table) arcpy.TableToGeodatabase_conversion(table_path, output_gdb) print("合并完成") ``` 在上述示例中,我们首先设置了工作空间和输出gdb路径。然后,我们使用arcpy.ListFiles函数来获取所有的mdb文件。接下来,我们创建了输出gdb并删除了已存在的同名gdb。随后,我们使用arcpy.ListDatasets来获取所有的特征数据集,并使用arcpy.FeatureClassToGeodatabase_conversion函数将特征类拷贝到输出gdb中。类似地,我们使用arcpy.ListTables来获取所有的表,并使用arcpy.TableToGeodatabase_conversion函数将表拷贝到输出gdb中。最后,我们输出一个完成的消息。 注意:示例中的路径和文件名需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半吊子读书人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值