Projects
The projects below showcase my work in spatial analysis, remote sensing, and geospatial data science. Each project uses real datasets to address real environmental questions, from wildfire impact assessment to land cover change detection, reflecting the kind of work I am passionate about and ready to bring to a professional setting.
Wildfire Burn Severity and Post-Fire Vegetation Recovery
Remote Sensing for Ecosystem Management
A Landsat 8 time-series analysis of the 2017 Prouton Lakes fire near Williams Lake, BC. This project quantifies burn severity across the fire perimeter using delta NBR and tracks post-fire vegetation recovery through NDVI composites from 2013 to 2021.
R terra ggplot2 sf Landsat 8 NDVI NBR dNBR
Green Equity Analysis in Vancouver Using Geographically Weighted Regression
Spatial Statistics · Urban Analytics · PostGIS · Census 2021
This project investigates whether green space is equitably distributed across Vancouver’s 1,016 Dissemination Areas by combining 2021 Canadian Census socio-economic data with Landsat 8 NDVI derived from late-summer satellite imagery. I wrote a multi-part PostGIS SQL query to pivot long-format census data into wide format and spatially join it to DA boundaries, then modelled the relationship between 14 socio-economic variables and mean NDVI using both Ordinary Least Squares and Geographically Weighted Regression. GWR explained 71.3% of the variance in vegetation greenness compared to 40.5% for OLS, with the improvement confirming that relationships between socio-economic disadvantage and green space access are spatially non-stationary across Vancouver’s neighborhoods. A second analysis with 10 additional variables explored housing tenure, visible minority status, residential mobility, and educational attainment as drivers of vegetation inequality.
PostGIS SQL QGIS ArcGIS Pro Geographically Weighted Regression OLS Landsat 8 NDVI Census 2021 Zonal Statistics
Land Cover Classification of the Southern Gulf Islands
Remote Sensing · Land Cover Mapping
Landsat 9 multispectral imagery acquired over the Southern Gulf Islands, BC was used to classify five land cover types which are forest, grassland/shrub, urban, exposed soil, and water using supervised maximum likelihood classification. Training polygons were manually delineated across the study area and used to extract spectral signatures for each class. Classification accuracy was assessed through a confusion matrix, yielding an overall accuracy of 79.6%, with water achieving perfect producer and user accuracy and exposed soil presenting the greatest spectral confusion.
R RStoolbox terra ggplot2 Landsat 9 Maximum Likelihood Accuracy Assessment
Grizzly Bear Movement Corridor Modelling
Conservation GIS · Raster Analysis · Least Cost Path
I built a least cost path model to identify the optimal movement corridor for Grizzly Bears across the Yellowhead Bear Management Area in western Alberta. Working from the command line with GDAL utilities, I processed 14 ASTER DEM tiles into a seamless terrain model, reprojected a national land cover dataset using nearest neighbor resampling to preserve categorical class values, and computed a road proximity cost surface using an inverse distance formula. The three layers were combined into a weighted cost surface giving land cover the highest weight at 40%, reflecting its dominant role in bear movement decisions, with slope and road distance weighted equally at 30% each. The least cost path was traced in ArcGIS Pro using the Distance Accumulation and Optimal Path as Line tools, producing a corridor that consistently follows forested valley terrain between core and secondary habitat areas.
GDAL QGIS ArcGIS Pro Weighted Overlay Least Cost Path VLCE 2019 ASTER DEM Conservation Planning
Vegetation Change Detection and Forest Cover Dynamics
Remote Sensing · Time-Series Analysis
A 20-year MODIS NDVI time series (MOD13Q1, 2001–2020) was analyzed to characterize seasonal vegetation patterns and detect abrupt changes in greenness at two regions of interest in Yellowhead Country, Alberta, using the BFAST monitoring algorithm. A second analysis examined a 33-year Landsat-based land cover time series near Williams Lake, BC, to quantify annual forest area gain and loss between 1984 and 2016. Together, the two analyses demonstrate how multi-temporal satellite data can reveal both gradual ecological trends and abrupt disturbance events across different spatial and temporal scales.
R terra bfast ggplot2 MODIS NDVI BFAST Land Cover Time-Series
Spatial Data Analysis of the Gulf Islands
Vector Geoprocessing · LiDAR · Spectral Analysis
This project brought together three types of spatial data to analyze the Gulf Islands of BC. I used vector geoprocessing to identify which islands have ferry terminals and calculated distances from the Tsawwassen terminal to each Gulf Island terminal. I then worked with a LiDAR-derived DEM of Pender Island to examine terrain characteristics including slope distribution and reclassified slope classes. Finally, I used a Landsat 5 TM image to compute NDWI, apply a water mask, and extract spectral signatures for three land cover classes, identifying coniferous forest, broadleaf forest, and developed or exposed surfaces based on their reflectance patterns.
R terra sf ggplot2 LiDAR DEM Landsat 5 NDWI Spectral Signatures
Monitoring Eucalyptus Plantation Health Over Two Decades
Remote Sensing · Time Series Analysis · Generalized Additive Models
I applied Generalized Additive Models (GAMs) to a 20-year Landsat multispectral time series from a Eucalyptus stand in South America to characterize vegetation dynamics, fill temporal gaps in spectral index data, and separate long-term trends from within-year seasonal variation. The dataset captures a striking disturbance event around 2002 to 2003 where NDVI dropped sharply from values near 0.90 to below 0.35, followed by a multi-year canopy recovery. I fitted four models of increasing complexity using the mgcv package in R, combining Gaussian process smooths on the temporal trend with cyclic cubic splines on day-of-year to account for seasonality, and a tensor interaction term to test whether seasonal moisture amplitude shifted over the study period. The best model explained 76.7% of the deviance in NDVI with an adjusted R² of 0.782. The gap-filling framework has direct operational relevance for plantation managers who need uncertainty-quantified predictions during cloud-obscured periods rather than simply missing data.
R mgcv GAM Landsat NDVI NDMI EVI Time Series Gap Filling REML Forest Health
Exploring Vancouver Street Trees
Data Analysis · Data Visualization
I used the City of Vancouver’s open street tree dataset to explore how trees are distributed across species and neighbourhoods city-wide. Starting from messy, wide-format data, I reshaped and cleaned the dataset using tidyverse tools, removed unrealistic records, and computed diameter and count summaries by species and height rank. I then brought in street length and neighbourhood area data to calculate tree density per kilometre of street, which gave a much more meaningful picture of how well-treed each neighbourhood is compared to just counting trees. The analysis shows that South Cambie has the highest tree density in the city, while species like Kwanzan Flowering Cherry tend to be small and concentrated in lower height classes compared to Maple, which shows a wider range of sizes across the city.
R tidyverse ggplot2 dplyr tidyr ggrepel
Old Growth Forest Assessment on Vancouver Island
GIS · Cartographic Modelling · Forest Inventory
I used the BC Vegetation Resources Inventory (2024) to assess how well old growth retention across Vancouver Island’s crown forests meets provincial high threshold targets, broken down by Landscape Unit and BEC subzone. I queried the VRI data directly from a UBC PostgreSQL server using SQL, classified each polygon into seral stages using a custom Python expression in ArcGIS Pro, and reset disturbed areas using the CEF Human Disturbance layer. The final output compares calculated percent old growth against subzone-specific provincial targets across 260 landscape units, showing a clear divide between remote high-elevation forests that exceed targets and heavily logged lowland areas that fall well short.
ArcGIS Pro PostGIS SQL Python VRI 2024 BEC Zones Old Growth Cartographic Modelling