Rippin’ Dope GIS shit

load packagess

library(dplyr)
library(purrr)
library(raster)
library(lidR)

You can’t pass a list of rasters to raster::merge because it expects you to list out the names of all the rasters. Enter do.call(), which, given a function name, f, and a list of arguments, L will generate the R code you want, then run it. See below tweaked example taken from the examples section of the raster::merge docs.

# assume r1 and r2 are rasters
x <- list(r1, r2)
# this will create the string:
  "merge(r1, r2)", then execute it.
m <- do.call(merge, x)

I also wrapped this stuff into a loop so we don’t have too many variables dirtying up our workspace

# pass the integers of the files we want
allrasters <-c(3,8,9,10) %>% 
  # make a list of the files
  paste0("LTEP_file", ., ".TIF") %>%
  # make a list where each item is one of the files I want
  map(., raster) %>%
  # merge them all into one object
  # see note above about `do.call`
  do.call(merge, .)
# Reprojecting the one large raster
# NOTE: ANDERS isn't sure what is supposed to be happening here...
print(paste("PROJECTION BEFORE:", projection(allrasters)))
[1] "PROJECTION BEFORE: +proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"
projection(allrasters)<- 2927
print(paste("PROJECTION AFTER:", projection(allrasters)))
[1] "PROJECTION AFTER: +proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"
st_crs(allrasters)$input
[1] "NAD83(HARN) / Washington South (ftUS)"
st_crs(allrasters)
Error in st_crs(allrasters) : could not find function "st_crs"
# read shpfile but readOGR doesn't work for anders??
# shpfile<- readOGR(dsn="~/Downloads/court/", layer= "EXU_MappingPolygons")
shpfile<- readRDS("./shpfile.RDS")

# give an error if `shpfile` isn't the right type of Class
if (class(shpfile) != "SpatialPolygonsDataFrame") {
  print("shpfile isn't a SpatialPolygonsDataFramem, but it should be!")
}
plot(shpfile)

head(shpfile)
crs(allrasters, asText=TRUE)
[1] "+proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"
st_crs(allrasters)$input
[1] "NAD83(HARN) / Washington South (ftUS)"
crs(shpfile, asText=TRUE)
[1] "+proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"
st_crs(shpfile)$input
[1] "NAD83(HARN) / Washington South (ftUS)"
crs(allrasters, asText=TRUE)
[1] "+proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"
crs(shpfile, asText=TRUE)
[1] "+proj=lcc +lat_0=45.3333333333333 +lon_0=-120.5 +lat_1=47.3333333333333 +lat_2=45.8333333333333 +x_0=500000.0001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs"

save out objects for later

saveRDS(shpfile, "shpfile.RDS")
saveRDS(allrasters, "allrasters.RDS")

Part II

load old objects

shpfile <- readRDS("shpfile.RDS")

map city, bitch

filter_shp <- function(shpfile, val_list) {
  shpfile[shpfile@data$SppComp %in% val_list,]
}
# filter for only two desired conditions
# make a named list so we can access the indv. SpationPolygondsDataFrames as needed
types <- c("Douglas Fir", "Pioneer")
names(types) <- types
types
  Douglas Fir       Pioneer 
