1

I have created a script (see below) that works ok but only in case if all parameters are required inputs. Quite simple, Roads(line) and Trackts(polygon) feature classes , first buffer Roads and then clip to Tracts. There are more feature classes in Zion.gdb but I am just doing a test script to figure out optional input parameters.

What I need is that user should be able to select the layer they want to buffer, the layer they want to clip, the output location/name of the clip, and the buffer distance. All of it has to be optional. The problem is when I set for example Tracts and Tracts_Clip feature classes to optional in Script Parameters and do not apply them in script execution because I want only Roads buffer, the script does not work.

enter image description here enter image description here

import arcpy
from arcpy import env
 # set environment settings
 env.workspace = "C:/data/Zion.gdb"
 env.overwriteOutput = True
 # Script arguments
 Roads = arcpy.GetParameterAsText(0)
 if Roads == '#' or not Roads: 
 Roads = arcpy.GetParameterAsText(0) # provide a default value if unspecified
 Tracts = arcpy.GetParameterAsText(1)
 if Tracts == '#' or not Tracts:
 Tracts = arcpy.GetParameterAsText(1) # provide a default value if unspecified
 Tracts_Clip = arcpy.GetParameterAsText(2)
 if Tracts_Clip == '#' or not Tracts_Clip:
 Tracts_Clip = arcpy.GetParameterAsText(2) # provide a default value if unspecified
 Buffer_Distance = arcpy.GetParameterAsText(3)
 if Buffer_Distance == '#' or not Buffer_Distance:
 Buffer_Distance = arcpy.GetParameterAsText(3) # provide a default value if unspecified
 # Local variables:
 Tracts_Clip = arcpy.GetParameterAsText(2)
 Buffer_Distance = arcpy.GetParameterAsText(3)
 Roads_Buffer = "Roads_Buffer"
 # Process: Buffer
 arcpy.Buffer_analysis(Roads, Roads_Buffer, Buffer_Distance,"FULL", "ROUND", "ALL", "", "")
 # Process: Clip (1)
 arcpy.Clip_analysis(Tracts, Roads_Buffer, Tracts_Clip, "")
PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
asked Mar 13, 2017 at 19:25
1
  • you can est your defaults in the parameter tab of the tool properties, rather than needing to do it in the script. Commented Mar 13, 2017 at 22:53

1 Answer 1

2

You can build a simple logic testing whether user has provided any value for each of parameters:

import arcpy
Roads = arcpy.GetParameterAsText(0)
Tracts = arcpy.GetParameterAsText(1)
roads_def = 'path to feature class'
tracts_def = 'path to feature class'
if Roads:
 arcpy.AddMessage(Roads)
else:
 arcpy.AddMessage('No parameter1 value; using {}'.format(roads_def))
 Roads = roads_def
if Tracts:
 arcpy.AddMessage(Tracts)
else:
 arcpy.AddMessage('No parameter2 value; using {}'.format(tracts_def))
 Tracts = tracts_def

Alternatively, you could use

  • ToolValidator class to update parameters values after user has provided a value for one or more other parameters;
  • Use default value associated with each of the parameters that user will see when starting the tool.
answered Mar 26, 2017 at 18:23

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.