GEOG 490/590: GIS Programming

CRN: 44479/44486

Course Webpage:
(Or go to and select "Courses-> GEOG 4/590(W11)")

Instructor: Geoffrey Duh (Email:, Lesley Bross (Email:

Duh Office: CH 424J Phone: 503-725-3159 Office hours: Mon 1-3

Bross Office hours: by appointment; Available on gmail chat by appointment

Lectures/Lab: Tuesday, Thursday 10:00-11:50 in CH 469.

Course emailing list:

Pre-course survey: Go to the website below and follow the instructions to complete the questions by Jan 6, 5 pm.

Course Objectives

This course teaches students to develop custom-made applications in ArcGIS using the Visual Basic .NET (VB .NET) programming language and ArcObjects. Topics include ArcGIS software environment, VB .NET programming syntax and styles, ArcMap interface customization, ArcObjects routines and functions, and basic computing algorithms. Prerequisite: GEOG 488/588. After completing the course, students will be able to design and develop VB .NET add-in applications in ArcGIS.

Text and Readings

There is no required textbook used in class. The ESRI ArcObjects technology we will be learning is so new that no textbook has been published yet! Instead, students will read online ArcGIS and VB .NET documents or other digital documents provided by the instructor. The lecture component of this course consists of discussions of the readings and therefore you should have read the material before class. Students are expected to come to class ready to be active participants in the discussion.

ArcObjects References

VB .NET References

The following books have been reviewed by your instructors and are good reference books for VB .NET programming. We recommend that you choose at least one to add to your library. None is perfect but we?ll try to have a copy of each in class so students can review and pick their favorite(s).


The instructor will grade graduate and undergraduate students based on separate distribution curves. The components of a student's grade are listed in the table below.

Class Participation (10%)

Attendance to this course is mandatory. If you miss more than two class periods then you will be penalized five percent of your final grade per absence. PLEASE DO NOT MISS CLASS. You are expected to take part in the discussions and if you are not in class then you cannot. If you are repeatedly late you will be given an absence.

Lab Assignments (50%):

During the lab sessions (i.e., the second part of the class) you will develop VB .NET programs on the computers. If you do not finish the labs during the assigned time periods the lab (CH 469) has open hours. Labs in CH 475, Broadway Housing Building, Millar Library First Floor, and NH96 all have ArcGIS and Visual Basic 2008 Express on the computers. Students should submit their lab work digitally, with the source code, test data, and write-up documents zipped in one file. The title of the zipped file should include your last name and the lab number. For example: Submit the zipped file as an e-mail attachment to Lesley Bross: If the file size is too big to send via email, please put the zipped file in a network space and send the link to the Lesley Bross. The lab assignments will be evaluated based on several common software evaluation criteria. Click the link here to see an example of the assessment form.

Labs are due at the beginning of class on the due date. Labs will be accepted late for only one week after the deadline with a 10% point deduction. One week past the deadline, no lab(s) will be accepted unless arrangements have been made in advance.

Midterm Exam (15%):

There will be one in-class, closed-book midterm exam and no final exam. Unscheduled in-class quizzes will be administered without notifications. Results of these quizzes will be counted toward class participation.

Term Project (25%): (Student Projects)

Individual students will work on a GIS application they identify and develop VB .NET ArcGIS add-in to implement the application. Each student must submit a one-page description of the VB .NET ArcGIS add-in on the 5th week and present and demonstrate the add-in during the scheduled final exam time. Students' term project will be evaluated using a rubric developed by the instructors. Please review the rubric before the presentation to know project assessment criteria.

VB .NET Add-In Project Description Guideline

It's a good idea to browse online sources to see what VB .NET functions and subroutines are already available. This will give you a sense of the scope and complexity of the development environment. Each student is required to submit a typed project description to instructor Duh's mailbox in 424 CH or by email ( on February 3 before class. Your final VB .NET application will be implemented following the description. The description should include the following information.

  1. ArcGIS add-in Title: A sentence highlighting the main function of your add-in.
  2. Major function: A brief description of the functions of the add-in.
  3. Background: A short paragraph describing why the add-in is needed, the major problem it resolves, and the expected users and benefits.
  4. Prototype user interface: Use Powerpoint or any graphic design program you are familiar with to create a prototype of the user interface (buttons, fields, etc).
  5. GIS data will be used: Describe your study area, the GIS data layers, and the topological characteristics of these data layers.
  6. Particular algorithm: Describe any particular algorithms that will be implemented (e.g., sorting, random number generator, etc).

Add-In Demonstration:

You must develop a Powerpoint presentation that includes the essential information described in the ArcGIS add-in description and a reflection of the main challenges and major breakthrough in the project. Accompanying the presentation is a live demonstration of your add-in. You must acknowledge the source of any code that you incorporate in your add-in. You will fail this class if you commit plagiarism.

Click here for the information on the requests for academic accommodation and the policy on academic honesty.

VB.NET Course Schedule & Readings

Exercises are for classroom practice only.
Labs need to be turned in to the instructor.




Jan 4, 6

  • Course Overview
  • Programming Environment
  • Intro to Programming (Slides)
  • Before you start:
    1. Intro to VB 2008 programming environment (ESRI templates, references, project structure)
    2. XML syntax
  • ArcGIS 10 Add-ins and VB .NET IDE Intro (Slides)
  • Exercise 1: verify odin account, finish pre-course survey, access course readings, and install your first add-in(link)
  • Lab 1: ArcGIS Add-ins "Hello World" (excerpts from ESRI tutorial) (link)

Jan 11, 13

  • VB .NET GUI controls/objects
  • ArcGIS Add-in GUI controls/objects (Slides)
  • ArcGIS Add-in Components (link)
  • VB .NET Syntax I
    1. Elements of code
    2. Declaration and statements
    3. Scope of data
    4. Naming conventions
    5. Enumerations and structures (user-defined type) (Slides)
  • Continue Lab 1
  • Lab 1 Due
  • Exercise 2: VB .NET syntax (link)

Jan 18, 20

  • VB .NET Syntax II
    1. Commenting code
    2. Operators, conditional and looping statements
    3. Exception handling
  • Resolving compile, runtime, and logic errors
  • VB .NET IDE - Debugging (Slides)
  • VB .NET Syntax III
    1. VB Built-in functions (String and Math classes)
    2. Collections: Array and List (Of T) (Slides)
  • Exercise 3: VB .NET debugging (link)
  • Begin Lab 2: Numerical Approximation to estimate PI (design GUI including window and button) (link)
  • Continue Lab 2: Numerical Approximation to estimate PI (computation part)

Jan 25, 27

  • VB .NET File I/O and XML
  • Network shortest path algorithm (Slides)
  • VB Data Structures
    1. ArrayList
    2. Queue, stack, and hashtable (Slides)
  • Lab 2 Due
  • Begin Lab 3: Dijkstra shortest path (GUI & File IO)
  • Lab 2 Due
  • Begin Lab 3: Dijkstra shortest path (GUI & File IO) (link)

Feb 1, 3

  • ArcObjects classes and interfaces
  • Using ArcObjects: Color, Style Gallery, and Layer Symbology (slides)
  • Project Description Due
  • Continue Lab 3: Dijkstra shortest path
  • Continue Lab 3: Dijkstra shortest path
  • Exercise 4: Layer symbology (link)

Feb 8, 10

  • Midterm exam
  • ArcObjects: Table and Attribute Data (slides)
  • Lab 3 Due
  • Lab 4: ArcMap Layers & Attribute Manipulation (link)
  • Continue Lab 4: ArcMap Layers & Attribute Manipulation

Feb 15, 17

  • ArcObjects: Introduction to Geoprocessing (slides)
  • ArcObjects: Interacting with the map (slides)
    1. Buttons and Tools
    2. Using existing ArcGIS commands
    3. Defining an area on a map (IEnvelope)
    4. Working with graphic map elements
  • Exercise 5: Introduction to Geoprocessing (link)
  • Lab 4 Due
  • Exercise 6: Buttons and Tools (link)

Feb 22, 24

  • ArcObjects: Vector Data analysis I (slides)
    1. Vector geometry
    2. Spatial query and selection set
  • ArcObjects: Vector Data analysis II (slides)
    1. Spatial Join
    2. Vector Buffering
    3. Vector Overlay
  • Lab 5: ArcMap UITool, Commands, and Vector Features Operations (link)
  • Exercise 7: vector analysis (link)
  • Continue work on Lab 5: ArcMap UITool, Commands, and Vector Features Operations

Mar 1, 3

  • ArcObjects: Raster Data and Analysis (slides)
    1. Con Operation - Con
    2. Math Operation - SquareRoot
    3. Local Operation - Combine
    4. Neighborhood Operation - FocalStatistics
  • ArcObjects beyond the desktop including ArcGIS server and ESRI web mapping clients (slides)
  • Exercise 8: raster analysis (link)
  • Lab 5 Due

Mar 8, 10

  • Project assistance/debugging
  • Final Presentations

Mar 15 (Tue)

  • Final presentation (10 am - noon)


(The reading list might be modified during the term. Please visit the course webpage often to get the most up-to-date information.)


Topic & Reading Instructions

Jan 6

  1. VB .NET IDE (MSDN: "Introduction to the Visual Basic Express IDE" Read all entries in the section)
  2. ESRI Templates, references, and project structure (ArcObjects: "Using project templates to extend ArcObjects", "ArcGIS Project Wizard", "Add ArcGIS Reference dialog box", "ArcGIS Visual Studio IDE Integration Framework for add-ins")
  3. Introduction to ArcObjects add-ins (ArcObjects: "Desktop.Addins")
  4. XML syntax (

Jan 11

  1. VB .NET GUI controls/objects (MSDN: "Creating the Visual Look of Your Program: Introduction to Windows Forms" Read "Communicating with Your Program's User: The User Interface", "Interacting with the User: Using Buttons", "Displaying and Receiving Text: Using Labels and Text Boxes", "Making Your Program React to the User: Creating an Event Handler", "Getting User Choices: Using Check Boxes and Radio Buttons", "Multiple-Item Controls: Working with ListBox and ComboBox Controls" topics in this section)
  2. ArcGIS Add-in GUI controls/objects (ArcObjects API Reference:"ESRI.ArcGIS.Desktop.AddIns Namespace" Review API to see what ESRI controls are available)

Jan 13

  1. Elements of code (MSDN: "The Basics: How Programming Works", "Words and Text: Using String Variables to Organize Words", and "Closer Look: Understanding Properties, Methods, and Events")
  2. Declaration and statements (MSDN: "Representing Words, Numbers, and Values with Variables", "Variable Declaration in Visual Basic", "Dim Statement (Visual Basic)", and "Data Type Summary")
  3. Scope of variables (MSDN: "Scope in Visual Basic")
  4. Naming conventions (MSDN: "Naming Guidelines " Read all entries in the section)
  5. Enumerations (MSDN: "When to Use an Enumeration", "How to: Declare Enumerations", "How to: Refer to an Enumeration Member")
  6. Structures: User-Defined Data Type (MSDN: "Structure Declaration" and "Structure Variables")

Jan 18

  1. Commenting code (MSDN: "Making Notes in Your Programs: Using Comments")
  2. Operators and conditional statements: (MSDN: "Comparisons: Using Expressions to Compare Values", "Logical and Bitwise Operators in Visual Basic")
  3. Looping statements: (MSDN: "Making a Program Repeat Actions: Looping with the For...Next Loop", "Closer Look: Using Do...While and Do...Until to Repeat Until a Condition Is Met")
  4. Exception handling (ArcObjects: "Error handling and debugging" read this page and "How to implement error handling". Numbers people may want to read section on ArcObjects error codes)
  5. Resolving compile, runtime, and logic errors and debugging (MSDN: "What Went Wrong? Finding and Fixing Errors Through Debugging" Read all entries in this section)

Jan 20

  1. VB Built-in functions (String and Math classes) (MSDN: Browse "System Namespace". Read "String Class", "Math Class")
  2. Collections: Array and List (Of T) (MSDN: "Arrays: Variables That Represent More Than One Value", "Array Class")

Jan 25

  1. VB .NET File I/O (MSDN: Browse "Basic File I/O". Read "Common I/O Tasks" and the code examples of the following subtopics: Read Create a text file, Write to a text file, Read from a text file, and Append text to a file.)
  2. Optional: VB .NET and XML (MSDN: "XmlSerializer Class")
  3. Dijkstra network shortest path algorithm

Jan 27

  1. ArrayList (MSDN: "An Extensive Examination of Data Structures" Read Part 1: An Introduction to Data Structures)
  2. Queue, Stack, and Hashtable (MSDN: "An Extensive Examination of Data Structures" Read Part 2: The Queue, Stack, and Hashtable)

Feb 1

  1. Review ListBox control ("Multiple-Item Controls: Working with ListBox and ComboBox Controls")
  2. ArcObjects IGxDialog("IGxDialog interface", "IGxObjectFilter interface")
  3. Introduction to ArcObjects (ArcObjects: "Introduction to .NET for ArcObjects developers", "Learning ArcObjects")
  4. Dataset and layer management (ArcObjects: "Working with map documents" (stop at end of MxDocument section), "How to access maps and layers via the MxDocument", "Working with the map", "ILayer interface")
  5. Review code samples from instructor ("Using the IGxDialog object")
  6. .NET garbage collection (MSDN: "Garbage Collector Basics and Performance Hints"

Feb 3

  1. Reading ArcObjects object model diagrams (ArcObjects: "Reading OMDs"
  2. ArcObjects classes and interfaces (ArcObjects: "Casting between interfaces")
  3. Using ArcObjects: Color and Layer Symbology (ArcObjects: "Working with layers and renderers" Read feature and raster renderers sections, "How to make different types of colors and color ramps")
  4. Style Gallery (
  5. How to get a symbol from the style gallery (

Feb 8

  • Midterm Exam

Feb 10

  1. Accessing GIS data with ArcObjects (ArcObjects: "Geodatabase" Read Core Geodatabase, Workspace, Datasets, “Table, ObjectClass, and FeatureClass objects “, and Raster sections)
  2. Accessing records in GIS dataset (ArcObjects: "Querying geodatabase tables")
  3. ArcObjects: Table and Attribute Data (ArcObjects: "Creating fields")
  4. Updating records in a table (ArcObjects: "Updating attributes of existing features", "ICalculator Interface")
  5. Get statistics from a field (ArcObjects: "IDataStatistics Interface")

Feb 15

  1. Introduction to Geoprocessing (ArcObjects: "Interpreting a tool reference page", "Executing tools", "How to run a geoprocessing tool" (Stop at "Using the geoprocessor managed assembly"), "Working with result objects", "Geoprocessing messages", "Using environment settings")
  2. Use Geoprocessing Tools in ArcObjects Applications : an ArcUser article
  3. "Geoanalyst" (ArcObjects 10 SDK)
  4. Optional: "Running a geoprocessing tool using background geoprocessing"

Feb 17

  1. ArcObjects: Review "Desktop.AddIns" class diagram
  2. ArcObjects: Review list of built-in "ArcMap commands"
  3. Interacting with the map display (ArcObjects: "Interacting with the map display" Read "How to draw an X on the screen" for point, polyline, rectangle, and polygon)
  4. ArcObjects: "How to redraw the display"

Feb 22

  1. Vector geometry (ArcObjects: “Geometry” Read Introduction to geometry objects, Envelope, Point, Multipoint, Polyline, Polygon, and BufferConstruction object.)
  2. Spatial query (ArcObjects: "ISpatialFilter Interface")

Feb 24

  1. Access GIS data via IFeatureClassName in analysis (ArcObjects: "Converting simple data")
  2. Vector analysis overview (ArcObjects: "ArcMapUI Library Contents" Browse the list. Visit and read the hyperlinked pages for ISpatialJoin Interface)
  3. ArcObjects: Vector Buffering and Overlay (ArcObjects: "IFeatureCursorBuffer2 Interface" and "IBasicGeoprocessor Interface")

Mar 1

  1. Raster analysis overview (ArcObjects: "GeoAnalyst" Browse all Geoanalyst objects)
  2. Raster analysis environment (ArcObjects: "Working with the analysis environment")
  3. ArcObjects: Raster Local and Neighborhood Operations (ArcObjects: "SpatialAnalyst" Browse all spatial objects. Visit and read the hyperlinked pages of RasterLocalOp and RasterNeighborhoodOp)

Mar 3

  1. ArcGIS Server (Server 10 Help: "What is ArcGIS Server?", "Working with ArcGIS Server", "Components of an ArcGIS Server System", "What types of services can you publish?")
  2. ESRI web mapping: (ArcGIS Server Blog "Which ESRI web mapping API should I choose?")
  3. ArcGIS Web Mapping ("Overview". Near the bottom are links to samples for the JavaScript, Flex, and SilverLight API's.)
  4. ArcGIS Viewer for Flex ("Creating a custom widget". Watch the video and notice how the concepts are to VB .NET even if the syntax is different.)