"Douglas Fir"     "Pioneer" 
shp <- map(types, filter_shp, shpfile=shpfile)
plot(out$`Douglas Fir`, add=T, col= "blue")
Error in polypath(x = mcrds[, 1], y = mcrds[, 2], border = border, col = col,  : 
  plot.new has not been called yet

OMG! ggspatial! here’s a ggpstial tutorial

ggplot() +
    layer_spatial(data = dougfir)

shp_pnr <- filter_shp(shpfile, shpfile@data$SppComp == "Pioneer")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBSaXBwaW4nIERvcGUgR0lTIHNoaXQKCiMjIGxvYWQgcGFja2FnZXNzCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShwdXJycikKbGlicmFyeShyYXN0ZXIpCmxpYnJhcnkobGlkUikKbGlicmFyeShnZ3NwYXRpYWwpCmBgYAoKCiBZb3UgY2FuJ3QgcGFzcyBhIGxpc3Qgb2YgcmFzdGVycyB0byBgcmFzdGVyOjptZXJnZWAgYmVjYXVzZSBpdCBleHBlY3RzIHlvdSB0byBsaXN0IG91dCB0aGUgbmFtZXMgb2YgYWxsIHRoZSByYXN0ZXJzLiBFbnRlciBgZG8uY2FsbCgpYCwgd2hpY2gsIGdpdmVuIGEgZnVuY3Rpb24gbmFtZSwgYGZgLCBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cywgYExgIHdpbGwgZ2VuZXJhdGUgdGhlIFIgY29kZSB5b3Ugd2FudCwgdGhlbiBydW4gaXQuIFNlZSBiZWxvdyB0d2Vha2VkIGV4YW1wbGUgdGFrZW4gZnJvbSB0aGUgZXhhbXBsZXMgc2VjdGlvbiBvZiB0aGUgYHJhc3Rlcjo6bWVyZ2VgIFtkb2NzXShodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvcmFzdGVyL3ZlcnNpb25zLzMuNS0xNS90b3BpY3MvbWVyZ2UpLgpgYGByCiMgYXNzdW1lIHIxIGFuZCByMiBhcmUgcmFzdGVycwp4IDwtIGxpc3QocjEsIHIyKQojIHRoaXMgd2lsbCBjcmVhdGUgdGhlIHN0cmluZzoKICAibWVyZ2UocjEsIHIyKSIsIHRoZW4gZXhlY3V0ZSBpdC4KbSA8LSBkby5jYWxsKG1lcmdlLCB4KQpgYGAKCkkgYWxzbyB3cmFwcGVkIHRoaXMgc3R1ZmYgaW50byBhIGxvb3Agc28gd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSB2YXJpYWJsZXMgZGlydHlpbmcgdXAgb3VyIHdvcmtzcGFjZQoKYGBge3J9CiMgcGFzcyB0aGUgaW50ZWdlcnMgb2YgdGhlIGZpbGVzIHdlIHdhbnQKYWxscmFzdGVycyA8LWMoMyw4LDksMTApICU+JSAKICAjIG1ha2UgYSBsaXN0IG9mIHRoZSBmaWxlcwogIHBhc3RlMCgiTFRFUF9maWxlIiwgLiwgIi5USUYiKSAlPiUKICAjIG1ha2UgYSBsaXN0IHdoZXJlIGVhY2ggaXRlbSBpcwogICMgb25lIG9mIHRoZSBmaWxlcyBJIHdhbnQKICBtYXAoLiwgcmFzdGVyKSAlPiUKICAjIG1lcmdlIHRoZW0gYWxsIGludG8gb25lIG9iamVjdAogICMgc2VlIG5vdGUgYWJvdmUgYWJvdXQgYGRvLmNhbGxgCiAgZG8uY2FsbChtZXJnZSwgLikKYGBgCgpgYGB7cn0KIyBSZXByb2plY3RpbmcgdGhlIG9uZSBsYXJnZSByYXN0ZXIKIyBOT1RFOiBBTkRFUlMgaXNuJ3Qgc3VyZSB3aGF0IGlzIHN1cHBvc2VkIHRvIGJlIGhhcHBlbmluZyBoZXJlLi4uCnByaW50KHBhc3RlKCJQUk9KRUNUSU9OIEJFRk9SRToiLCBwcm9qZWN0aW9uKGFsbHJhc3RlcnMpKSkKcHJvamVjdGlvbihhbGxyYXN0ZXJzKTwtIDI5MjcKcHJpbnQocGFzdGUoIlBST0pFQ1RJT04gQUZURVI6IiwgcHJvamVjdGlvbihhbGxyYXN0ZXJzKSkpCgpgYGAKCmBgYHtyfQojIHNob3VsZCBzYXkgCiMgIk5BRDgzKEhBUk4pIC8gV2FzaGluZ3RvbiBTb3V0aCAoZnRVUykiCnN0X2NycyhhbGxyYXN0ZXJzKSRpbnB1dApgYGAKCmBgYHtyfQpzdF9jcnMoYWxscmFzdGVycykKcHJvamVjdGlvbihhbGxyYXN0ZXJzKTwtIDI5MjcKc2Y6OnN0X2NycyhhbGxyYXN0ZXJzKSRpbnB1dApgYGAKYGBge3J9CiMgcmVhZCBzaHBmaWxlIGJ1dCByZWFkT0dSIGRvZXNuJ3Qgd29yayBmb3IgYW5kZXJzPz8KIyBzaHBmaWxlPC0gcmVhZE9HUihkc249In4vRG93bmxvYWRzL2NvdXJ0LyIsIGxheWVyPSAiRVhVX01hcHBpbmdQb2x5Z29ucyIpCnNocGZpbGU8LSByZWFkUkRTKCIuL3NocGZpbGUuUkRTIikKCiMgZ2l2ZSBhbiBlcnJvciBpZiBgc2hwZmlsZWAgaXNuJ3QgdGhlIHJpZ2h0IHR5cGUgb2YgQ2xhc3MKaWYgKGNsYXNzKHNocGZpbGUpICE9ICJTcGF0aWFsUG9seWdvbnNEYXRhRnJhbWUiKSB7CiAgcHJpbnQoInNocGZpbGUgaXNuJ3QgYSBTcGF0aWFsUG9seWdvbnNEYXRhRnJhbWVtLCBidXQgaXQgc2hvdWxkIGJlISIpCn0KcGxvdChzaHBmaWxlKQpoZWFkKHNocGZpbGUpCmBgYAoKYGBge3J9CmNycyhhbGxyYXN0ZXJzLCBhc1RleHQ9VFJVRSkKc3RfY3JzKGFsbHJhc3RlcnMpJGlucHV0CmBgYAoKCmBgYHtyfQpjcnMoc2hwZmlsZSwgYXNUZXh0PVRSVUUpCnN0X2NycyhzaHBmaWxlKSRpbnB1dApgYGAKCmBgYHtyfQojIHJlcHJvamVjdGluZyB0aGUgc2hhcGVmaWxlCiMgTk9URTogYWxzbyBub3Qgc3VyZSB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgYmMgdGhleSBsb29rIHRvIGhhdmUgdGhlIHNhbWUgcHJvamVjdGlvbgojIG1heWJlIHRoZSBSRFMgZmlsZSB5b3UgZ2F2ZSBtZSB3YXMgYWxyZWFkeSByZS1wcm9qZWN0ZWQ/PwojIHJlcHJvamVjdGluZyBzaGFwZWZpbGUgYmFzZWQgb24gdGhlIHJhc3RlcnMgcHJvamVjdGlvbgpzaHBmaWxlPC0gc3BUcmFuc2Zvcm0oc2hwZmlsZSwgY3JzKGFsbHJhc3RlcnMpKSAgCmBgYAoKCgojIyBzYXZlIG91dCBvYmplY3RzIGZvciBsYXRlcgpgYGB7cn0Kc2F2ZVJEUyhzaHBmaWxlLCAic2hwZmlsZS5SRFMiKQpzYXZlUkRTKGFsbHJhc3RlcnMsICJhbGxyYXN0ZXJzLlJEUyIpCmBgYAoKCiMgUGFydCBJSQoKIyMgbG9hZCBvbGQgb2JqZWN0cwpgYGB7cn0Kc2hwZmlsZSA8LSByZWFkUkRTKCJzaHBmaWxlLlJEUyIpCmBgYAoKIyMgbWFwIGNpdHksIGJpdGNoCmBgYHtyfQpmaWx0ZXJfc2hwIDwtIGZ1bmN0aW9uKHNocGZpbGUsIHZhbF9saXN0KSB7CiAgc2hwZmlsZVtzaHBmaWxlQGRhdGEkU3BwQ29tcCAlaW4lIHZhbF9saXN0LF0KfQojIGZpbHRlciBmb3Igb25seSB0d28gZGVzaXJlZCBjb25kaXRpb25zCiMgbWFrZSBhIG5hbWVkIGxpc3Qgc28gd2UgY2FuIGFjY2VzcyB0aGUgaW5kdi4gU3BhdGlvblBvbHlnb25kc0RhdGFGcmFtZXMgYXMgbmVlZGVkCnR5cGVzIDwtIGMoIkRvdWdsYXMgRmlyIiwgIlBpb25lZXIiKQpuYW1lcyh0eXBlcykgPC0gdHlwZXMKdHlwZXMKYGBgCgpgYGB7cn0Kc2hwIDwtIG1hcCh0eXBlcywgZmlsdGVyX3NocCwgc2hwZmlsZT1zaHBmaWxlKQpgYGAKCmBgYHtyfQpwbG90KGFsbHJhc3RlcnMpCnBsb3Qob3V0JGBEb3VnbGFzIEZpcmAsIGFkZD1ULCBjb2w9ICJibHVlIikKYGBgCk9NRyEgYGdnc3BhdGlhbGAhIFtoZXJlJ3MgYSBnZ3BzdGlhbCB0dXRvcmlhbF0oaHR0cHM6Ly9wYWxlb2xpbWJvdC5naXRodWIuaW8vZ2dzcGF0aWFsL2FydGljbGVzL2dnc3BhdGlhbC5odG1sKQogCmBgYHtyfQpvYmogPC0gZ2dwbG90KCkgKwogICAgbGF5ZXJfc3BhdGlhbChkYXRhID0gb3V0JGBEb3VnbGFzIEZpcmApCiAgICAgICMgbGF5ZXJfc3BhdGlhbChkYXRhID0gb3V0JGBEb3VnbGFzIEZpcmAsIGZpbGwgPSBOQSwgY29sb3VyID0gImJsYWNrIikKb2JqCmBgYAoKCmBgYHtyfQpzaHBfcG5yIDwtIGZpbHRlcl9zaHAoc2hwZmlsZSwgc2hwZmlsZUBkYXRhJFNwcENvbXAgPT0gIlBpb25lZXIiKQpgYGAKCg==