Title: Geography 465 GIS Database Programming
1Geography 465 GIS Database Programming
- Getting Started with GIS Database Programming
2- See Geog 465 course web site for
- Overview and Schedule
3What 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
4Why 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
5Why 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
6Writing code in Python
- Writing Python code
- Python command line
- IDE (integrated development environment) e.g.,
PythonWin and Komodo - Michalis will use Komodo Edit (open source editor
- free) - http//www.activestate.com/Products/komodo_ide/kom
odo_edit.mhtml - IDE allows you to perform all jobs from one
location - Write, Save, Run, and Debug code
7PythonWin Interface
- Script window
- Write and save code
- Interactive window
- Test lines of code
- Report messages
- Menus and Toolbars
- standard and debugging
8Basics 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.G
pDispatch.1) - gp.Workspace C\\Python_Data\\SanDiego.mdb
- Gp.Buffer_analysis (Freeways, BuffFreeway,
1000) - Can comment and uncomment blocks of code
9Creating 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
10Running Python Scripts Three Modes
- 1) Running scripts in IDE, e.g. PythonWin
- 2) Running scripts as script tools in ArcGIS
- 3) Running scripts as embedded model components
in ArcGIS
11(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
12Running 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.G
pDispatch.1 - gp.Workspace "C\\Python_Data\\SanDiego.mdb
- gp.Buffer_analysis ("Freeways",
"BufferedFreeways", 1000)
13Debugging the Code
- Test code in Python Win (or other IDE)
- A check for syntax errors
- Do not test a script from ArcToolbox
- Test code in PythonWin, then add it to ArcToolbox
14Running scripts in PythonWin
- Run the script from the script window of
PythonWin - Check the message in the lower left corner of the
interactive window in PythonWin - While the script is running you will see the
message - running script lt.gt.py
- The indication of the successful run is the
message - Script lt.gt returned the exit code 0
-
- Display the result in ArcCatalog
-
15Running scripts in PythonWin
- 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.Gp
Dispatch.1") - gp.Workspace "C\\Python_Data\\SanDiego.mdb"
- gp.Clip_analysis ("MajorAttractions",
"SDdowntown", "SDdowntownAttractions")
16Running scripts in PythonWin
- 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.G
pDispatch.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")
17Michalis will get you started in labb session
hands-on Python and Komodo edit
18Variables 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
- Variables can hold different data types
- numbers, strings, lists, files
Two different variables
19Numbers
- Variables can hold numbers and expressions
- num1 1.2
- num2 3 5
20Strings
- 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
21Strings
- Strings can be combined together
- gdbPath c\\SanDiego.mdb
- fc Roads
- fullPath gdbPath \\ fc
- Strings are indexed
- strings are zero-based from the left and
one-based from the right - fc Streets.shp
- fc0 ---gt S S is in the 0 position
- fc13 ---gt tr start at 1st, up to not
including 3rd - fc-4 ---gt Streets get rid of the last 4
charaters
C\SanDiego.mdb\Roads
22Lists
- Variables can hold lists
- numList 1, 2, 3
- fcList Roads, Streets, Parcels,
Zipcodes - Lists are indexed
- fc1 fcList1
- fc2 fcList02 ---gt Roads, Streets
- fc3 fcList0-1 ---gt Roads, Streets,
Parcels - fc4 fcList2 ---gt Parcels,
Zipcodes
---gt Streets
23Variable 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
24Line 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(fcList2, BuffStreams1000,
distanceValues5)