GIS · Spatial Analysis · Portland, OR

I map rivers reopening, oaks counted, birds resting.

I'm a GIS analyst with nine years of professional web development behind me. I build spatial datasets with documented schemas, run the analysis, and publish the results as maps and dashboards you can open in a browser.

Selected work

01 · Analysis + Web GIS

Oregon Dam Removal Tracker

ArcGIS Pro AGOL Python

This project involved compiling a statewide geodatabase of 95 dam removals in (mostly) Oregon from federal and NGO sources (American Rivers, NID, NOAA), and publishing a hosted feature layer with an interactive Web Map and Dashboard. I joined the dam locations to NHDPlus flowlines and traced upstream to estimate that the dam removals reopened roughly 1,750 river miles of fish habitat. I used spatial joins to StreamNet, ODFW, and NOAA/USFWS critical habitat layers to identify the endangered species affected by each dam removal. The layer follows a 24-field schema with a data dictionary that records the source, method, and fill rate for every attribute.

Open the dashboard View in AGOL
02 · Field Data Collection

Oregon White Oak Survey

Field Maps ArcGIS Pro AGOL

A mobile field-data-collection tool for surveying individual Oregon white oak (Quercus garryana): tree condition, conifer encroachment, restoration priority, etc. The form uses attribute domains, conditional form logic, required fields, and photo attachments, with a schema modeled on Washington Department of Fish and Wildlife and BLM Salem District oak-woodland protocols.

Open in Field Maps View in AGOL

The Field Maps link opens the survey in the ArcGIS Field Maps mobile app.

03 · Data Science / Python

Osprey Migration Rest Stops

pandas scikit-learn DBSCAN ArcGIS Pro

Where do osprey (Pandion haliaetus) stop to rest during their migration? These locations are important for conservationists to protect, in addition to the species' summer and winter locations. Even though this study was intended for a different purpose, I wanted to see if I could use the data from it to detect these locations. I wrote a Python script that uses Net Squared Displacement to flag stationary segments and clusters them with DBSCAN to find shared stopovers. It identified 78 stopovers, 24 of them shared.

View the poster View the repo

Open to GIS analyst and spatial-data roles in the Portland area and remote.