[Bowdoin Computer Science]

Algorithms for GIS (csci 3225)

Fall 2017: Tu, Thu 1-2:25 in Searles 126

Piazza link | Schedule | Code | Data | Assignments

Basic Info

Prerequisites: csci 101 (Intro to CS), csci 2101 (Data Structures), and csci 2200 (Algorithms).

Textbook (required): none.

CS curriulum: This class fullfills the Projects requirement and the Theory requirement. What this means is that you can expect some theory as well as programming, culminating with a project.

TA: Jason Nawrocki

Office hours:

Class webpage: http://www.bowdoin.edu/~ltoma/teaching/cs3225-GIS/fall17/. Note that this is a link from my personal website at Bowdoin. This site will contain all class-related material along the semester. The class does not have a Blackboard site so that it is publicly available to everyone.

For all class-related communication we'll be using Piazza (link is at the top).


Geographic Information Systems (GIS) are systems for storing, displaying and analyzing geographically referenced, or geospatial data. GIS started in the 1970's as primitive systems that served mainly to visualize maps.

Today, the term "GIS" may refer broadly to comprehensive packages like ArcGIS or GRASS that offer a wide spectrum of functionality, or to small libraries and modules that perform specialized tasks (LAS tools). Routine GIS tasks range from visualization; terrain analysis (modeling of phenomena like flow, radiation, erosion, deposition, infiltration, visibility); network computations (like shortest paths); surface simplification; working with point cloud datal and geospatial analytics using high-resolution satellite imagery, to do things like predict crop yields and detect archaeological artifacts.

GIS have become indispensable tools in disciplines like earth, atmospheric and oceanographic sciences, but also in the digital humanities and beyond. In the past twenty years, with the growth of computer technology and the explosion of digital data, GIS has seen a tremendous growth and established as a field of its own. Most recently, geospatial analytics are starting to tap into the huge amounts of satellite data available.

For some researchers (GIS users), GIS provide tools for modeling phenomena; The goal of studying GIS is to understand the wealth of functionality provided by standard GIS software like ArcGIS and how to model a new problem with the functionality provided by the package. For example, a city planner may want to find the best location to host an ugly construction. To this end, she might ask: What data is available? How can all the layers of data be integrated and shown on the same map? What sort of functions are provided by a particular GIS that can be used for this problem? Or, how can one display LiDAR data overlayed on river networks? Can LiDAR data be thinned?

For other researchers, the goal of studying GIS is to create new software that offers new functionality and improves in some way over the state-of-the-art. Geospatial data provides a rich source of problems, spanning from theory, to systems, data science and algorithm engineering. It has just started to become freely and widely available, and we are just beginning to tap into the possibilities it offers.

This class explores some of the fundamental theoretical problems encountered when working with GIS and geospatial data from an algorithmic point of view, and provides opportunities to implement and experiment with the solutions to these problems and assess their performance in practice especially concerning big data. The bulk of the work for the class comes from programming assignments, and the main goal is understanding the interplay between theory and practice and the importance of complexity analysis.

The goals:


Class will explore some fundamental topics in GIS that are interesting from an algorithmic point of view: A theme of the class will be handling large data and to this end we'll dive into parallel algorithms in the SMP model (with OpenMP). Time permitting, we will also do some graphics.

Tentative syllabus

  1. Intro and setup
  2. Cache-efficient algorithms.
  3. Space-filling curves.
  4. Data models.
  5. Viewsheds.
  6. Total viewsheds.
  7. Parallel SMP programming with OpenMP.
  8. Quadtrees.
  9. Terrain simplification.
  10. Topics.
  11. Topics.
  12. Project.
  13. Project.
  14. Final demo: December 18th, 2-5pm (according to polaris).

Work and collaboration policy

Most of the work for the class will come from programming assignments, some of which are framed as smaller assignments culminating with larger projects. There will be a final project that will occupy the last 3-4 weeks of the class, and there will be presentations, proposals and reports associated with the final project. Class participation will be weighed in.

Collaboration policy: You can work alone if you want, but you are encouraged to find a partner. I think teams of two are ideal given the size of the projects. You may also consider alternating between working alone and with a partner, and changing partners. There are many advantages to working in a team (e.g. more fun, more learning) and it's a good skill to develop. However please keep in mind the honor code for the class:

If you chose to work with a partner, you must work together, physically in the same place, for every project that you do together. The overall project must be a true joint effort, equally owned, created and understood by both partners.

Specifically splitting the problem into parts and working on them separately is not allowed and violates the honor code for the class.

If you start together as a team and are unable to complete the project together, then you will each inherit teh shared code, and split up to work individually on the remainder of the project. You would then submit individually, with a note on what happened.