-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathecoregionProducers.R
47 lines (42 loc) · 2.39 KB
/
ecoregionProducers.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ecoregionProducer <- function(ecoregionMap, ecoregionName,
ecoregionActiveStatus, rasterToMatch) {
# change the coordinate reference for all spatialpolygons
message("ecoregionProducer 1: ", Sys.time())
#ecoregionMapInStudy <- raster::intersect(ecoregionMapFull, fixErrors(aggregate(studyArea)))
# Alternative
message("ecoregionProducer fastRasterize: ", Sys.time())
ecoregionMap <- fasterize::fasterize(sf::st_as_sf(ecoregionMap), raster(rasterToMatch), field = "ECODISTRIC")
ecoregionMap[is.na(rasterToMatch[])] <- NA
ecoregionFactorValues <- na.omit(unique(ecoregionMap[]))
ecoregionTable <- data.table(
mapcode = seq_along(ecoregionFactorValues[!is.na(ecoregionFactorValues)]),
ecoregion = as.numeric(ecoregionFactorValues[!is.na(ecoregionFactorValues)])
)
message("ecoregionProducer mapvalues: ", Sys.time())
ecoregionMap[] <- plyr::mapvalues(ecoregionMap[], from = ecoregionTable$ecoregion, to = ecoregionTable$mapcode)
ecoregionActiveStatus[, ecoregion := as.character(ecoregion)]
ecoregionTable <- ecoregionTable[!is.na(mapcode),][, ecoregion := as.character(ecoregion)]
message("ecoregionProducer dplyr_leftjoin: ", Sys.time())
ecoregionTable <- dplyr::left_join(ecoregionTable,
ecoregionActiveStatus,
by = "ecoregion") %>%
data.table()
ecoregionTable[is.na(active), active := "no"]
ecoregionTable <- ecoregionTable[,.(active, mapcode, ecoregion)]
return(list(ecoregionMap = ecoregionMap,
ecoregion = ecoregionTable))
}
nonActiveEcoregionProducer <- function(nonactiveRaster, activeStatus, ecoregionMap,
ecoregion, initialCommunityMap, initialCommunity) {
nonactiveRasterSmall <- crop(nonactiveRaster, ecoregionMap)
nonecomapcode <- activeStatus[active == "no", ]$mapcode
whNANonActiveRasterSmall <- which(nonactiveRasterSmall[] %in% nonecomapcode)
initialCommunityMap[whNANonActiveRasterSmall] <- NA
ecoregionMap[whNANonActiveRasterSmall] <- NA
initialCommunity <- initialCommunity[mapcode %in% sort(unique(getValues(initialCommunityMap))), ]
ecoregion <- ecoregion[mapcode %in% sort(unique(getValues(ecoregionMap))), ]
return(list(ecoregionMap = ecoregionMap,
ecoregion = ecoregion,
initialCommunityMap = initialCommunityMap,
initialCommunity = initialCommunity))
}