Master of Environmental Data Science Program @ The Bren School (UCSB)
Published
December 12, 2025
Purpose
Image: Commercial Fishing Boats, Santa Barbara Harbor, California, USA.
Marine aquaculture is rapidly expanding as coastal nations seek sustainable ways to meet seafood demand. Identifying where aquaculture should occur is a major challenge optimal sites must balance ecological suitability, production needs, and regulatory boundaries.
Research Question:
What Exclusive Economic Zones (EEZ) on the West Coast of the US are best suited to developing marine aquaculture for several species of oysters and Dungeness Crab Metacarcinus magister (Dana, 1852)?
Data Sources
I combined three geospatial datasets:
Bathymetry: GEBCO 2022 global depth raster
Sea Surface Temperature (SST): 2008–2012 annual averages
Exclusive Economic Zones: Cleaned U.S. West Coast EEZ shapefile
Environmental requirements were taken from fisheries and species-specific literature, including SeaLifeBase [(2025)].
All geospatial processing was performed in R using terra, stars, and sf.
Methods
In this geospatial analysis the following key concepts were addressed
combining vector/raster data
resampling raster data
masking raster data
map algebra
1. Prepare SST and Depth Data
Certain packages were required prior to the analysis. I loaded in the necessary libraries to proceed with data importation. Then, I read in the depth and EEZ shapefiles using read_stars and st_read, respectively, Finally, I stacked five annual SST rasters (2008–2012) using rast().
It was also important to cross reference each spatial object so that each coordinate reference system (CRS) matches to prevent misalignment (refer to repository linked above for additional information).
Here, I calculated the mean SST using app() across all year rasters, then converted temperatures from Kelvin to Celsius.
Code
# Calculate the SST average mean_sst <-app(sst[[c("average_annual_sst_2008","average_annual_sst_2009", "average_annual_sst_2010","average_annual_sst_2011", "average_annual_sst_2012")]], fun = mean, na.rm =TRUE)# Convert average SST from Kelvin to Celsiussst_mean_celsius <- mean_sst -273.15
Then, I cropped the bathymetry layer to the average SST raster and resampled to match the SST resolution.
Code
# First convert depth stars to SpatRasterdepth_rast <-rast(depth)depth_resample <- depth_rast %>%crop(sst_mean_celsius) %>%# crop depth to match SST extent# Resample to match SST resolution, use method near resample(sst_mean_celsius,method ="near")
Identify Suitable Habitat for Oysters
According to the literature, the following conditions are required for optimal growth in oyster species:
Sea Surface Temperature (SST) Range: 11–30°C
Depth Range: 0–70 m
Here, I classified suitable ranges for oyster-specific depth and SST by applying an if-else statement to categorize values based on a conditional. I assigned a value of 0 for values that fell outside the required range and assigned a value of 1 for values that were within the range.
Code
# Reclassify SST (11-30°C suitable for oysters)sst_suitable <-app(sst_mean_celsius, fun =function(x){ifelse(x >=11& x <=30,1,0) # if temperate is between 11- 30 °C, return 1, else 0})# Reclassify Suitable depth range (0-70 meters for oysters)depth_suitable <-app(depth_resample, fun =function(x){ifelse(x >=-70& x <=0,1,0) # select depths from 0 to 70 meters below surface.})# Multiply the two suitability rastersuitable_locations <- sst_suitable * depth_suitable
Quantify Suitable Area Within Each EEZ
I rasterized EEZ polygons, masked suitability values, and computed cell-area using zonal statistics. Here, I rasterized the EEZ shapefile based on suitable locations for each region (rgn). Then, I created a mask to isolate suitable locations within EEZs and summed the suitable area of each EEZ region.
Code
# Rasterize the EEZ data (creates zone IDs)eez_raster <-rasterize(eez, suitable_locations, field ="rgn")#Calculate cell area with cellSize()cell_area <-cellSize(suitable_locations, unit ="km")# Mask suitable locations to EEZ boundariessuitable_area <-mask(suitable_locations, eez) * cell_area# Sum suitable are by EEZ zonal statistics eez_suitable <-zonal(suitable_area, eez_raster, fun ="sum", na.rm =TRUE)
Results
Oyster Suitability
The highest-ranked region was Central California with about 4,940 km² of suitable area (~34% of all suitable habitat). The lowest ranked region was Northern California with about 454.30 km² (3.1% of all suitable area).
EEZ Rankings by Suitable Aquaculture Area
Rank
EEZ Region
Suitable Area (km²)
% of Total
1
Central California
4940.04
34.1
2
Southern California
4221.39
29.1
3
Washington
3313.16
22.8
4
Oregon
1578.97
10.9
5
Northern California
454.30
3.1
Map 1. Oyster Aquaculture Suitability by EEZ
Code
# Map with tmap basictm_basemap("Esri.OceanBasemap", alpha =0.7) +tm_shape(eez_ranked) +tm_polygons("suitable_area_km2",palette ="-mako",title ="Suitable Area (km²)",border.col ="black",border.lwd =0.5) +tm_layout(main.title ="Suitable Oyster Aquaculuture Area by EEZ",main.title.size =1.2,legend.outsides =TRUE,frame =FALSE) +tm_text("rgn", # Label by regionsize = .8, # Adjust sizecol ="white", # Adjust text colorfontface ="bold", # Labels are boldedxmod =-.5) +# Adjust .5 from the lefttm_compass(type ="4star", position =c("right", "top")) +tm_scalebar(position =c("left", "bottom"))
Repeat previous steps with species of choice by creating a Function
Here we use the Dungeness Crab one of the most important seafood industries along the west coast of North America. Dungeness typical range extends from Alaska’s Aleutian Islands to Point Conception, near Santa Barbara, California. Commonly found on soft bottom in very low intertidal areas to a depth of 360 meter and prefer a Sea surface temperature of 9°C
Dungeness Crab Suitable Conditions:
Seas Surface Temperature Range: 3-19°C
Depth Range: 0 –360 meters
The workflow described above is applicable to many important marine species in mariculture. As a result, the workflow can be generalized into a single function for a species of interest and its given SST and depth ranges. A general function automated the workflow for any species.
Code
# The function takes the following arguments:# sst raster file# depth raster file# minimum and maximum sea surface temperature# minimum and maximum depth# species namefind_suitable_aquaculture <-function(sst_raster, depth_raster, eez_sf, sst_min, sst_max, depth_min, depth_max, species_name) {# Reclassify SSTsst_suitable <-app(sst_raster, fun =function(x) {ifelse(x >= sst_min & x <= sst_max, 1, 0) })# Reclassify depthdepth_suitable <-app(depth_raster, fun =function(x) {ifelse(x >= depth_min & x <= depth_max, 1, 0) })# Find suitable locations (both conditions)suitable_locations <- sst_suitable * depth_suitablenames(suitable_locations) <- species_name # Mask to EEZsuitable_in_eez <-mask(suitable_locations, eez_sf)# Rasterize EEZeez_rasterize <-rasterize(eez_sf, suitable_locations, field ="rgn")# Calculate cell areascell_area_km2 <-cellSize(suitable_locations, unit ="km")# Calculate suitable area per cell (commented out for now)suitable_area <- suitable_in_eez * cell_area_km2# Sum by EEZ zoneeez_suitable_area <-zonal( suitable_area, eez_rasterize, fun ="sum", na.rm =TRUE)colnames(eez_suitable_area) <-c("EEZ_ID", "Suitable_Area_km2")# Join with EEZ data and rankeez_sf$suitable_area_km2 <- eez_suitable_area$Suitable_Area_km2[match(eez_sf$rgn, eez_suitable_area$EEZ_ID)] eez_ranked <- eez_sf[order(-eez_sf$suitable_area_km2), ]# Create summary tablesummary_table <-data.frame(Rank =1:nrow(eez_ranked),EEZ = eez_ranked$rgn,Suitable_Area_km2 =round(eez_ranked$suitable_area_km2, 2) )# Return results as a listresults <-list(species = species_name,sst_suitable = sst_suitable,depth_suitable = depth_suitable,suitable_locations = suitable_locations,suitable_in_eez = suitable_in_eez,eez_ranked = eez_ranked,summary_table = summary_table )return(results)}
Dungeness Crab Suitability Results
Here, I apply the function find_suitable_aquaculture to determine suitable area within each West Coast EEZ using the appropriate species-specific ranges.
# Plot Crab EEZtm_basemap("Esri.OceanBasemap", alpha =0.7) +tm_raster() +tm_shape(crab_results$eez_ranked) +tm_polygons("suitable_area_km2",palette ="-mako",title ="Suitable Area (km²)", boarder.col ="black",border.lwd =0.5) +tm_layout(main.title ="Suitable Crab Aquaculuture Area by EEZ",main.title.size =1.2,legend.outsides =TRUE,frame =FALSE) +tm_text("rgn", # Label by regionsize = .8, # Adjust sizecol ="white", # Adjust text colorfontface ="bold", # Labels are boldedxmod =-.5) +# Adjust .5 from the lefttm_compass(type ="4star", position =c("right", "top")) +tm_scale_bar(position =c("left", "bottom"))
Discussion
Among the Exclusive Economic Zones (EEZs) along the West Coast, Central California offers the greatest potential for oyster cultivation with an estimated suitable area of \(4940.04 \text{ km}^2\), likely due to favorable Sea Surface Temperature (SST) and depth conditions. Conversely, Northern California is the least suitable, providing only \(454.30 \text{ km}^2\). While colder, the Washington EEZ contains a relatively large suitable area (\(3313.16 \text{ km}^2\)), surpassing Northern California, which suggests a high proportion of quality mollusk aquaculture habitat there. Southern California and Oregon also show considerable, though varying, suitability.
The analysis of suitable habitat for Dungeness crab along the West Coast reveals significant regional differences in the Exclusive Economic Zones (EEZs). Washington emerged as the most suitable region, providing the largest area of favorable conditions at \(290.06 \text{ km}^2\). The second and third most suitable EEZs were Southern California (\(142.52 \text{ km}^2\)) and Central California (\(120.89 \text{ km}^2\)), respectively. Oregon contained a moderate amount of suitable habitat at \(76.65 \text{ km}^2\). Notably, Northern California possessed the smallest suitable area, indicating the least favorable conditions in this zone.
Overall, the findings suggest that the environmental parameters along the Washington coast currently offer the most extensive suitable habitat for the Dungeness crab among the surveyed EEZs.
This analysis demonstrates how geospatial suitability modeling can inform strategic aquaculture planning. Central California consistently emerged as the most promising region for both oysters and Dungeness Crab.
However, several considerations remain:
Biological constraints: Growth rates, disease sensitivity, and larval dispersal were not modeled.
Socio-political constraints: Tribal waters, marine protected areas, and fisheries conflicts are not accounted for.
Water quality: Nutrient loading, pollution, and harmful algal blooms vary spatially and should be included in future analyses.
Future work could incorporate ecological risk assessments or multi-criteria decision analysis to better integrate environmental and human dimensions.
References
Hall, S. J., Delaporte, A., Phillips, M. J., Beveridge, M. & O’Keefe, M. Blue Frontiers: Managing the Environmental Costs of Aquaculture (The WorldFish Center, Penang, Malaysia, 2011).
Maselko, J., Bishop, G., & Murphy, P. (2013). Ghost Fishing in the Southeast Alaska Commercial Dungeness Crab Fishery. North American Journal of Fisheries Management, 33(2), 422–431.doi.org/10.1080/02755947.2013.763875
Gentry, R. R., Froehlich, H. E., Grimm, D., Kareiva, P., Parke, M., Rust, M., Gaines, S. D., & Halpern, B. S. Mapping the global potential for marine aquaculture. Nature Ecology & Evolution, 1, 1317-1324 (2017).︎
Commercially Important Species Occurring in United States (contiguous states). (2025). [(Sealifebase.ca.)] (https://www.sealifebase.ca/country/CountryChecklist.php?c_code=840&vhabitat=commercial)
Oliver, R. (2025, November 25). Homework Assignment 4. (Github.io.)