Continuing Education Python and ModelBuilder Overview
Python/ModelBuilder Concepts The Geoprocessor Checking some
environment variables Providing feedback from your model/script
Starting a script with a model Bringing a completed script into
ArcToolbox Exercises
Slide 3
Continuing Education Python and ModelBuilder Why model or write
scripts? Automate workflows Test hypotheses Reproducibility Extend
Functionality Simplification Quality Control
Slide 4
Continuing Education Python and ModelBuilder The Geoprocessing
Object Also known as the "geoprocessor" Has many methods Manages
layers and selections Provides access to all of ArcGIS's tools
Provides status of ArcGIS licensing Handles errors and warning
messages
Slide 5
Continuing Education Python and ModelBuilder The Geoprocessing
Object gp.Clip_analysis("Roads_2007", "Counties",
"Mercer_Roads.shp")
Slide 6
Continuing Education Python and ModelBuilder Check Data
Existence gp.exists() returns a boolean depending on whether or not
the feature class exists Check most user-submitted data for
existence if gp.exists(data): # continue working else: # warn user
about missing data ArcToolbox will check, but scripts run from the
command line will not
Slide 7
Continuing Education Python and ModelBuilder Defining a
Workspace When the geoprocessor has a workspace defined, all
processing results will be stored in that folder, geodatabase, or
SDE gdb gp.workspace = "C:\\Student\\ Backslash is an escape
character; ie a tab is \t, new line is \n For just a simple
backslash, you need to escape the escape character, which is why
its doubled. Once defined, we do not need to specify absolute paths
to datasets or outputs located in that workspace
Slide 8
Continuing Education Python and ModelBuilder Describe Method
gp.describe returns an object with numerous properties based on the
type of data passednumerous properties Feature Classes (shapefiles,
geodatabase layers) Feature Datasets Workspaces Raster Data
gp.describe provides you with GIS-specific information about your
data
Slide 9
Continuing Education Python and ModelBuilder Using the Describe
Method Use Describe to ensure that data passed to your model fits
certain criteria Prevent line or point features being used as Clip
Features Add an area and perimeter field to shapefiles if not
present Convert rasters to 8-bit unsigned if not already Use Python
to get a list of.shp files, then process only the polygon
shapefiles
Slide 10
Continuing Education Python and ModelBuilder Check License
Availability Models and scripts might be dependent on the level of
ArcGIS available The gp.CheckProduct("level") returns "Available"
or "NotLicensed" depending on the availability of the product level
passed The gp.SetProduct("level") tells the geoprocessor to use
that specific level
Slide 11
Continuing Education Python and ModelBuilder Handling Input
ArcGIS passes information to your Python script through sys.argv
For example, a clip script would need to listen for three inputs
Input Feature / sys.argv[1] Clip Feature / sys.argv[2] Output
Feature / sys.argv[3] Gets tricky when we ask for multiple
inputs
Slide 12
Continuing Education Python and ModelBuilder Providing Feedback
Geoprocessor methods to provide feedback gp.AddMessage(message
string) gp.AddWarning(message string) gp.AddError(message string)
Adds messages to the message list Message list is simply that
stores all the errors, warnings and messages generated by the
script
Slide 13
Continuing Education Python and ModelBuilder Providing Feedback
gp.GetMessage() and gp.MessageCount GetMessage(x) returns message
number x in the list print gp.GetMessage(gp.MessageCount - 1)
prints the last message generated Print messages at the end of
script or when an error is caught Print before and after a lengthy
processing step
Slide 14
Continuing Education Python and ModelBuilder Defining a
Function A Python Function allows you to write a block of code that
accepts arguments and returns results Functions allow you to write
something once and reuse it as needed Helps debugging Keeps code
clear and concise Easier to program
Slide 15
Continuing Education Python and ModelBuilder Using Functions We
use the def statement to start a block of code that will only be
run when our function is called We want our functions to return
values we can use in our geoprocessing The last statement in our
function should be return.
Slide 16
Continuing Education Python and ModelBuilder Basic Function A
simple function that adds 1 to value passed def addone(x): return x
+ 1 print addone(2) >>> 3 var = addone(3) print var
>>> 4
Slide 17
Continuing Education Python and ModelBuilder Multiple Clips
Like Exercise #2 from last week, we will provide two lists to a
script List of Input Features List of Clip Features We also need to
tell the script where to place the output, using
gp.workspace()
Slide 18
Continuing Education Python and ModelBuilder Start in
ModelBuilder
Slide 19
Continuing Education Python and ModelBuilder Export to
Python
Slide 20
Continuing Education Python and ModelBuilder Our First Function
We need a custom function that will take a string of text, split it
into pieces and return those pieces as a list SplitMultiInputs will
clean up a line of code and return it as a list
Slide 21
Continuing Education Python and ModelBuilder Adding
SplitMultiFeatures Add the function and split the input string and
the clippers string passed by the Toolbox to our script
Slide 22
Continuing Education Python and ModelBuilder Two Loops We will
need another loop for each of the inputs The "inputs" loop contains
the "clippers" loop The loops are structured like so: for input in
inputs: (runs m times) for clip in clippers: (runs n times) The
script will then perform mn clips
Slide 23
Continuing Education Python and ModelBuilder Completed
Script
Slide 24
Continuing Education Python and ModelBuilder Back to the
Toolbox Once our script is complete, we can test it in IDLE and on
the command line What we'd really want is to run our script like
any other tool in the Toolbox We can add the script back to the
Toolbox We need to specify how to talk to the script
Slide 25
Continuing Education Python and ModelBuilder Add Your Script
Open ArcToolbox Right click on the Toolbox you want your script to
be located Add > Script
Slide 26
Continuing Education Python and ModelBuilder Add Your Script
Our model takes two input parameters Input Feature Classes Clipping
Feature Classes Output Workspace Note that parameters can be set
for multiple values MultiValue = Yes
Slide 27
Continuing Education Python and ModelBuilder County Clipper
Well take a small ModelBuilder model that clips one input using the
statewide Counties layer Using Python, well enhance the model to
clip the input 21 times for each of the separate counties Add
functionality to clip multiple inputs by each county
Slide 28
Continuing Education Python and ModelBuilder Setting Up Our
Model We need a County layer as our clip feature, and a user-
defined layer as our input feature Make Feature Layer Select By
Attributes Clip (of course) User-defined Output Workspace
Slide 29
Continuing Education Python and ModelBuilder Basic Model to
Python Script loop just a portion of the model
Slide 30
Continuing Education Python and ModelBuilder Exported Python
Script
Slide 31
Continuing Education Python and ModelBuilder Adding County
Tuple We need a static list of County names to pass as part of the
Select by Attributes where clause Put all the County names into a
tuple Use a for loop to loop over the Select by Attributes and Clip
steps with different Counties each time for county in counties
Slide 32
Continuing Education Python and ModelBuilder Looping Our Model
loop just a portion of the model
Slide 33
Continuing Education Python and ModelBuilder Looping Our Model
For each county in the model prepare a SQL statement to select
County run the selection to create our clipping features use
selected features to clip create 21 output feature classes each
output layer named input_county