基于ArcGIS ModelBuilder的GDB批量分区裁剪——可保留原始GDB要素集要素类结构
文章版权由作者pxtgis和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/pxtgis/。
一、概述
在数据处理工作中经常遇到批量裁剪ArcGIS文件地理数据库(GDB)的需求。利用ArcGIS进行GDB批量裁剪的方法主要有三种。本文以矢量GDB批量裁剪为例。
1、利用ArcToolbox中Analysis Tools工具箱中的Extract工具集下Clip裁剪工具的Batch批量处理(右键工具箱即可调出批量裁剪面板)。在Input Features下方单元格点击Browse可以批量选取GDB中多个要素(如果有数据集,则需单独添加要素集中要素类),Clip Features下方单元格点击Open指定裁剪文件,Output Feature Class这列第一个单元格也会自动填充内容,默认存放在Default.gdb下带” _Clip”后缀文件名。选中Clip Features列已填充的内容右键Fill,即可将该列其他空白单元格填充同样内容,也可以自己选中特定几行再点击Fill,则只填充选中的几行内容。Output Feature Class最好不动,保持默认,因为要修改路径就得都修改,修改一个其他还是默认。该列空白单元格程序运行时会自动填充同样路径,文件名与输入要素对应,所以无需Fill。点击OK即可执行批量裁剪,裁剪完可以把Default.gdb中的要素拷贝出来。但是Batch批量裁剪工具中裁剪要素只能取一个要素,就算输入的裁剪要素类中有多个面要素,也只执行第一个进入程序中的要素面。而且,在GDB中包含数据集的情况下,Batch批量处理在浏览数据时就很不方便,输出时也无法保留原始数据集结构。所以针对只需利用一个面要素进行批量裁剪,而且不需要保留GDB要素集结构的情况下,Batch批量处理比较合适。

图1 Batch Clip界面
2、利用Python,ArcPy站点包编写程序进行处理。本文先不过多介绍。
3、利用Model Builder制作工作流进行处理。Model Builder包含一组支持构建灵活且功能强大的模型的实用工具,可实现零代码对GDB进行批量分区裁剪且可选择是否保留原始GDB要素集要素类结构。这也是本文的重点,下文将详细介绍。
二、数据
1、待批量分区裁剪的市基础地理信息数据(部分测试数据,GDB格式),包含要素集和要素类。
2、用于裁剪的市区界(包含多个面要素,shp格式),也可以换成分幅或其他裁剪要素类(包含一个或多个面要素)。

图2 部分基础地理信息数据
三、GDB批量裁剪模型
需求是:利用市区界要素面数据对全市GDB数据进行批量分区裁剪出按区名命名的GDB,并且保留原始GDB的要素集结构。
如下图所示,由于Model Builder中只能添加一个迭代器,所以要用到子模型,甚至子子模型。
1、主模型添加裁剪要素Clip FeatureClass,也就是本文的市区界shp数据,先经过筛选Select(这步可省,为了减少测试数据量加的),然后执行迭代要素选择,选择的要素作为两个裁剪子模型的裁剪要素输入;同时,在OutputGDB Folder位置创建名为GDB Name (其值为%Value%,行内替换迭代选择出要素的name属性) 的文件地理数据库OutputGDB, 该GDB作为两个子模型的输出GDB参数;InputGDB为待批量分区裁剪的GDB,也就是本文的基础地理信息库。

图3 GDB批量裁剪总模型
2、要素类裁剪子模型中,仅对GDB目录下的要素类进行迭代裁剪,不递归至要素集下的要素类。

图4 要素类裁剪子模型
3、要素集裁剪子模型1中再嵌套了一个要素集裁剪子模型0。要素集裁剪子模型0中是对要素集裁剪子模型1中的迭代的要素集进行要素类迭代和裁剪。要素集裁剪子模型1中对输入的基础地理信息数据库进行迭代要素集,同时在总模型中生成的分区GDB中建立相应要素集,要素集路径和迭代的要素集以及迭代的裁剪要素共同作为要素集裁剪子模型0的输入。


图5 要素集裁剪子模型
4、本例中的GDB批量裁剪生成的GDB可以保留原始GDB的要素集合要素类的结构。如果不需要输出原始要素集的结构,可以去掉要素集裁剪子模型1,修改要素类裁剪子模型中迭代要素类的工具的Recursive递归选项勾上,则会批量裁剪GDB中包含数据集下的所有要素类,如图6所示。

图6 勾选要素集裁剪子模型中递归选项
5、运行总模型,模型参数和结果如下。结果为按区界名命名的各个GDB,GDB的要素集合要素类结构也和原GDB结构一致。


