Fall 2026 · Department of Geography and Sustainability · University of Tennessee
This is the course website for GEOG 312. It holds the lecture notebooks, lab assignments, syllabus, and schedule for the Fall 2026 offering. Everything here is public, so you are welcome to work through it even if you are not enrolled.
Course at a Glance¶
| Meetings | Tuesdays and Thursdays, 12:55 to 2:10 p.m. |
| Location | Burchfiel Geography Building (BGB) 206 |
| Term | August 17 to December 1, 2026 |
| Credit | 3 hours, letter graded |
| Instructor | Dr. Qiusheng Wu, BGB 309 |
| Office hours | Wednesdays and Thursdays, 8:00 to 9:00 a.m., and by appointment |
| qwu18@utk.edu |
Start with the syllabus, also available as a PDF, and the weekly schedule.
What You Will Learn¶
GEOG 312 is a programming course taught through geography. No prior programming experience is assumed. The first half of the semester covers Python itself. The second half applies it to real geospatial data using the open source tools that working analysts and researchers actually use.
By the end of the semester you will be able to:
Write, debug, and document Python programs using variables, data structures, control flow, functions, and classes.
Read, write, and convert common geospatial formats such as Shapefile, GeoJSON, GeoParquet, GeoTIFF, Cloud Optimized GeoTIFF, and NetCDF.
Perform vector and raster analysis, including spatial joins, reprojection, clipping, zonal statistics, and terrain analysis.
Build interactive 2D and 3D web maps and publish them as reproducible notebooks or dashboards.
Access and analyze cloud hosted geospatial datasets.
Course Materials¶
| Section | What is in it |
|---|---|
| Course Information | Syllabus, schedule, textbook, instructor |
| Software Setup | Installing Python, VS Code, Git, Colab, JupyterLab, Docker |
| Python Programming Fundamentals | Variables, data structures, strings, loops, functions, files, NumPy and Pandas |
| Geospatial Programming with Python | GeoPandas, Rasterio, Xarray, Leafmap, WhiteboxTools, MapLibre, geemap, GeoLibre, HyperCoast, DuckDB, GDAL, Solara, Sedona |
| Labs | Ten lab assignments and how to submit them |
Textbook¶
The required textbook is Introduction to GIS Programming: A Practical Python Guide to Open Source Geospatial Tools by Qiusheng Wu (2025). Every code example from the book is free and runs in your browser, so you can follow along from day one while you sort out where to buy a copy. See the textbook page for print, PDF, and EPUB options, and for the companion video tutorials.
Running the Code¶
Every chapter page has Open in Colab and Binder badges at the top. Click either one and you are running the notebook in a few seconds with nothing installed. That is the fastest way to start, and it is a perfectly good fallback all semester if your laptop gives you trouble.
We will also set up a local environment together in Week 1, because being able to run code on your own machine matters once your projects outgrow a browser tab. See Software Setup.
If you prefer Docker:
docker pull giswqs/pygis:book
docker run -it -p 8888:8888 -v $(pwd):/app/workspace giswqs/pygis:bookEnroll for Certification¶
Please note that you can access the course materials and lecture videos on the course website without enrolling in the course. However, if you’re interested in submitting lab assignments, receiving grades, and earning a certificate of completion, you can enroll in the course at any time by clicking the link below. There is no deadline for enrollment, and you can complete the course at your own pace.

Getting Help¶
Technical questions belong on the GitHub Discussion board. Installation problems, error messages, and “why does my code do this” are all fair game, and posting there means everyone benefits from the answer. Up to 30 extra credit points are reserved for students who help answer classmates’ questions.
Private matters such as grades, accommodations, or family circumstances go to qwu18@utk.edu with “GEOG-312” in the subject line.
Announcements, submissions, and grades live on Canvas.
Office hours are Wednesdays and Thursdays, 8:00 to 9:00 a.m. in BGB 309. You do not need a reason to come, though bringing broken code is a perfectly good one.
License¶
Course materials in this repository are released under CC BY 4.0. The text and figures of the printed textbook are copyrighted by the author and are not reproduced here. See the textbook page for details.