Deter - Queimadas e desmatamento

library(tidyverse)
library(sf) # ler shapefile
# Exemplo com os três shapefiles
amz <- st_read("../data-raw/dados_brutos/deter_queimadas/deter-amz-deter-public.shp") # ALB (completo, desde 2016)

# cerrado <- st_read("../data-raw/dados_brutos/deter_queimadas/deter-cerrado-nb-deter-public.shp") # Somente desmatamento

pantanal <- st_read("../data-raw/dados_brutos/deter_queimadas/deter-pantanal-deter-public.shp") # Dados de cicatriz de queimada Somente a partir de 2023
# EXEMPLIFICANDO COM AMAZONIA
# Ver estrutura
# str(amz)
# 
# # Visualizar os primeiros registros
# head(amz) 
#   # ou
#   glimpse(amz)
# 
# # Visualizar nomes das colunas
# names(amz) #Coluna de interesse ("CLASSNAME")
# 
# # Visualizar nomes das linhas da coluna "CLASSNAME"
# amz$CLASSNAME
# 
# # Quantificar observações
# table(amz$CLASSNAME)
# 
#   # Verificar valores únicos de classe e estado
#   unique(amz$CLASSNAME) # Linha de interesse ("CICATRIZ_DE_QUEIMADA")
#   unique(amz$UF) # Somente MT
#   


# Filtrar para linha de interesse
amz <- amz |>
    # select(CLASSNAME, VIEW_DATE, UF, geometry, MUNICIPALI)
    mutate(
      bioma = "Amazônia"
    ) |> 
    filter(CLASSNAME == "CICATRIZ_DE_QUEIMADA",
           UF == "MT")


# Plot simples
# plot(st_geometry(amz))


ggplot(amz) +
  geom_sf() +  # Preenchimento por bioma, sem contorno
  # scale_fill_manual(values = c("Amazônia" = "#1b9e77", 
  #                              "Cerrado" = "#d95f02", 
  #                              "Pantanal" = "#7570b3")) +
  theme_minimal() +
  labs(title = "Queimada Amazônia Legal brasileira (DETER)") +
  theme(legend.position = "bottom")
# str(cerrado)
# glimpse(cerrado)
# unique(cerrado$UF)
# 
# cerrado <- cerrado |> 
#   mutate(
#     bioma = "Cerrado"
#   ) |> 
#   filter(CLASSNAME == "DESMATAMENTO_CR", # Só desmat
#                      UF == c("MT", "MS", "GO", "DF"))
# 
# ggplot(cerrado) +
#   geom_sf() +  # Preenchimento por bioma, sem contorno
#   # scale_fill_manual(values = c("Amazônia" = "#1b9e77", 
#   #                              "Cerrado" = "#d95f02", 
#   #                              "Pantanal" = "#7570b3")) +
#   theme_minimal() +
#   labs(title = "Desmatamento Cerrado (DETER)") +
#   theme(legend.position = "bottom")
# str(pantanal)
glimpse(pantanal)
unique(pantanal$CLASS_NAME)

pantanal <- pantanal |> 
  mutate(CLASSNAME = CLASS_NAME,
         bioma = "Pantanal") |> # padronizar nome da coluna
  filter(CLASSNAME == "cicatriz de queimada")

ggplot(pantanal) +
  geom_sf() +  # Preenchimento por bioma, sem contorno
  # scale_fill_manual(values = c("Amazônia" = "#1b9e77", 
  #                              "Cerrado" = "#d95f02", 
  #                              "Pantanal" = "#7570b3")) +
  theme_minimal() +
  labs(title = "Queimada Pantanal (DETER)") +
  theme(legend.position = "bottom")
# Unindo shapefiles em um único
deter_all <- bind_rows(amz, cerrado, pantanal)

# Gerando plot dos biomas 
ggplot(deter_all) +
  geom_sf(aes(fill = bioma), color = NA) +
  scale_fill_manual(values = c(
    "Amazônia" = "#1b9e77",
    "Cerrado" = "#d95f02",
    "Pantanal" = "#7570b3"
  )) +
  theme_minimal() +
  labs(title = "Áreas com Cicatriz de Queimada e Desmatamento (DETER)",
       fill = "Bioma") +
  theme(legend.position = "bottom")

# Baixando arquivo shapefile unido
# write_rds(deter_all, "areas-queimada-biomas")
deter_all$geometry[[1]] |> plot()
deter_all |> 
  mutate(ANO = year(VIEW_DATE)) |> 
  filter(ANO == 2021) |> 
  ggplot() +
  geom_sf(aes(fill = bioma), color = NA) +
  scale_fill_manual(values = c(
    "Amazônia" = "#1b9e77",
    "Cerrado" = "#d95f02",
    "Pantanal" = "#7570b3"
  )) +
  theme_minimal() +
  labs(title = "Áreas com Cicatriz de Queimada e Desmatamento (DETER)",
       fill = "Bioma") +
  theme(legend.position = "bottom") 
