
10.3.1获得全国每个省面积最大县
数据:“chp10\案例数据.gdb\县”,打开属性表,如图10-25所示。

图10-25 数据的属性表
方法1-删除相同:模型如图10-26所示,排序(Sort)工具:按面积降序排序;删除相同项(DeleteIdentical)工具:选“省”字段,一个省保留一条,相同的保留前者,删除后面,所以前面面积降序排列。具体模型在“chp10\模型案例.tbx\面积最大县1”,该方法最简单。

图10-26 “删除相同法”的模型
界面如图10-27所示,“县-Sort”就是输出结果。

图10-27 “删除相同法”运行界面
方法2-连接法:使用“融合(Dissolve)”工具得到每个省面积最大,之后连接,如果直接连接,不确定位数双精度,可能有问题,统一保留3位小数。添加字段工具:自己可以指定,有对应字段,不添加;计算字段(CalculateField)工具:计算面积,保留3位小数,round(!shape.area!,3),后面连接;融合工具:按省融合,取我们定义字段最大值;连接字段工具:县选我们添加字段,融合数据取最大值字段,假定条件一个省面积最大只有一个;选择工具:只选择连接上,SQL条件为:MAX_%字段% IS NOT NULL。具体模型在“chp10\模型案例.tbx\面积最大县2”,如图10-28所示。

图10-28 “连接法”模型
方法3-交集制表:融合后得到省,省和县交集制表,获得每个县在省中占比,按面积占比排序,一个省保留一条。具体模型在“chp10\模型案例.tbx\面积最大县3”,如图10-29所示。

图10-29 “交集制表法”模型
“交集制表(TabulateIntersection)”工具的操作界面如图10-30所示。

图10-30 “交集制表法”工具运行的界面
运行结果如图10-31所示,字段PERCENTAGE就是每个县,在省中面积百分占比,最大是100。

图10-31 “交集制表”工具结果的属性表
10.3.2获得小于一定距离的点
原始数据如图10-32,有3万个点,获得距离小于10米的点。

图10-32 原始的点数据
方法1-近邻表法:生成模型如图10-33所示,主要使用“生成近邻表(GenerateNearTable)”工具,操作界面如图10-34所示,搜索半径,需要输入,模型中是变量,可以根据需要输入其他值,输出结果如图10-35所示。原始数据和输出表,分别按IN_FID,NEAR_FID连接两次,由于一个数据只能连接一次,把原始数据,使用选择工具导出一次。具体模型在“chp10\模型案例.tbx\获得小于一定距离的点1”。

图10-33 “近邻表法”模型

图10-34 “生成近邻表”工具运行界面

图10-35 “生成近邻表”输出结果
方法2-缓冲区法:使用距离一半做缓冲区,缓冲区下面融合类型选择“将全部输出要素融合为一个要素”,相邻融合在一起,不相邻则分离;下一步查询面积大于圆的面积,SQL条件为:Shape_Area > 3.1416*%距离%**%距离%,和点数据,裁剪后点就是我们需要的数据,模型如图10-36所示。

图10-36 “生成近邻表”工具运行界面
计算值设置如图10-37所示,下面数据类型,设置线型单位,上面输入"%距离% Meter"。

图10-37 “计算值”设置界面
10.3.3整个数据库标识码的更新
由于数据库中,有很多要素类,整个数据库中要求标识码(BSM) 字段值在整库中唯一;每个要素类中,BSM字段值唯一,下一个要素类的开始值,是上一个要素类的最后一个值再加1。实现单个要素类的唯一值编号,Python3代码如下:
# 计算顺序编号
# 可访问 esriurl.com/CalculatorExamples 获取更多计算器示例
rec=0
def SequentialNumber(pStart):
global rec
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
调用方法如图10-38所示。

图10-38 计算字段调用Python代码界面
单表更新的模型如图10-39所示,模型在“chp10\模型.tbx\BSM更新\更新一个表BSM”。没有字段,增加字段,类型为长整数,输入开始值,更新字段值,返回更新后的值。

图10-39 单表更新的模型
运行界面如图10-40所示,输入一个表或要素类,输入字段和开始值。

图10-40 单表更新的模型运行界面
整个数据库的标识码更新模型如图10-41所示,迭代要素类循环所有的要素类,调用上面模型“更新一个表BSM”,使用反馈,循环输出“值”是下一次循环的“开始值”。

图10-41 整个数据库更新的模型
运行界面如图10-42所示,上面选择数据库,输入字段和开始值。

图10-42 整个数据库更新的模型运行界面
10.3.4数据库复制
需要将一个数据库的数批量复制到另一个数据库,实现数据库备份。一个数据库有要素类,要素数据集和栅格数据集。一个模型只能有一个迭代器,这里需要两个迭代器:一个数据集迭代,一个要素类迭代;这两个迭代器是并列的,通过模型调用模型来实现,就是前面说的子模型。模型都在“chp10\模型.tbx\复制数据库”的工具集下。
“拷贝数据集”的模型:实现数据集迭代,包括要素数据集和栅格数据集,后面复制要素数据集,数据集下的要素类数据一块复制,复制数据使用“复制(Copy)”工具,复制工具可以复制要素数据集,栅格数据集和要素类。“计算值”工具把数据库的路径和数据集名称加在一起,同时使用逻辑判断“如果数据已存在”,不存在再复制。模型如图10-43所示。

图10-43 拷贝数据集的模型
“拷贝要素类”复制数据库中的要素类,不包括数据集下的要素类,所以迭代要素类中递归选项是不勾选,模型如图10-44所示。

图10-44 拷贝数据类的模型
总的模型如图10-45,首先输入一个原始数据库,输入路径(该路径一定在windows存在)和数据库名字,自动创建数据库,把数据复制到新的数据库中。这个模型调用前面两个模型,并列平行的关系。

图10-45 数据库复制的模型
10.3.5矢量数据批量裁剪
需要实现多个图层,按另一个要素的记录批量裁剪,模型运行的效果如图10-46所示的界面。

图10-46 批量裁剪的运行界面
需要两个迭代器:一个是多个图层,使用“迭代多值”;另一个是裁剪要素的记录循环,使用“迭代要素选择”。两个迭代器是嵌套关系,数据裁剪,调用“裁剪(Clip)”工具,是最内层迭代做的。模型都在“chp10\模型.tbx\矢量批量裁剪”的工具集下。
迭代多值模型如图10-47所示,输出位置是文件夹,定义成参数,是确定位置的,裁剪后面名称需要考虑路径和名称,设置如“%输出位置%\%名称%”。

图10-47 多个图层按一个要素记录批量裁剪模型
输入要素是自己创建变量,类型是要素图层,下面多个值勾选。如图10-48所示。

图10-48 自己创建多值变量界面
总的模型如图10-49所示,其中“多个图层被一个要素批量裁剪”就是上面的子模型,“迭代要素选择”分组字段值,就是裁剪后的数据库名称,模型中调用“创建文件地理数据库(CreateFileGDB)”工具创建数据库,是上面模型的输出位置。

文章授权转载:gisoracle
- END -
重要通知!2023年注册测绘师、规划师考试时间公布
ArcGIS 各种坐标系文件下载
GIS=1/3地学+2/3信息科学?听武大教授谈GIS
实用工具 | ArcGIS顺序编号工具和快速查找文件下载



