GEO 825 (Spring 2007) - Weekly Schedule

Syllabus: http://www.msu.edu/~ashton/classes/825

Week 1: Jumping In
Tuesday, Jan 9 : Course Description, Introduction. Syllabus. What is Geocomputation?
For Thursday: Skim: Geocomputation Conference Page. Read what Mark Gahegan has to say there (look under 'Detailed Definition'). Skip around in the old abstracts (the 2005 conference is linked as well as the others). Find one or two that look interesting and be prepared to discuss what they were about and why you were interested. Read the overview of Python at: the official site. You might look into installing Python on your own machine.

Thursday, Jan 11 : Geocomputation Discussion, Getting started with Python
Discuss geocomputation, the papers (@ 3 minutes per person), and basic programming language stuff. Sun Lab intro, Start cranking on Python. Learn starting, stopping the interpreter. Then work through Byte of Python Ch 1 & 3. Finally, save session1.py to your lab space, open it in a text window, and follow along (Python as a calculator, printing to screen, simple variables)
For Tuesday:
Read Eric Raymond's The Cathedral & the Bazaar. There's a lot in this reading. Focus on the role and means of computer processing, and be prepared to discuss it in class.
Go through Byte of Python Ch 4 before Tuesday's class. Explore http://python.org. Consider installing it on your own machine. Also see the Official Python Tutorial. This may be helpful - it is a little more difficult than the Byte of Python tutorial. IF YOU ARE WORRIED: Browse this good tutorial as well. The more you are typing stuff in the interpreter, the better.

Week 2: Life of Brian
Tuesday, Jan 16 : Operators
Discuss Cathedral & Bazaar. Talk about data types and other important Python issues. Work through Byte of Python Chapter 5. Download session2.py and go through it line by line.
For Thursday:
Finish session2.py if necessary.

Thursday, Jan 18 : Decisions and Control Flow
Work through Byte of Python Chapter 6. Download session3.py and go through it line by line. Quiz 1.
For Tuesday:
Read Marble's discussion of GIScience Education. This was a keynote at the 1997 GIS & Higher Education conference. Some questions to consider or research further: Why would I make you read an education piece? Who is Duane Marble? What is his critique of GIS education at the time? What was his vision? GIS has changed since 1997; what, if any, arguments remain valid? Go through Byte of Python Chapter 7 (Functions). Functions are a critical aspect of programming, so be sure you understand them.

Week 3: Ripping Yarns
Tuesday, Jan 23 : Functions
Discuss the Marble paper. Then work through Byte of Python Chapter 8 (Modules). Download average.py and read the comments and follow along. This should make using modules clear to you. After that, work on the first Mini-Project: develop your own module to work with point coordinate data! Assignment details are in session4.txt. Download the partially completed module latlontools.py and see what you can do.
For Thursday:
Finish the miniproject. Your working code for this counts as Quiz 2.

Thursday, Jan 25 : Data Structures
Show off miniproject results. This counts as Quiz 2. Work through Byte of Python Chapter 9 (Data Structures). Work on session5.py. This enhances your miniproject by letting you work with strings. I know that gap was bothering you from the miniproject - I live to resolve your concerns!
For Tuesday:
Data structures are if anything more critical to geoprocessing than functions (is that possible?). To be sure you understand Python's structures, work through Official Python Tutorial Chapter 3 (Intro), which should be simple, and Chapter 5 (Structures), which won't be so easy. The quiz on Tuesday will cover data structure issues. Finish session5.py if necessary.

Week 4: Live at the Hollywood Bowl
Tuesday, Jan 30 : File I/O
Quiz 3. Work through Byte of Python Chapter 12 (File Input/Output). Then work on session6.py, which provides some chances to work with data structures on point data, and to do spatial file I/O. You will also need mi_cities.txt for this exercise.
For Thursday:
Finish session6.py if necessary.

Thursday, Feb 1 : Line Intersection & GIS line files
Discussion of line intersection algorithm. Data structures for (poly)lines. First skim Python Tutorial Section 7. Work through session7.py on line intersection. The following files will be helpful:

  1. zip_A.csv, zip_B.csv, edit_zips.py, del_dupe_zips.py
  2. hw.gen, rr.gen
  3. intersection.py