# Averiguação do Cálculo da Área
# pantanal |> slice(1) |> pull(geometry) |> plot()# 0.1000308
# coords <- pantanal$geometry[[1]] |> as.matrix()
# geosphere::areaPolygon(coords) / 1000000

func_ret_x <-function(geometria){
  ob <- geometria[[1]] |> as.matrix()
  mean(ob[,1])
}

func_ret_y <-function(geometria){
  ob <- geometria[[1]] |> as.matrix()
  mean(ob[,2])
}

df <- deter_all |>  
  group_by(geometry) |> 
  mutate(
  ANO = year(VIEW_DATE),
  x = func_ret_x(geometry),
  y = func_ret_y(geometry)
) 
df |> 
  as_tibble() |> 
  # write_rds("../data-raw/deter-queimadas.rds")

💨 Entrada com a Base: deter-queimadas.rds

# original archive "deter-queimadas.rds" = 122,1mb

deter_queimadas <- read_rds("../data-raw/deter-queimadas.rds") |> 
  rename(
    longitude = x,
    latitude = y
  )

glimpse(deter_queimadas)

Classificando cada ponto em município

library(sf)
library(dplyr)
library(lwgeom) # para st_make_valid

municipality_sf <- municipality %>%
  st_transform(crs = 4326) %>%
  st_make_valid()

deter_queimadas_sf <- st_as_sf(
  deter_queimadas,
  coords = c("longitude", "latitude"),
  crs = 4326,
  remove = FALSE # mantém as colunas originais lon/lat
)

deter_queimadas_sf <- st_join(
  deter_queimadas_sf,
  municipality_sf %>% select(name_muni),
  join = st_within
)

deter_queimadas_sf <- deter_queimadas_sf %>%
  mutate(city_ref = ifelse(is.na(name_muni), "Other", name_muni)) %>%
  select(-name_muni) # remove coluna original para evitra duplicada

deter_queimadas <- as.data.frame(deter_queimadas_sf)

glimpse(deter_queimadas)

# Salvar
# write_rds(deter_queimadas, "data-raw/deter_queimadas.rds")

Classificando cada ponto em estado

library(sf)
library(geobr)

# Transformar em objeto sf (coordenadas lon/lat, CRS WGS84), 
# Nesse caso os pontos já estão em lon/lat, EPSG:4326
deter_queimadas_sf <- st_as_sf(deter_queimadas, 
                    coords = c("longitude", "latitude"), 
                    crs = 4326,
                    remove = FALSE)

# Estados do geobr (CRS do pacote é o SIRGAS 4674)
estados <- geobr::read_state(year = 2020) |> 
  st_transform(crs = 4326)   # transforma para mesmo sistema de referência de coord (WGS84)

# Join espacial
deter_queimadas <- st_join(deter_queimadas_sf, estados["abbrev_state"])

# Converter para data frame e renomear coluna 
deter_queimadas <- as_data_frame(deter_queimadas |> 
                               rename("state" = abbrev_state))

# Visualizar resumo
glimpse(deter_queimadas)
tail(deter_queimadas)

# Padronizar colunas
deter_queimadas <- deter_queimadas |> 
  mutate(CLASSNAME = as.character(CLASSNAME),
    CLASSNAME = case_when(
    CLASSNAME == "cicatriz de queimada" ~ "CICATRIZ_DE_QUEIMADA",
    TRUE ~ CLASSNAME
  ))

# Converter para data frame novamente 
deter_queimadas <- as_data_frame(deter_queimadas)

# Salvar
# write_rds(deter_queimadas, "../data/deter_queimadas.rds")

Focos de queimadas - Terrabrasilis

Esta base não contém dados de queimada por município, somente os focos por estados

Arquivo deter-fogo-28-09-2025-20_46_38.csv (baixado em: https://terrabrasilis.dpi.inpe.br/app/dashboard/fires/biomes/aggregated/#)

focos_queimadas <- read.csv("../data-raw/dados_brutos/deter_queimadas/all_dashboard-fires-month-25-10-2025-09_15_56.csv",
         sep = ";")

# Considerando todo tipo de foco de incêndio
focos_queimadas <- focos_queimadas |> 
  mutate(
    uf = case_when(
      uf == "GOIÁS" ~ "GO",
      uf == "MATO GROSSO DO SUL" ~ "MS",
      uf == "MATO GROSSO" ~ "MT"
    )
  ) |> 
  filter(
  uf == c("GO", "MS", "MT")) |>
  separate(date, into = c("ano", "mes"), sep = "/") |> 
  mutate(
    ano = as.integer(ano),
    mes = as.integer(mes)
  ) |> 
  arrange(ano) |> 
  group_by(uf, ano) |> 
  summarise(
    focos = sum(focuses, na.rm = TRUE)
  ) 

# Salvar
# write_rds(focos_queimadas, "../data/focos_queimadas.rds")