文章目录

    • 前言
    • 一、ArcPy是什么?
    • 二、GDB批量合并工具开发思路
    • 三、GDB批量合并工具代码
    • 四、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 += 1merge_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脚本工具开发:批量合并文件地理数据库(gdb)相关推荐

  1. 第七课 Shell脚本编程-大型脚本工具开发实战

    第七课 Shell脚本编程-大型脚本工具开发实战 文章目录 第七课 Shell脚本编程-大型脚本工具开发实战 第一节 需求描述 第二节 脚本的特殊参数 第三节 功能函数的实现 第四节 程序主流程设计及 ...

  2. shell编程系列26--大型脚本工具开发实战

    shell编程系列26--大型脚本工具开发实战大型脚本工具开发实战拆分脚本功能,抽象函数1.function get_all_group 返回进程组列表字符串2.function get_all_pr ...

  3. 脚本工具之下载M3U8文件类型的完整视频二-优酷

    上一篇文章<脚本工具之下载M3U8文件类型的完整视频>分享了鹅厂视频获取方法,今天分享一个优酷视频下载方法. 依赖说明 运行环境: Python3环境 内置播放命令: ffplay (需要 ...

  4. 【ArcGIS自定义脚本工具】批量执行栅格计算器

    文章目录 一.功能介绍 二.脚本代码 三.工具参数 四.用例 4.1 批量单位换算 4.2 批量计算植被覆盖度 4.3 批量填充空值 系列文章目录: ArcGIS自定义脚本工具 一.功能介绍 功能 将 ...

  5. 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )

    文章目录 一.生成 dex 文件 二.生成 dex 文件代码示例 三.生成 dex 结果 参考博客 : [Android 安全]DEX 加密 ( 常用 Android 反编译工具 | apktool ...

  6. bat生成工具(批量 删除文件/复制文件/删除文件夹/重命名文件)

    Batch文件能完成一些批量重复操作.不想在每次用到重新编写一个.bat文件,所以这里用一个工具(.bat)去生成一个用于具体批量操作的.bat文件. 工具的batch代码在文档的最后面.新建一个文本 ...

  7. 【脚本】7-Zip 批量压缩文件

    @echo off ::请用notepad+++编辑脚本,并将编码方式保存为ANSI格式 ::此脚本在批量压缩文件过程中,会因为文件名中有空格报错,所以一定要使得被压缩文件名字中无空格 echo 7z ...

  8. GIS开源框架:ArcGIS文件地理数据库(GDB)解析与入库

    对于GIS专业毕业的同学,想必对于ArcGIS软件不会太陌生,对于地理数据库也有一定的了解和使用经验.但是,撇开软件操作层面不谈,作为一个WebGIS/GIS开发人员,我们如何通过GIS开源框架去完成 ...

  9. 【Python基础】Pandas批量合并文件脚本,多个同名sheet也适用

    ◆ ◆ ◆  ◆ ◆ 背景 很多财务.人力或其他行政岗位,总有一些整理Excel表格的需求,而这些工作又有一个共同特点:周期性.重复性.即每周或每月要进行固定的一些表格操作,这时候,我们应该使用一些自 ...

最新文章

  1. 开发缺点_成都嗨创科技:原生APP开发与混合APP开发的优缺点对比
  2. 为什么AI感知与人类感知无法直接比较?
  3. 20190404 Oracle忘记登陆密码
  4. JS子元素oumouseover触发父元素onmouseout
  5. 关于推荐和机器学习的几个网站
  6. java src 文件路径_java获取src下文件路径和获取webRoot下文件路径
  7. asp.net core安全事项(下)
  8. 用Java中的抽象类扩展抽象类
  9. 汇编程序中,字符数据和ASCII的对应关系
  10. getAttribute实例例java_Java ExifInterface.getAttribute方法代码示例
  11. linux用分词系统,Linux(CentOS 6.4)Solr4.8.1中文分词配置(IK分词)
  12. getParameterValues
  13. 分类,等级,或者有序变量如何进行多因素Cox回归 变量的类型决定了最终结果的reference
  14. 如何提升邮箱邮件安全性,邮箱管理制度有哪些?
  15. 家庭单台计算机连接宽带步骤,两台win7电脑共用一个宽带账号上网的设置方法...
  16. 【单片机笔记】基于LM358的差分放大,电流检测电路
  17. html显示fps,Three.js - 使用stats.js库显示帧数(以及画面渲染时间)
  18. 【破事氵】在Linux环境中让程序在后台运行
  19. 英语掌握的程度,与Python有没有关系
  20. 在Android手机或平板电脑上启用开发者模式选项

热门文章

  1. [转]人类的15个欲望与游戏设计
  2. Unity打包Android的apk文件时有关Json的注意事项
  3. oracle赋值当前时间,Oracle数据库时间类型
  4. linux重装eclipse_linux下安装eclipse时如何配置.
  5. docker部署LTC v0.18.1版本开发网
  6. python 第七天作业
  7. 移动端软键盘兼容方案
  8. oracle提示表名无效,ORACLE提示表名无效
  9. rk3288 linux OTA A/B升级分析
  10. Wget/httrack 爬取整站资源