您的位置:首页 > 其它

Arcpy基础入门-4、arcpy工具进阶

2014-11-15 15:52 691 查看
在使用arcmap工具箱里的工具的时候,如果已经加载相应的图层或者数据,就可以使用下拉列表的方式进行选择,也就是说工具会自动加载这些图层只需要选择即可。这一节就说下如何自动化的选择图层和数据。

1、 设置参数类型为相应的Featurelayer、RasterLayer等带Layer的参数

看一个实例代码:

import arcpy

#获取图层

fc = arcpy.GetParameter(0)

arcpy.RepairGeometry_management(fc)

按照教程三创建arcpy工具,设置参数时候如下进行设置:



就可以实现图层的自动选择,如下图:





2、 通过代码自动获得图层或者数据

看一个实例代码:

import arcpy, os

#Read parameters from dialog

mxdPath = arcpy.GetParameterAsText(0)

dfName = arcpy.GetParameterAsText(1)

layerName = arcpy.GetParameterAsText(2)

layerFile = arcpy.GetParameterAsText(3)

outMXD = arcpy.GetParameterAsText(4)

#Update layer symbology

mxd = arcpy.mapping.MapDocument(mxdPath)

df = arcpy.mapping.ListDataFrames(mxd,dfName)[0]

updateLayer = arcpy.mapping.ListLayers(mxd,layerName)[0]

sourceLayer =arcpy.mapping.Layer(layerFile)

arcpy.mapping.UpdateLayer(df, updateLayer,sourceLayer, True)



#Save changes to new MXD and automaticallyopen

mxd.saveACopy(outMXD)

os.startfile(outMXD)

del mxd, sourceLayer



其工具参数如下设置:



参数设置后面有个Validation



通过下面的Edit按钮可以对里面的代码进行编辑,编辑之后,点击保存,并点击下面的应用按钮即可。粘贴代码如下:

class ToolValidator:

"""Class for validating a tool's parameter values andcontrolling

thebehavior of the tool's dialog."""



def__init__(self):

"""Setup the Geoprocessor and the list of toolparameters."""

import arcpy

self.params = arcpy.GetParameterInfo()



definitializeParameters(self):

"""Refine the properties of a tool's parameters. This method is

called when the tool is opened."""

return



defupdateParameters(self):

"""Modify the values and properties of parameters beforeinternal

validation is performed. Thismethod is called whenever a parmater

has been changed."""

import arcpy



#Update Data Frames list

if self.params[0].value:

mxd = arcpy.mapping.MapDocument(self.params[0].value.value)



dataFrames = arcpy.mapping.ListDataFrames(mxd)

dfList = []

for df in dataFrames:

dfList.append(df.name)

dfList.sort()

if not self.params[1].altered:

self.params[1].filter.list = dfList



#Update Layer list (in selected data frame)

if self.params[1].value:

df = arcpy.mapping.ListDataFrames(mxd, (self.params[1].value))[0]

lyrs = arcpy.mapping.ListLayers(mxd, "", df)

layerList = []

for lyr in lyrs:

layerList.append(lyr.name)

layerList.sort()



if not self.params[2].altered:

self.params[2].filter.list = layerList

return



defupdateMessages(self):

"""Modify the messages created by internal validation foreach tool

parameter. This method is calledafter internal validation."""

return
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: