This document describes our methodology to estimate inchannel wetted area. We used these values to estimate floodplain area by subtracting our inchannel wetted area estimate from modeled total wetted area provided by Mark Gard.

Inchannel Wetted Area Estimation

We used 1 meter resolution 4 band (R, G, B, N) imagery from the National Agriculture Imagery Program (NAIP) to conduct a Normalized Difference Water Index (NDWI) based analysis to identify total wetted area for the 31 tributaries included in the SIT chinook life cycle models. The analysis was performed using the Google Earth Engine IDE.

We used all the available NAIP imagery for the years 2009-2016 and for each image calculated the NDWI as: \[{NDWI}=\frac{(Xgreen - Xnir)}{(Xgreen + Xnir)}\]

We then reduced the multidimensional array of NDWI rasters by selecting the maximum NDWI at each pixel. We created a buffer of the fall run rearing extents with an estimated channel width to clip the max NDWI raster. A binary filter was applied to the clipped raster for NDWI values greater than a threshold to classify each pixel as water or not water. These water pixels were multiplied by the pixel area and then all summed to estimate the inchannel wetted area of the stream.

The inchannel wetted area values for each watershed were recorded in data-raw/earth_engine_total_channel_area_estimates.csv and are stored in DSMhabitat::fr_wetted_channel_area

The extents were mapped through expert outreach can be viewed on this interactive map and are available for download here

Example analysis JavaScript code below:

var naip: Imagecollection "NAIP: National Agriculture Imagery Program"
var habExt = ee.FeatureCollection('users/fall_run_hab_extent');

// Lower-mid Sacramento River 
var lowerMidSacRiver = ee.Feature(habExt.filterMetadata('River', 'equals', 'Lower-mid Sacramento River').first());

// define buffer
var lowerMidSacRiverBuffer= lowerMidSacRiver.buffer(70);

// 2009-2016 NAIP imagery covering Lower Sacramento River
var lowerMidSac = naip
  .filterBounds(lowerMidSacRiver.geometry())
  .filterDate('2009-01-01','2016-12-31');

// calculate ndwi for each image
var ndwi = lowerMidSac.map(function(img) {
    return img.normalizedDifference(['G', 'N']).rename('ndwi');
});

var maxNDWI = ndwi
  .reduce(ee.Reducer.max());

var mask = maxNDWI.mask(maxNDWI.gt(.7));

// simple water classifier
var water = maxNDWI
  .gt(.7)
  .multiply(ee.Image.pixelArea())
  .rename('waterAreaSqMeters')
  .reduceRegion({
    reducer: ee.Reducer.sum(), 
    geometry: lowerMidSacRiverBuffer.geometry(), 
    scale: 1,
    maxPixels: 1e9
  });
  
print('inchannel water area in square meters:', water);