python & modelbuilder. continuing education python and modelbuilder overview python/modelbuilder...

41
Python & ModelBuilder

Upload: kerry-morris

Post on 26-Dec-2015

242 views

Category:

Documents


2 download

TRANSCRIPT

  • Slide 1
  • Python & ModelBuilder
  • Slide 2
  • 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
  • Slide 34