Filtering MTBS perimeters by severity

+ a primer on Alaska Fire Perimeter Data

Spatial Data Analysis
Published

April 16, 2024

Modified

July 20, 2024

As part of my work with the Past, Present and Future of Boreal Feedbacks project, this summer I’ll be sampling forest composition and structure in forests that have reburned. One of our early goals with this project was to sample reburned forests off the road system - in part because they tend to go unsampled for obvious reasons1, and in part because we’re combining modern observations of reburned forests with lake sediment records that provide context on the last 2,500 years of forest composition, and those lakes are off the road system.

  • 1 Alaska is big

  • 2 For the record, also not how I pick field sites

  • Functionally, that means helicopter work (!!). Going into it, I was blinded a bit by the excitement of flying helicopters (beautiful views!!), and hadn’t braced myself for some of the challenges (also dangerous!!). It added pressure to picking field sites: helicopters can only land in so many spots, and it’s an expensive privilege, so you can’t just wander into the woods and pick a spot2.

    I’ve been digging through fire perimeter datasets, trying to locate fires that overlap.

    Fire perimeter data in Alaska

    There are functionally two forms of fire perimeter data in Alaska: the Alaska Large Fire Database (ALFD) and the Monitoring Trends in Burn Severity (MTBS) dataset (for more, see link to an incomplete glossary of Alaska data products).

    Alaska Large Fire Database (ALFD)

    The Alaska Large Fire Database, often referred to as “Alaska Large Fire”3 in my collaborative spaces for reasons I’m realizing I don’t know, is maintained by the Alaska Fire Service and contains fire perimeter data from 1942 to the present. It was developed in the 90s when collaborators from the Environmental Research institute of Michigan and the Alaska Interagency Coordination Center digitized and standardized perimeter information from fire reports that dated back to 1942 (Kasischke, Williams, and Barry 2002).

  • 3 said quickly, all in one word

  • Kasischke, Eric S., David Williams, and Donald Barry. 2002. “Analysis of the Patterns of Large Fires in the Boreal Forest Region of Alaska.” International Journal of Wildland Fire 11 (2): 131–44. https://doi.org/10.1071/wf02023.

    Using ground surveys, airborne surveys and aerial or satellite photography

    Difference between ALFD and MTBS

    Alaska Large Fire Database has been assumed to overestimate burned area within mapped fire events (Chen et al. 2021), and produces consistently higher estimates of area burned across Alaska compared to MTBS.

    Chen, Dong, Varada Shevade, Allison Baer, and Tatiana V. Loboda. 2021. “Missing Burns in the High Northern Latitudes: The Case for Regionally Focused Burned Area Products.” Remote Sensing 13 (20): 4145. https://doi.org/10.3390/rs13204145.

    In contrast, MTBS excludes fires less than 1,000 acres, so there are clear reasons to believe it underestimates burned area.

    Understanding the strengths and drawbacks of both is important - in the context of reburning, MTBS is a particularly useful database - older fire perimeters from ALFD become less precise (cite), sometimes overestimating where the fires overlapped (Buma et al. 2022).

    Buma, B., K. Hayes, S. Weiss, and M. Lucash. 2022. “Short-Interval Fires Increasing in the Alaskan Boreal Forest as Fire Self-Regulation Decays Across Forest Types.” Scientific Reports 12 (1): 4901. https://doi.org/10.1038/s41598-022-08912-8.

    [Brief aside on self-regulating fire]

    Update - New Alaska fire perimeter data

    Fun that as I was writing this, I was immediately corrected - the USGS has released updated fire perimeters for the National Wildlife Refuges

    Now, this only covers the Wildlife Refuges in Alaska, but those refuges cover about 30% of the state (and represent 80% of all the land in the National Fish and Wildlife Refuge System), so that’s still a pretty big chunk of landscape.

    Filtering MTBS in R

    I wanted to filter out pixels within MTBS that burned at high severity in both fires.

    terra 1.7.78
    Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE

    An aside - I’m storing these files on a remote server. The bash code below mounts the folder I need so I can access it in Quarto.

    open smb://10.60.2.10/FF_Lab/personal_storage/kate_storage/GIS/

    We’ll start with loading in the DNBR raster from the Dall City fire - this fire burned 530,717 acres in 2004.

    DallCity <- rast("/Volumes/GIS/site selection 2024/targetMTBS/Yukon/DallCity_2004/ak6628114999320040706_20010623_20050720_dnbr6.tif")
        
    plot(DallCity, main = "Original")

    Col1 Col2 Col3
    1 unburned to low severity
    2 low severity
    3 moderate severity
    4 high severity

    We’ll get rid of the black border:

    DallCity <- subst(DallCity, 0, NA)
    
    plot(DallCity, main = "Original")

    Within that perimeter, here are the cells (again, 30 meter resolution) that burned at high severity (as defined by MTBS):

    DallCityHS <- subst(DallCity, 4, 4, 
                        others = NA)
    
    plot(DallCityHS, main = "High")

    Now, we can use the same indexing to trim down to just the high severity cells:

    DallCityHS <- trim(DallCityHS)
    
    plot(DallCityHS, main = "Trim")

    The Dall City fire overlaps with West fork, which burned XX acres in

        WestFork <- rast("/Volumes/GIS/site selection 2024/targetMTBS/Yukon/WestFork_2015/ak6635014986720150620_20140705_20160624_dnbr6.tif")
      
        plot(WestFork, main = "Original")

        WestFork <- subst(WestFork, 0, NA)
        
        plot(WestFork, main = "Original")

        WestForkHS <- subst(WestFork, 4, 4, 
                        others = NA)
        
        plot(WestForkHS)

       overlap <- intersect(WestForkHS, DallCityHS)
       
       plot(overlap)

       yukon2xHS <- subst(overlap, TRUE, 1, others = NA)
       
       plot(yukon2xHS)

       yukon2xHS <- trim(yukon2xHS)
       
       plot(yukon2xHS)

        yukon2xHS_shp <- as.polygons(yukon2xHS)
        plot(yukon2xHS_shp)

        # writeVector(yukon2xHS_shp, 
         #     "/Users/katherinehayes/Desktop/yukon2xHS.shp",
         #     overwrite = TRUE)
    ## Kanuti
    
      ## BTTS 1991 #####################################
      
      KanBTT <- rast("/Volumes/GIS/site selection 2024/targetMTBS/Kanuti/BTTS1991/ak6670715154819910630_19860613_19920605_dnbr6.tif")
      
      plot(KanBTT, main = "Original")

      KanBTT <- subst(KanBTT, 0, NA)
        
      plot(KanBTT, main = "Original")

      KanBTTHS <- subst(KanBTT, 4, 4, 
                        others = NA)
        
        plot(KanBTTHS)

    Next, we’ll look

      Evan <- rast("/Volumes/GIS/site selection 2024/targetMTBS/Kanuti/Evansville2004/ak6687815131320040706_20020624_20050616_dnbr6.tif")
      
      plot(Evan, main = "Original")

      Evan <- subst(Evan, 0, NA)
        
      plot(Evan, main = "Original")

      EvanHS <- subst(Evan, 4, 4, 
                        others = NA)
        
        plot(EvanHS)

      ## Combining #######################
        
        overlap <- intersect(KanBTTHS, EvanHS)
       
       plot(overlap)

       Kanuti2xHS <- subst(overlap, TRUE, 1, others = NA)
       
       plot(Kanuti2xHS)

       Kanuti2xHS <- trim(Kanuti2xHS)
       
       plot(Kanuti2xHS)

        Kanuti2xHS_shp <- as.polygons(Kanuti2xHS)
        plot(Kanuti2xHS_shp)

         #writeVector(Kanuti2xHS_shp, 
           #   "/Users/katherinehayes/Desktop/Kanuti2xHS.shp",
            #  overwrite = TRUE)
      ## BTT 1994 #####################################
      
      BTT <- rast("/Volumes/GIS/site selection 2024/targetMTBS/LastChance/BTT1994/ak6712115052019940608_19860823_19950825_dnbr6.tif")
      
        BTT <- subst(BTT, 0, NA)
        
      plot(BTT, main = "Original")

      BTThs <- subst(BTT, 4, 4, 
                        others = NA)
        
        plot(BTThs)

      ## Chapman 2005 #####################################
      
      Chapman <- rast("/Volumes/GIS/site selection 2024/targetMTBS/LastChance/Chapman2005/ak6707615031720050530_20020617_20060612_dnbr6.tif")
      
      plot(Chapman, main = "Original")

      Chapman <- subst(Chapman, 0, NA)
        
      plot(Chapman, main = "Original")

      ChapmanHS <- subst(Chapman, 4, 4, 
                        others = NA)
        
        plot(ChapmanHS)

      ## Combining #######################
      
       overlap <- intersect(BTThs, ChapmanHS)
       
       plot(overlap)

       Last2xHS <- subst(overlap, TRUE, 1, others = NA)
       
       plot(Last2xHS)

       Last2xHS <- trim(Last2xHS)
       
       plot(Last2xHS)

        Last2xHS_shp <- as.polygons(Last2xHS)
        plot(Last2xHS_shp)

         #writeVector(Last2xHS_shp, 
           #   "/Users/katherinehayes/Desktop/LastChance2xHS.shp",
            #  overwrite = TRUE)

    From there, you

    Update: new fire perimeters

    Carson et al. from the USGS has put out an analysis updating fire perimeters in Alaska.

    More Resources

    Session Info

    sessionInfo()
    R version 4.4.1 (2024-06-14)
    Platform: aarch64-apple-darwin20
    Running under: macOS Sonoma 14.0
    
    Matrix products: default
    BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
    LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0
    
    locale:
    [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    
    time zone: America/Anchorage
    tzcode source: internal
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] sf_1.0-16    terra_1.7-78
    
    loaded via a namespace (and not attached):
     [1] digest_0.6.36      codetools_0.2-20   fastmap_1.2.0      xfun_0.45         
     [5] magrittr_2.0.3     e1071_1.7-14       KernSmooth_2.23-24 knitr_1.47        
     [9] htmltools_0.5.8.1  rmarkdown_2.27     classInt_0.4-10    cli_3.6.3         
    [13] grid_4.4.1         DBI_1.2.3          proxy_0.4-27       class_7.3-22      
    [17] compiler_4.4.1     rstudioapi_0.16.0  tools_4.4.1        evaluate_0.24.0   
    [21] Rcpp_1.0.12        yaml_2.3.8         rlang_1.1.4        jsonlite_1.8.8    
    [25] units_0.8-5