Introduction to Python for ArcGIS
Renzo Sanchez-Silva
Claudia Engel
Patricia Carbajales
http://bit.ly/pythonGIS
Does this describe you?
• New to Python scripting
• Comfortable using ArcGIS but want to become
more efficient
• Moving to Python from other scripting language
• Interested in Python for geospatial
Agenda
• Python scripting essentials
- What is Python? Why use Python scripting?
- Python 101: How to run it. Basic control structures and
data types, importing libraries.
- What is ArcPy?
- Scripting geoprocessing tools. Introducing ModelBuilder
(MB) and ArcToolBox. Manipulating MB Python scripts.
- Basic example exercises
• Beginner geospatial project with Python
• Connecting R from Python Demo
Python Scripting Essentials
What is Python?
• “Python is an easy to learn, powerful
language… (with) high-level data structures
and a simple but effective approach to object-
oriented programming. Python’s elegant
syntax and dynamic typing…make it an ideal
language for scripting…in many areas and on
most platforms.” –python.org
• Scripting language of ArcGIS
• Free, cross-platform, easy to learn, great
community
Why use Python scripting?
• There are many ways to run
single tools
• Use scripting to develop,
execute, and share
geoprocessing workflows
• Improves productivity
Python 101
• Where do I write Python code?
- IDE like PythonWin or PyScripter
- Python window in ArcGIS
• How do I run a Python script?
- Double-click or cmd prompt
• What are variables?
input-=A name that stores a value; assigned using =
"C:/Data/Roads.shp"
distance = 50
both = [input, distance]
# Variables act as substitutes for raw values
arcpy.Buffer_analysis(input, "Roads_buffer.shp", distance)
Python 101
• Python has logic for testing conditions
- if, else statement
- Colon at end of each condition
- Indentation determines what is executed
- == tests equality; other operators like >, <, !=
var = "a"
if var == "a":
# Execute indented lines
print("variable is a")
else:
print("variable is not a")
Python 101
• Techniques for iterating or looping
- While loops, for loops
- Colon at end of statement
- Indentation determines what is executed
x=1
while x < 5:
print x
x=x+1
x = [1, 2, 3, 4]
for num in x:
print num
Python 101
• Case sensitivity
- Variables, functions, etc. are case sensitive
- name ‘X’ is not defined, function ‘X’ does not exist
• Building blocks
- Function: a defined piece of functionality that performs a specific task;
requires arguments ()
- Module: a Python file where functions live; imported
- Package: a collection of modules
- math.sqrt(100) … 10.0
- “There’s a module for that”
ArcPy
• The access point to geoprocessing tools
• A package of functions, classes and modules, all related to
scripting in ArcGIS
- Helper functions that enable workflows (ListFeatureClasses, Describe,
SearchCursor, etc)
- Classes that can be used to create complex objects (SpatialReference,
FieldMap objects)
- Modules that provide extended functionality (Mapping, SpatialAnalyst
modules)
• Enhancement of arcgisscripting module (pre-10.0)
- Your old scripts will work
ArcGIS Python window
• Embedded, interactive Python window within ArcGIS
- Access to ArcPy, any Python functionality
• Great for experimenting with Python and learning tool syntax
- Help pane
Scripting geoprocessing tools
Demo
Executing a tool in Python
• ArcPy must be imported
• Follow syntax: arcpy.toolname_toolboxalias()
• Enter input and output parameters
# Import ArcPy
import arcpy
# Set workspace environment
arcpy.env.workspace = "C:/Data"
# Execute Geoprocessing tool
arcpy.Buffer_analysis("Roads.shp", "Roads_buffer.shp", "50 Meters")
Getting tool syntax
• Tool help page
• Copy as Python Snippet
• Export Model to Python script
• Drag tool into Python window
• help(“arcpy.Buffer_analysis”)
Setting environments in Python
• Accessed from arcpy.env
- Workspace, coordinate system, extent, etc.
• Global parameter
- See tool help for honored environments
• Provides finer control of tool execution
• Makes scripting easier
arcpy.env.workspace = "C:/Data"
arcpy.env.extent = "0 0 100 100"
Error handling
• Why do errors occur?
- Incorrect tool use
- Typos
- Syntax errors
• What can I do if my script doesn't
work?
- View the geoprocessing messages
- Use Python error handling
- Debug the script in an IDE
Geoprocessing messages
• Three types of messages:
- Informative messages
- Warning messages
- Error messages
• Displayed in the Python window
• arcpy.GetMessages()
- (): All messages
- (0): Only informative messages
- (1): Only warning messages
- (2): Only error messages
arcpy.GetMessages
# Execute Geoprocessing tool
arcpy.Buffer_analysis("Roads.shp", "Roads_buffer.shp", "50 Meters")
# Print the execution messages
print(arcpy.GetMessages())
>>>
Executing: Buffer Roads.shp Roads_buffer.shp '50 Meters'
Start Time: Tue July 12 08:52:40 2011
Executing (Buffer) successfully.
End Time: Tue July 12 03:52:45 2011(Elapsed Time: 5.00…
Python error handling
• Try…Except…
- "Try to do something, and if an error occurs, do
something else!"
# Start Try block
try:
arcpy.Buffer_analysis("Roads.shp", "Roads_buffer.shp", “50 Meters”)
# If an error occurs
except:
# Print that Buffer failed and why
print("Buffer failed")
print(arcpy.GetMessages(2))
ArcPy Functions
ArcPy functions
• Helper functions
• Perform useful scripting tasks
- Print messages (GetMessages)
- List data to perform batch processing
(ListFeatureClasses, 12 total List
functions)
- Getting data properties (Describe)
- Etc.
• Supports automation of
manual tasks
Batch processing
• Run a geoprocessing operation multiple times with some
automation
- Clip every feature class in a geodatabase to a boundary
- Calculate statistics for every raster in a folder
• List functions used in Python to
perform batch processing
• One of the highest values in scripting
arcpy.ListFeatureClasses
# Set the workspace
arcpy.env.workspace = "C:/Data/FileGDB.gdb/FDs"
# Get a list of all feature classes
fcList = arcpy.ListFeatureClasses()
# Print the list of feature classes one at a time
for fc in fcList:
print(fc)
ArcPy functions -- Describe
• Use the Describe function to read data properties
- Returns an object with properties
• Allows script to determine properties of data
- Data type (shapefile, coverage, network dataset, etc.)
- Shape type (point, polygon, line, etc.)
- Spatial reference
- Etc.
# Describe a feature class
desc = arcpy.Describe("C:/Data/Roads.shp")
print(desc.shapeType)
>>> "Polyline"
Batch Processing
Exercise
Accessing R with python, rpy2
Demonstration by Claudia Engel
Demo
Python scripting resources
• ArcGIS Resource Center
- resources.arcgis.com
- Online documentation
- Geoprocessing: script gallery,
blog, tutorials, presentations
• python.org
• Python References
- Learning Python by Lutz, et al.
- The Python Standard Library by
Example by Hellmann
- diveintopython.org
Please complete our post-workshop
survey
http://bit.ly/gisworkshopsurvey
Thanks!