Geoprocessing using Python

advertisement
Geography 465
GIS Database Programming
Getting Started with GIS Database Programming
See Geog 465 course web site for
Overview and Schedule
What is GIS Database Programming?
• Geoprocessing - application of GIS operations
on a set of data inputs for generating
information.
• Database (DB) programming – the part of
geoprocessing focusing on DB manipulation;
not quite spatial analysis but almost.
• Use scripting to automate DB programming
Why write scripts?
• Scripts supply the added benefit of
decision making logic and looping
functionality
• Automate a work flow, for example:
– Copy all incoming data into a geodatabase
– Perform a project, clip, buffer operation on
multiple data sets (iterate)
• Easily distribute code
– A script is a self-contained, single file
Why use Python for Scripting?
• An open-source, object-oriented, scripting
language
• Offers IDE (integrated development environment)
with debugging tools
• Modular, can be broken apart
• Ability to compile scripts
• Installed with ArcGIS 9 and ESRI samples
provided
Writing code in Python
• Writing Python code
– Python command line
– IDE (integrated development environment)
e.g., PythonWin, IDLE, Komodo
– Michalis suggests using Komodo Edit
http://www.activestate.com/Products/komodo_id
e/komodo_edit.mhtml
• IDE allows you to perform all jobs from one
location
– Write, Save, Run, and Debug code
IDE Interface should have
• Script window
– Write and save code
• Interactive window
– Test lines of code
– Report messages
• Menus and Toolbars
– standard and debugging
Basics of Python
• Comment: A non-executable line of code
– One number sign (#) for green and italicized
– Two number signs (##) for gray
# Name: Michalis Avraam
# Date: January 5, 2009
# Purpose: To buffer a feature class
import win32com.client
gp = win32com.client.Dispatch(“esriGeoprocessing.GpDispatch.1”)
## gp.Workspace = “C:\\Python_Data\\SanDiego.mdb”
Gp.Buffer_analysis (“Freeways”, “BuffFreeway”, 1000)
• Can comment and uncomment blocks of code
Creating Scripts in Python
• Use of ArcGIS help system to find:
– Usage, command syntax, and scripting
examples of standard ArcToolbox tools,
– Usage and syntax of Geoprocessor properties
and methods, which are only accessible
through scripting
Running Python Scripts
Three Modes
1) Running scripts in IDE
2) Running scripts as script tools in ArcGIS
3) Running scripts as embedded model
components in ArcGIS
(non) Running Scripts in Python
• Problem with the schema lock
– Cannot manipulate with the same file open in
ArcGIS and in IDE at the same time
Running scripts in PythonWin
Example of a simple script to buffer a feature class
# Name: Tim Nyerges
# Date: January 5, 2009
# Purpose: To buffer a feature class
import win32com.client
gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1“
gp.Workspace = "C:\\Python_Data\\SanDiego.mdb”
gp.Buffer_analysis ("Freeways", "BufferedFreeways", 1000)
Debugging the Code
• Test code in IDE
– A check for syntax errors
• Do not test a script from ArcToolbox
• Test code in IDE, then add it to ArcToolbox
Running scripts in IDE
• Run the script
• Check the messages that return:
– While the script is running you will see the message
“running script <….>.py”
- The indication of the successful run is the message
“Script <….> returned the exit code 0”
• Display the result in ArcCatalog
Running scripts in IDE
Example of a simple script to clip a feature class
# Name: Tim Nyerges
# Date: January 3, 2007
# Purpose: To clip a feature class
import win32com.client
gp =win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
gp.Workspace = "C:\\Python_Data\\SanDiego.mdb"
gp.Clip_analysis ("MajorAttractions", "SDdowntown",
"SDdowntownAttractions")
Running scripts in IDE
Example of a simple script to buffer and clip a feature class
# Name Tim Nyerges
# Date: January 5, 2009
# Purpose: To buffer SD freeways first and then to clip the downtown section
# of freeways
import win32com.client
gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
gp.Workspace = "C:\\Python_Data\\SanDiego.mdb"
if gp.Exists(gp.Workspace + "\\bufferedFreeways"):
gp.Delete_management(gp.Workspace + "\\bufferedFreeways")
gp.Buffer_analysis ("Freeways", "bufferedFreeways", "500")
gp.Clip_analysis ("bufferedFreeways", "SDdowntown", "downtownFreeways")
Michalis will get you started in labb
session… “hands-on”
Python and Komodo edit
Variables in Python
• Variables are dynamically typed
– No declaration required
– No type assignment required
fc = “C:\\ProjectData\\SanDiego.mdb\\Freeways.shp”
• Variables are case sensitive
fc = “Freeways.shp”
Fc = 20000
Two different variables
• Variables can hold different data types
– numbers, strings, lists, files
Numbers
• Variables can hold numbers and expressions
num1 = 1.2
num2 = 3 + 5
Strings
• Variables can hold strings
folder = “c:/Student”
• Strings are surrounded in double (“) or
single (‘) quotes
• Pathnames use two back (\\) or one
forward (/) slash
One backslash (\) is a reserved escape
character and a line continuation character
Strings
• Strings can be combined together
gdbPath = “c:\\SanDiego.mdb”
fc = “Roads”
fullPath = gdbPath + “\\” + fc
• Strings are indexed
C:\SanDiego.mdb\Roads”
– strings are zero-based from the left and one-based from
the right
fc = “Streets.shp”
fc[0]
---> “S”
# S is in the 0 position
fc[1:3]
---> “tr”
# start at 1st, up to not including 3rd
fc[:-4]
---> “Streets” # get rid of the last 4 charaters
Lists
• Variables can hold lists
numList = [1, 2, 3]
fcList = [“Roads”, “Streets”, “Parcels”, “Zipcodes”]
• Lists are indexed
fc1 = fcList[1]
fc2 = fcList[0:2]
fc3 = fcList[0:-1]
fc4 = fcList[2:]
---> “Streets”
---> “Roads”, “Streets”
---> “Roads”, “Streets”, “Parcels”
---> “Parcels”, “Zipcodes”
Variable naming conventions
• Upper case versus lower case
– First word lower case, capitalize each successive word
tableFieldName = “Street”
- Acronym at the beginning, use lower case letters
gdbPath = “C:\\SanDiego.mdb”
- Acronym in the middle or at the end, use upper case letters
inputFC = “Streets.shp”
• Avoid special characters (for example / \ & % # !)
• Use descriptive variable names
Line continuation
• Line continuation characters
– Parentheses ( ), brackets [ ], and braces { }
– Backslash \
• Indentation is automatic
fcList = [“Roads”, “Climate”, “Streams”,
“Zipcodes”, “Coastlines”]
distanceValues = 100, 200, 300, 400, 500, \
1000, 1500
gp.Buffer_analysis(fcList[2], BuffStreams1000,
distanceValues[5])
Download