Landsat 9 Stacking Bands 1-7

library(terra)
library(tidyverse)

Data Import

Since the data can be in another folder at another location. I shall be using the root path as a way to get the path in my case.

rootDir <- "C:/Users/roywa/Data/LST/LC09_L2SP_168061_20230119_20230313_02_T1/"
all_tif_files <- list.files(rootDir, pattern = "\\.TIF$", full.names = TRUE)
lst_files<-list.files(rootDir, pattern="B([1-9])\\.TIF$", full.names = TRUE)

The get_band function is used to get the band given a valid Landsat formatted image name.

get_band <- function(name) {
  band <- str_split_i(name, "", -1)
  return(band)
}

Plotting to make sure we have all the images we require to stack. In this case we are expecting 7 images ie 7 bands.

lst_images <- rast(lst_files)
names(lst_images) <- names(lst_images) |>
  map(\(x) str_c("BAND ", get_band(x)))
lst_images %>%
  terra::plot(main=names(lst_images),col = blues9 )

Plotting an RGB composite with this method requires selecstion of the bands in the order of: - Red (Band 4) - Green (Band 3) _ Blue (Band 2)

lst_rgb <- c(lst_images["BAND 4"],lst_images["BAND 3"],lst_images["BAND 2"])
plotRGB(lst_rgb, main="RGB", stretch="lin")

I have decided to write the image on

writeRaster(lst_images, str_c(rootDir,"LC09_L2SP_STACK_1_7.TIF"), overwrite=TRUE)

|---------|---------|---------|---------|
=========================================
                                          
LS0tDQp0aXRsZTogIlN0YWNraW5nIExhbmRzYXQ5IEltYWdlcyINCmF1dGhvcjogIlJveSBXYXN3YSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMgTGFuZHNhdCA5IFN0YWNraW5nIEJhbmRzIDEtNw0KDQpgYGB7ciBpbXBvcnR9DQpsaWJyYXJ5KHRlcnJhKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCiMjIERhdGEgSW1wb3J0DQpTaW5jZSB0aGUgZGF0YSBjYW4gYmUgaW4gYW5vdGhlciBmb2xkZXIgYXQgYW5vdGhlciBsb2NhdGlvbi4gSSBzaGFsbCBiZSB1c2luZyB0aGUgcm9vdCBwYXRoIGFzIGEgd2F5IHRvIGdldCB0aGUgcGF0aCBpbiBteSBjYXNlLg0KYGBge3IgZmlsZXN9DQpyb290RGlyIDwtICJDOi9Vc2Vycy9yb3l3YS9EYXRhL0xTVC9MQzA5X0wyU1BfMTY4MDYxXzIwMjMwMTE5XzIwMjMwMzEzXzAyX1QxLyINCmFsbF90aWZfZmlsZXMgPC0gbGlzdC5maWxlcyhyb290RGlyLCBwYXR0ZXJuID0gIlxcLlRJRiQiLCBmdWxsLm5hbWVzID0gVFJVRSkNCmxzdF9maWxlczwtbGlzdC5maWxlcyhyb290RGlyLCBwYXR0ZXJuPSJCKFsxLTldKVxcLlRJRiQiLCBmdWxsLm5hbWVzID0gVFJVRSkNCmBgYA0KDQpUaGUgYGdldF9iYW5kYCBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgYmFuZCBnaXZlbiBhIHZhbGlkIExhbmRzYXQgZm9ybWF0dGVkIGltYWdlIG5hbWUuDQpgYGB7ciBmdW5jdGlvbnN9DQpnZXRfYmFuZCA8LSBmdW5jdGlvbihuYW1lKSB7DQogIGJhbmQgPC0gc3RyX3NwbGl0X2kobmFtZSwgIiIsIC0xKQ0KICByZXR1cm4oYmFuZCkNCn0NCmBgYA0KDQpQbG90dGluZyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIGltYWdlcyB3ZSByZXF1aXJlIHRvIHN0YWNrLiBJbiB0aGlzIGNhc2Ugd2UgYXJlIGV4cGVjdGluZyA3IGltYWdlcyBpZSA3IGJhbmRzLg0KYGBge3IgcGxvdH0NCmxzdF9pbWFnZXMgPC0gcmFzdChsc3RfZmlsZXMpDQpuYW1lcyhsc3RfaW1hZ2VzKSA8LSBuYW1lcyhsc3RfaW1hZ2VzKSB8Pg0KICBtYXAoXCh4KSBzdHJfYygiQkFORCAiLCBnZXRfYmFuZCh4KSkpDQpsc3RfaW1hZ2VzICU+JQ0KICB0ZXJyYTo6cGxvdChtYWluPW5hbWVzKGxzdF9pbWFnZXMpLGNvbCA9IGJsdWVzOSApDQpgYGANCg0KUGxvdHRpbmcgYW4gUkdCIGNvbXBvc2l0ZSB3aXRoIHRoaXMgbWV0aG9kIHJlcXVpcmVzIHNlbGVjc3Rpb24gb2YgdGhlIGJhbmRzIGluIHRoZSBvcmRlciBvZjoNCiAgLSBSZWQgKEJhbmQgNCkNCiAgLSBHcmVlbiAoQmFuZCAzKQ0KICBfIEJsdWUgKEJhbmQgMikNCmBgYHtyfQ0KbHN0X3JnYiA8LSBjKGxzdF9pbWFnZXNbIkJBTkQgNCJdLGxzdF9pbWFnZXNbIkJBTkQgMyJdLGxzdF9pbWFnZXNbIkJBTkQgMiJdKQ0KcGxvdFJHQihsc3RfcmdiLCBtYWluPSJSR0IiLCBzdHJldGNoPSJsaW4iKQ0KYGBgDQpJIGhhdmUgZGVjaWRlZCB0byB3cml0ZSB0aGUgaW1hZ2Ugb24gDQpgYGB7ciB3cml0ZV9pbWFnZX0NCndyaXRlUmFzdGVyKGxzdF9pbWFnZXMsIHN0cl9jKHJvb3REaXIsIkxDMDlfTDJTUF9TVEFDS18xXzcuVElGIiksIG92ZXJ3cml0ZT1UUlVFKQ0KYGBgDQoNCg0K