|
| 1 | +############################################### |
| 2 | +# title: "Smoothing data range extent layer" |
| 3 | +# author: Elly Knight |
| 4 | +# date: August 8, 2025 |
| 5 | +################################################## |
| 6 | + |
| 7 | +#This code takes the NA tif output from "Probable_Range_Extent.R" and smooths it for masking packaged outputs to the area of available survey data. |
| 8 | + |
| 9 | +#PREAMBLE############################ |
| 10 | + |
| 11 | +#1. Load packages---- |
| 12 | + |
| 13 | +library(tidyverse) #basic data wrangling |
| 14 | +library(sf) #read in & handle study area |
| 15 | +library(terra) #raster management |
| 16 | + |
| 17 | +#2. Set root path for data on google drive---- |
| 18 | +root <- "G:/Shared drives/BAM_NationalModels5" |
| 19 | + |
| 20 | +#3. Get tif---- |
| 21 | +na1 <- rast(file.path(root, "MosaicWeighting", "Range", "ABS_NA_Layer450.tiff")) |
| 22 | + |
| 23 | +#4. Get Canada extent---- |
| 24 | +can <- read_sf(file.path(root, "Regions", "BAM_BCR_NationalModel_Unbuffered_Canada.shp")) |> |
| 25 | + st_union() |> |
| 26 | + st_transform(crs(na1)) |> |
| 27 | + vect() |
| 28 | + |
| 29 | +#5. Crop ---- |
| 30 | +na2 <- na1 |> crop(can, mask=TRUE) |
| 31 | + |
| 32 | +#6. Smooth it ---- |
| 33 | +w <- matrix(1, 299, 299) |
| 34 | +na3 <- focal(na2, w=w, fun=mean, na.policy="omit", expand=TRUE) |
| 35 | + |
| 36 | +#7. Rebinarize ---- |
| 37 | +na4 <- na3 > 0.5 |
| 38 | + |
| 39 | +#8. Fix boundary ---- |
| 40 | +na5 <- resample(na4, na2) |
| 41 | +na5[is.na(na5)] <- 0 |
| 42 | +na6 <- sum(na5, na2) |
| 43 | +na6[values(na6) > 0] <- 1 |
| 44 | + |
| 45 | +#8. Plot ---- |
| 46 | +plot(na6) |
| 47 | + |
| 48 | +#9. Save ---- |
| 49 | +writeRaster(na6, file.path(root, "gis", "DataLimitationsMask.tif")) |
| 50 | + |
0 commit comments