除了能够在脚本中执行所有可用的工具(ArcGIS桌面软件提供了800多个地理处理工具,这些工具都可以在Python脚本中使用),你还可以在脚本中调用自己创建的自定义工具。许多自定义工具来专门用于执行组织机构内特定需求的地理处理任务。而且这些工具也很方便共享。
将脚本添加到ArcToolbox下的自定义工具箱中创建自定义地理处理脚本工具。
将使用一个已编写好的Python脚本,该脚本会从一个逗号分隔符文本文件中读取野外火情数据,之后将数据转为一个FireIncidents
的点要素文件。
软件环境:ArcMap 10.3
1、创建工具箱。在ArcMap中创建一个空白的地图文档并打开ArcToolbox窗口,右键单击ArcToolbox内的任何空白位置,选择添加工具箱(Add Toolbox),在Add Toolbox对话框中,点击New Toolbox按钮。系统会创建一个Toolbox.tbx
的工具箱,在下一步中你可以重命名该工具箱。
2、重名名工具箱以及添加别名。在ArcToolbox中右键刚刚创建的工具箱,并点击“重命名”按钮,重命名为:“Wildfire Tools”。并在属性中设置工具箱的别名为:wildfire
3、将脚本添加到刚刚创建的Wildfire Tools工具箱中。在ArcToolbox中,右键单击之前创建的Wildfire Tools工具箱,选择添加|脚本(Add|Script)。并在弹出添加脚本(Add Script)的对话框中填写脚本名称,标签以及描述信息,其中名称信息不能有空格以及特殊字符。
脚本完整的脚本代码如下:
#Script to Import data to a feature class within a geodatabase
import arcpy, os
try:
outputFC=arcpy.GetParameterAsText(0)
fClassTemplate=arcpy.GetParameterAsText(1)
f=open(arcpy.GetParameterAsText(2),"r")
arcpy.CreateFeatureclass_management(os.path.split(outputFC)[0],os.path.split(outputFC)[1],"point",fClassTemplate)
lstFires = f.readlines()
cur = arcpy.InsertCursor(outputFC)
cntr = 1
for fire in lstFires:
if 'Latitude' in fire:
continue
vals = fire.split(",")
latitude = float(vals[0])
longitude = float(vals[1])
confid = int(vals[2])
pnt = arcpy.Point(longitude, latitude)
feat = cur.newRow()
feat.shape = pnt
feat.setValue("CONFIDENCEVALUE", confid)
cur.insertRow(feat)
arcpy.AddMessage("Record number" + str(cntr) + "written to feature class")
cntr = cntr + 1
del feat
del cur
except:
print arcpy.GetMessages()
finally:
f.close()
4、添加脚本文件并在添加脚本对话框中进行显示参数设置,包括输出要素类、属性模板和火情文本数据。其中输出要素类参数为output类型,属性模板和火情文本数据为输入类型。
5、点击完成(Finish)按钮。如下图所示,一个新的脚本工具就会添加到Wildfire Tools工具箱中。
6、测试工具是否可用。
如下图所示,新创建的要素类添加到ArcMap显示窗口中:
几乎所有的脚本都带有参数,用户需要在工具对话框中提供所需的参数值。工具执行时,参数值传递给脚本。脚本读取这些参数值后在进行处理。Python脚本可以将参数作为输入值。参数可以让脚本接受动态参数值。通过指定脚本的输入参数,你就可以在脚本运行时再获取参数值。这一功能让脚本变得更为灵活。GetParameterAsText()
函数用于获取输入参数值,该函数从零值开始索引参数在参数列表中的位置,即第一个参数占据索引位置0
。每一个后续参数索引值递增加1
。输出要素类是通过读取逗号分隔符文本文件来创建并将其赋值给变量outputFC,该参数通过GetParameterAsText(0)
语句获取。
使用语句GetParameterAsText(1)
,我们获取了作为输出要素类属性模板的一个要素类参数。该模板要素类中的字段将会用于定义输出要素类中的字段。
最后GetParameterAsText(2)
语句会创建一个变量f
,该变量用于保存要读取的逗号分隔符文本文件。
链接:https://pan.baidu.com/s/1JEeJbTZRglWaCbK_eAnr-A 密码:d02l
http://zhihu.esrichina.com.cn/article/3317