起因
实习期间,被要求手绘某要素所有点60m范围的最高高程点,并将两点连接为线要素。
由于手绘实在繁琐,且有五百多对点,一个一个做太蠢且后续还可以用这个方法摸鱼。
因此,借此机会摸索一下如何实现批量寻找多个区域的内部唯一最高高程点。
数据准备
1、某要素缓冲区面要素;
2、DEM栅格;
3、创建一个要素数据集;
注:若区域过大,建议先用“某要素缓冲区面要素”用【按掩膜提取】工具裁剪一下数据,以提高后续的处理速度。
模型一览
Part 1:
这一步主要就是先把一个缓冲区面要素,拆分成n个独立的要素存储到要素数据集里备用。
注意:这里最后的【要素转面】请将结果输出在提前创建好的要素数据集。
Part 2:
这一步就通过【迭代要数类】来迭代刚刚要素数据集内n个独立的缓冲区要素,进行独立迭代地查找区域内地最高点。
细节分析
①为什么要把整个功能分为两个部分?
在使用ArcGIS Pro时,会面临一个限制,即每个模型内只能添加一个迭代器。这是将功能分为两部分的主要原因。
此外,还有两个重要的因素,分别在下文的②和③部分详细说明。
②为什么不直接使用【迭代要素选择】来直接实现整个流程?
当尝试直接使用【迭代要素选择】迭代一个缓冲区面要素并对其内部的每个缓冲区执行【查找最高点和最低点】操作时,会出现错误,无法达到预期效果。
个人认为可能是【查找最高点和最低点】工具不支持对选中的部分要素进行处理。这一猜测得到了Part 1中的实践支持,即在Part 1中可以使用【迭代要素选择】逐个导出缓冲区,而在【查找最高点和最低点】时则无法实现。
③为什么要先使用【迭代要素选择】来对缓冲区一 一地导出单个缓冲区再进行【查找最高点和最低点】?
正如上文(②)所述,无法直接结合【迭代要素选择】和【查找最高点和最低点】来完成整个流程。因此,采取了一个额外的步骤:使用【迭代要素选择】对多部件的缓冲区要素进行逐一迭代,借助【要素到面】工具,将原本在一个要素类中存储的缓冲区拆分成数百个单独的要素类,存储在一个要素数据集中。这样做为后续使用【迭代要素类】工具执行【查找最高点和最低点】操作奠定了基础。
④【迭代要素类】和【迭代要素选择】的区别是什么?
【迭代要素类】专门用于迭代一个要素内的所有内容,比如一个缓冲区要素内的所有缓冲区。
而【迭代要素选择】则用于迭代一个数据集或数据库内的所有独立要素。
这也解释了为什么在③中需要使用【迭代要素选择】逐一迭代地应用【要素到面】工具。
④如何实现迭代输出每个要素的名字自动变化?
在使用【迭代要素类】或【迭代要素选择】时,每次迭代会自动生成一个独特的“名称”或“值”变量。
这个特性可以用于自动更新每个迭代输出要素的名称,从而使得输出更加有序且易于识别。
例如,当你使用迭代作为输入的工具时,可以设置输出名称格式为“<你设定的输出名>%值%”或“<你设定的输出名>%名称%”。
这里的"_"下划线符号仅用作美观分隔,无其他特殊含义。至于使用“%值%”或“%名称%”取决于迭代输出的具体内容。
通过这种方法,您可以确保每次迭代产生的输出都有一个独特且有意义的名称,便于后续的处理和引用。
⑤【查找最高点和最低点】工具能实现什么?
如上图,在“输入表面”中选择DEM数字高程模型栅格,同时在“输入区域”中选择你所规定的矢量要素区域,那么最终输出的要素类是在这个矢量要素区域内最高或最低的高程点。