图7 模型运行及结果
四、总结
1、本文参考了《ArcGIS之GDB(文件地理数据库)批量处理(20190115)》。
2、模型中三层嵌套有些复杂,下一步还需研究改善。
3、利用模型运行出来存在一些空图层并没有删除,有需求删除的话可以在模型中再加入批量删除空图层工具。
4、需注意若要将裁剪结果写入网络路径下可能会报错无法写入,将OutputGDB Folder参数改为磁盘绝对路径就可以正常写入。
-----欢迎转载,但请于明显处标明出处:http://www.cnblogs.com/pxtgis/
如果您觉得本文确实帮助了您,可小小打赏下,谢谢


基于ArcGIS ModelBuilder的GDB批量分区裁剪——可保留原始GDB要素集要素类结构的更多相关文章
- ArcGIS案例学习笔记-批量裁剪地理模型
ArcGIS案例学习笔记-批量裁剪地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:空间数据的批量裁剪 优点:1.批量裁剪:任意多个目标数据,去裁剪任意 ...
- 基于ArcGIS的CAD数据向GIS数据转换方法(转)
基于ArcGIS的CAD数据向GIS数据转换方法 1 CAD数据与ArcGIS数据介绍 地图数据来源多种多样,大多数使用的是计算机辅助设计软件(CAD)制作的数据,CAD软件制图自动化程度高,操作简单 ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- 基于ArcGIS Viewer for Flex开发的一款跨平台的应用程序
特点: 1.基于ArcGIS Viewer for Flex开发的一款跨平台的应用程序: -(IBAction) showTOC:(id)sender { if (_tocViewController ...
- PictureCutting图片批量裁切(裁剪)工具
PictureCutting图片批量裁切(裁剪)工具 写这个工具的原因是因为在获取一个软件的皮肤包中的图片的时候需要进行批量的裁切工作,而有没有找到在linux下简单好用的工具,干脆就用QT写了一个. ...
- 基于ArcGIS JS API的在线专题地图实现
0 引言 专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...
- 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署
部署流程概述 在微软的iis服务器上部署基于ArcGIS Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...
- 基于ArcGIS的栅格图像平滑处理(转)
基于ArcGIS的栅格图像平滑处理 栅格数据获取的途径多种多样,造成了栅格数据质量的很大差异,一些质量较差的栅格数据存在大量“噪音”象元,即在表达同类型的地理要素时,出现个别像元值与周边像元不一致的情 ...
- 基于集合成工控机Ubuntu系统安装分区详解
基于集合成工控机Ubuntu系统安装分区详解 硬件描述:双核的CPU,128G的固态硬盘 软件描述:使用Ubuntu12.04系统,内核3.8.0-29版本,QT4.8.1版本 1.新建分区表 /de ...
随机推荐
- vscode写latex的正反向搜索问题
vscode写latex的正反向搜索问题 vscode使用LaTeX Workshop + TexLive时可以很舒畅的写作 但是在长篇写作时,会涉及到正反向搜索的需求.即根据源码搜pdf的位置,和根 ...
- CentOS7 【linux系统】配置 JDK 教程
1. 下载 [linux版本] JDK 1.8 的包. 2. 导入linux系统里面. 如何导入,下载一个winSCP 软件 破解安装,然后再linux 系统里面 查询IP,连接即可. 在linux解 ...
- Python-变量-字符串
str 字符串如何表示字符串? 单行 单引号 '' 如果字符串中有单引号就需要双引号表示,反之亦然 双引号 " " 换行表示 \ one_str = "简洁胜于优雅&qu ...
- Python self用法详解
在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数.例如,定义一个 Person 类: class Person: def __init ...
- Salesforce Javascript(二) 箭头函数
本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions 我们在 ...
- Linux系统编程 —时序竞态
时序竞态 什么是时序竞态?将同一个程序执行两次,正常情况下,前后两次执行得到的结果应该是一样的.但由于系统资源竞争的原因,前后两次执行的结果有可能得到不一样的结果,这个现象就是时序竞态. pause函 ...
- DOS批处理中%cd%与%~dp0的区别详解
转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解 Windows下批处理中%cd%和%~dp0都能用来表示当前 ...
- python中def用法
转载:https://blog.csdn.net/qq_21466543/article/details/81604826 一.函数调用的含义 函数是类似于可封装的程序片段.允许你给一块语句一个名字, ...
- Oracle Database XE 11gR2 自带的用户,新建用户,修改用户密码
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- 【比赛记录】8.21 div2
A 选择一个点\(B(x,0)\)使得\(|dis(A,B)-x|=k.\) 题目实际上就是找到一个最接近\(n\)的数,使得它可以分成两个数\(a,b,\)使\(a-b=k.\) 我们考虑先分成一个 ...