ArcGIS10.8 模型构建器 实现迭代字段

ArcGIS10.8 模型构建器 实现迭代字段

0、前言

之前有个工作需要批量将面要素转栅格,字段命名栅格,字段值用以赋值。ArcGIS的要素转栅格工具可以批量实现,但是需要手动更改几十个甚至几百个字段及路径,并且还要反复多次干这个事,实在是太费事了。动不动要改百来个字段和路径名,很要命。
ArcGIS10.8 模型构建器 实现迭代字段_第1张图片
这个事情呢,感觉在模型构建器里实现应该很简单对吧,只要设定输出规则和输入字段通配符或者自选字段都可以解决,于是,打开模型构建器发现,没有迭代字段。
ArcGIS10.8 模型构建器 实现迭代字段_第2张图片
搜索发现ArcGIS pro的模型构建器新加了迭代字段功能,但咱也没有pro。只能自力更生。


1、 失败尝试 Arcpy ListFields

迭代字段首先要获取字段列表。
Arcpy有一个函数

ArcGIS10.8 模型构建器 实现迭代字段_第3张图片

利用模型构建器中的计算值工具实现代码运行,很快写好了放入计算值的函数代码:

def get_Fname(featureclass,wtext):
	field_names = [f.name for f in arcpy.ListFields(featureclass,wtext)]
	for fname in field_names:
		return fname

ArcGIS10.8 模型构建器 实现迭代字段_第4张图片

然后运行时发现,只会返回第一个值,其余都无了。。。然后查模型构建器说明时发现了这一条:

在这里插入图片描述

心塞。但是每次都要用arcpy来实现的话,太麻烦了,万一再有个代码错误,debug半天,活都干完了。并且考虑到与同事分享工具的便利性,执着于用模型构建器自带的工具解决。
虽然但是,还是把写好的完整的Arcpy代码记录一下:

#coding=utf-8

import arcpy
from arcpy import env

#Set environment settings
env.workspace = "C:/data"

#Set local variables
inFeature = "roads.shp" #输入要素
outRaster = "c:/output/roadsgrd"  #输出
wText = "F*" #通配符
cellSize = 25  #栅格单元大小

field_names = [f.name for f in arcpy.ListField(inFeature,wText)]
for fname in field_names:
	arcpy.FeatureToRaster_conversion(inFeature, fname,  outRaster, cellSize)

2、模型构建器实现迭代字段

思路:首先,既然是模型构建器,工具应该要具备多次使用的功能,所以先实现迭代字段这个功能,方便以后做别的事情要用到。

模型的主要思路就是:**--- 转置表格--- 插入行迭代--- 收集值**

2.1 转置表格

既然模型构建器自带的工具没有现成的迭代字段工具,又不能用Arcpy获取列表,那就曲线救国,不能迭代列名,但是有迭代行。那把行跟列换一下不就好了嘛

  • 转置字段:用日常表格来理解,就是行与列换一换,列名就是字段,转置后,列名就成了行名。10.8的模型构建器里有迭代行。

ArcGIS10.8 模型构建器 实现迭代字段_第5张图片
ArcGIS10.8 模型构建器 实现迭代字段_第6张图片

参数有5个居多,其中除了输入表,后面几个看起来都一样,要怎么设置呢?
拖个要素进去看下工具界面和帮助:
ArcGIS10.8 模型构建器 实现迭代字段_第7张图片

ArcGIS10.8 模型构建器 实现迭代字段_第8张图片
先看下结果帮助理解下
转置前属性表(红框是我选择要转置的字段):
在这里插入图片描述
转置后的属性表:
ArcGIS10.8 模型构建器 实现迭代字段_第9张图片
好了,我们重新理解一下对话框。
ArcGIS10.8 模型构建器 实现迭代字段_第10张图片根据对话框的理解,设置一下模型构建器:为了以后经常调用,输入表要转置的字段设置为参数(右键-✔模型参数),参数就是你打开工具每次都要你输入的东西,其他就是默认了。把那个不需要的属性字段椭圆删掉,省得下次搞不清楚。
ArcGIS10.8 模型构建器 实现迭代字段_第11张图片

2.2 获得字段多值

迭代就是循环,一个一个数。
**插入-迭代器-行选择**
ArcGIS10.8 模型构建器 实现迭代字段_第12张图片

双击迭代行选择,按字段分组这里选择字段名。
ArcGIS10.8 模型构建器 实现迭代字段_第13张图片
迭代的字段名是一个一个出来的,可是我们想要的是个列表,所以,把每次迭代输出的值收集起来,就获得了多值(类似于列表)
插入-仅模型工具-收集值
ArcGIS10.8 模型构建器 实现迭代字段_第14张图片
,为了方便下一步操作,把输出的多值设为参数。
ArcGIS10.8 模型构建器 实现迭代字段_第15张图片
保存工具并命名为获得字段多值
到这里,革命已经成功了90%。这个结果是获得一个字段多值(列表)。由于模型构建器里一个工具只能有一个迭代,所以字段迭代我们另起一个工具。

2.3 迭代字段

  • 新建一个模型构建器并且存储为迭代字段,把刚刚做好的工具获得字段多值拖进来。
    ArcGIS10.8 模型构建器 实现迭代字段_第16张图片
  • 开始迭代多值:插入--迭代器--多值

ArcGIS10.8 模型构建器 实现迭代字段_第17张图片
好了,保存。迭代字段工具就完成了。如果要进行利用字段的工具,直接将后续操作拖进这个工具里并另存即可。

3 应用一下批量转栅格

解释一下为什么这么执着于迭代字段,就是因为要素转栅格工具里非要输入字段。
分享一下工具。
ArcGIS10.8 模型构建器 实现迭代字段_第18张图片
ArcGIS10.8 模型构建器 实现迭代字段_第19张图片

ArcGIS10.8 模型构建器 实现迭代字段_第20张图片

你可能感兴趣的:(ArcGIS工具,arcgis)