For Tuesday:
Complete the three challenge code chunks from session7.py. They comprise Quiz 4! Read: NCGIA CCGIS Unit 183: Transportation (Network Topology). Pay especially close attention to the data model section. Read about data representations in Worboys & Duckham, A Computing Perspective, or elsewhere. There is a good discussion on spaghetti, NAA and DCEL models.

Week 5: Spamalot
Tuesday, Feb 6 : Vector Spatial Structures & Algorithms
Quiz 4 (assignment from Session 7). Discuss readings on topology. Discussion of data structure issues and algorithm coding - sidedness, area, etc.. Work on session8.py (operations on lines). Additional useful files: pl.py: plots lines and points to a graphics device; pointmap.pdf: hardcopy plot of some point and line features.
for Thursday:
Finish session8.py

Thursday, Feb 8 : Network Traversal
Dijkstra's shortest path. Discussion of data structures. Then coding! A start on this work is session9.py
For Tuesday:
Work on Session 9. Go through Byte of Python Chapter 14 (Standard Library). It is very short and incomplete but it will give you a quick sense of how you can use Python to interact with your system.
Check out what the Wikipedia has to say about object-oriented programming. Some of it may be inscrutable, but it should give you valuable context. OpenGIS is a consortium that develops data specifications to encourage interoperability. Visit the OGIS specs page and take a look at Simple Features - SQL(pdf). Do NOT read the whole thing - all the SQL stuff is irrelevant. Peruse Chapter 2, which lays out an object-oriented approach to modeling GIS data.

Week 6: Time Bandits
Tuesday, Feb 13 : Object-Oriented Programming
Begin with a look back at the intersection code (zipped folder), with a graphical example. Object-oriented programming discussion. Work on Byte of Python Chapter 11 (OOP), and then do session10.py. Also, train.py would be helpful.
for Thursday:
Finish session10.py. This will serve as Quiz 5.

Thursday, Feb 15 : O-O Design & Programming
Quiz 5 (working code from session 10). Design issues in OO. Discuss the OpenGIS specs for a set of spatial classes. Develop some classes and methods from this specification - geometry.py and geometryTest.py will get you started on this. Finally, session11.py includes the assignment for Tuesday, if no actual code.
For Tuesday:
Finish session11.py; presenting this serves as Quiz 6. Read what Wikipedia has to say about UML. Also read UML for Managers Chapters 1 and 2. Finally, if you are looking for more online tutorials on o-o programming in Python, a very nice one is in How to Think Like a Computer Scientist: Learning with Python. Chapters 12-16 deal with many important aspects in a readable way.

Week 7: Flying Circus
Tuesday, Feb 20 : Graphical Display
UML discussion. Introduction to graphical programming. Presentations of geometry and oop code (Quiz 6). Why pygame? Handling display devices with pygame. Drawing and object orientation. Useful code: geometry.py, GISgraphics.py, and arcgen.py.
Useful test files: geometryTest.py and testGISgraphics.py
Start on session12.py.
for Thursday:
Finish session12

Thursday, Feb 22 : Mini Project Day
Demo polygon code (Quiz 7). Introduce potential projects. Choose a project. Consult with me, and begin work!
for Tuesday:
Work on the Mini Project!

Week 8: Python Regius
Tuesday, Feb 27 : Mini Project Day
Show off your design and implementation model (counts as Quiz 8). In-class project work.
for Thursday:
Finish the project!

Thursday, Mar 1 : Spatial Indexing
Starting at 2:40 pm we do presentations / demos (counts as Quiz 9). Discuss stacks, queues, and linked lists. Tree structures for indexing. Implementation details. Load session 15 with questions for next time. Also get stackqueues.py readGNIS.py, and twoDindex.py, and if you want an associated data file.
for Tuesday (post-break):
Finish session15

Week 9: SPRING BREAK

Week 10: Not the Messiah
Tuesday, Mar 13 : SQL and Databases
Reassess stacking, queueing, and indexing. SQL refresher - see this SQL lab from GEO 425. Working with MySQL in Python: see this barebones script for interfacing with a MySQL database. Thursday's assignment is a good one. Load session 16 with the assignment itself, along with hints. You will also want:
drawCoast.py, which draws some coastal data. It requires...
vector.zip, which is a directory/package containing data class and display modules for vector data. It should look familiar. Unzip the file in your working directory.
amer_tropics.csv.zip, a zipped text file with polyline data, also required for drawCoast.
for Thursday:
Finish session16

Thursday, Mar 15 : Database-oriented GIS
Session 16 demos and discussion. Using MySQL as the database. Check out lansingDB.py. This requires readGNIS.py and s17functions.py, as well as the data: lansingGNIS.csv. Finally, you'll want vector.zip from last time. UPDATE: grab the usa_merc.csv file too - this is a USA boundary file, in Mercator. The next assignment is session17.py, and is due on Tuesday.
for Tuesday:
Finish session15

Week 11: Bothrochilus Boa
Tuesday, Mar 20 : Raster Data Structures
Discuss session15 results. Finish off databases by discussing OGR and importing shapefiles. See test_shapefile.py and test_readshape.py for more on this. The data folder (zipped) will be useful, as will the vector folder (zipped). Raster discussion. See testrastdraw.py, raster.py, and mapcolors.py. Also get asciiraster.py. And here's session18.py.
for Thursday:
Finish session 18

Thursday, Mar 22 : Raster Data Structures & Algorithms
Review session 18 results. Raster operations. Computational issues. See operators.py for hints on implementing operations cleanly. Then work on session19.py
For next week:
Finish session 19 (Tue)
Read Hogeweg (1988) (Thur)

Week 12: Brazil
Tuesday, Mar 27 : Raster Data Formats
Review Session 19 results. Discuss the gdal library functionality for importing various raster formats. The improved spatial module (zip archive). It draws features, especially rasters, better. Work on session20.py (code improvement).
for Thursday:
Finish session 20
Read Hogeweg, Lilijana (2006), and Albrecht (1999).
For more background on CA, Jeff suggests: http://cafaq.com/ and http://www.rennard.org/alife/english/acgb.html.

Thursday, Mar 29 : Spatial Models; Cellular Automata
Review results for session 20. Overview of spatial modeling. Discussion on Cellular Automata. Implementing CA (zip archive) in Python using the spatial module. Start session21.py (extending Life).
For next week:
Finish session 21

Week 13: Fawlty Towers
Tuesday, Apr 3 : Cellular Automata
Review Session 21. In-class development of a fire CA model. session22.py (extending the fire model). After demo, grab the zipped archive.
for Thursday:
Finish session 22

Thursday, Apr 5 : Internet Applications
Demo fire model updates (session 22). Discuss Python's networking functionality. Demonstrate some tricks. Look at NOAA weather code. Work on session23.py.
For next week:
Read CASA Working Paper 110 (pdf downloadable from this site)
Finish session 23

Week 14: A Fish Called Wanda
Tuesday, Apr 10 : Spatial Agent-Based Models
Demo network code. Discussion of agent-based spatial modeling. A conceptual implementation of Boids. Looking over the code (zip file). Start on session24.py.
for Thursday:
Finish session 24
Find, read, and develop a short presentation on a spatial ABM paper

Thursday, Apr 12 : Spatial Agent-Based Models
Demo modified Boids code. Discuss each paper. About Ants - see the online documentation, and download the ants code (zip file). Coding challenge! Complete the first part of session25.py in class. The second part is due Tuesday.
For next week:
Finish session 25

Week 15: Morelia Spilota Cheynei
Tuesday, Apr 17 : Spatial Agent-Based Models
Demo the latest Ant code. Discussion of its functioning. Group enhancement of ant code, including a new class. Download the latest ants code (zip file). Project questions.
for Thursday:
Work on project. Prepare a short discussion on project goal and programming design.

Thursday, Apr 19 : Spatial Agent-Based Models
Project presentations and questions. Identify a particular element that you intend to solve during class, and do it. Grab session27.py for completion by next time, along with the final ants code (main python file only).
For next week:
Finish session 27

Week 16: Holy Grail
Tuesday, Apr 24 : Project Time
Demo your species competition (session 27). Course overview discussion and assessments. Project time, with consulting assistance.

Thursday, Apr 26 : Project Time
Discussion of final project parameters. Project time, with consulting assistance.

Week 17: (Finals Week): Presentations
Mon, Apr 30, 3-5 pm : Presentations

Last Modified April 19, 2007