Faxina de Dados do APPEEARS (MODIS/Vegetação)

O APPEEARS (Application for Extracting and Exploring Analysis Ready Samples) é uma plataforma da NASA desenvolvida pela Land Processes Distributed Active Archive Center (LP DAAC) que facilita o acesso e o pré-processamento de dados de sensoriamento remoto, especialmente da coleção MODIS e outros produtos de observação da Terra.

Objetivo
Este pipeline processa dados ecológicos do MODIS extraídos via APPEEARS, contendo métricas essenciais para monitoramento vegetativo:

Variáveis Processadas:
- ET (Evapotranspiração) - EVI (Enhanced Vegetation Index)
- NDVI (Normalized Difference Vegetation Index)
- FPAR (Fraction of Absorbed Photosynthetically Active Radiation) - LAI (Leaf Area Index)

# Carregar bibliotecas
library(tidyverse)
library(dplyr)
library(geobr)

# Lista de arquivos
csv_files_list <- list.files("../data-raw/AppEEARS/", # arquivos excluídos 
                       pattern = ".csv", 
                       full.names = TRUE)

# Empilhar arquivos 
appeears_stack <- purrr::map_dfr(csv_files_list, 
                           readr::read_csv)

Abaixo vamos selecionar camadas de interesses, renomear colunas, extraindo o ano e o mês das datas no formato YYYY-MM-DD, filtrar para nos anos que serão analisados e agrupar por lat e lon. Após o agrupamento é calculado a média das variáveis numéricas por mês e ano.

appeears <- appeears_stack |> 
   dplyr::select(Latitude, Longitude, Date, MOD15A2H_061_Lai_500m, MOD15A2H_061_Fpar_500m, 
         MOD13Q1_061__250m_16_days_EVI, MOD13Q1_061__250m_16_days_NDVI, 
         MOD16A2_061_ET_500m) |>
  dplyr::rename(date = Date,
         lat = Latitude,
         lon = Longitude,
         lai = MOD15A2H_061_Lai_500m,
         fpar = MOD15A2H_061_Fpar_500m,
         evi = MOD13Q1_061__250m_16_days_EVI,
         ndvi = MOD13Q1_061__250m_16_days_NDVI,
         et = MOD16A2_061_ET_500m) |> 
  dplyr::mutate(year = lubridate::year(date),
                month = lubridate::month(date))  |> 
  dplyr::filter(
    year >= 2015 & year <= 2023
  ) |> 
  dplyr::group_by(lat, lon, year, month)  |> 
  dplyr::summarise(
    dplyr::across(c(fpar, lai, evi, ndvi, et), 
           ~ mean(., na.rm = TRUE),
           .names = "media_{.col}"),
    n_observacoes = dplyr::n(),
    .groups = 'drop'
  ) |> 
  dplyr::arrange(lat, lon, year, month)
# Valores NA na coluna ET (Dados de 2021 a 2024)

# Visualizar dados
dplyr::glimpse(appeears)
# View(appeears)
# Verificacao de pontos Brasil Central

br_country <- geobr::read_country(showProgress = FALSE)

br_country |> 
  ggplot2::ggplot()+
  ggplot2::geom_sf()+
  ggplot2::geom_point(
    data=appeears |> 
      dplyr::filter(ano == 2018), 
      ggplot2::aes(lon,lat)
  )

appeears |> 
  dplyr::filter(ano == 2017) |> 
  ggplot2::ggplot(ggplot2::aes(lon,lat)) +
  ggplot2::geom_point()
# Gerar arquivo com os dados
# readr::write_rds(appeears, '../data-raw/appeears-modis.rds')

Classificando cada ponto em município

library(sf) # para st_make_valid

appeears_modis <- read_rds("../data-raw/appeears-modis.rds")

# 1. Garantir que shapefile de municípios está no mesmo CRS e válido
municipality_sf <- municipality %>%
  st_transform(crs = 4326) %>%
  st_make_valid()

# 2. Converter seu data frame para sf sem perder colunas
appeears_modis_sf <- st_as_sf(
  appeears_modis,
  coords = c("lon", "lat"),
  crs = 4326,
  remove = FALSE # mantém as colunas originais lon/lat
)

# 3. Fazer o join espacial
appeears_modis_sf <- st_join(
  appeears_modis_sf,
  municipality_sf %>% select(name_muni),
  join = st_within
)

# 4. Criar coluna "city_ref", substituindo NA por "Other"
appeears_modis_sf <- appeears_modis_sf %>%
  mutate(city_ref = ifelse(is.na(name_muni), "Other", name_muni)) %>%
  select(-name_muni) # remove coluna original se não quiser duplicada

# 5. Converter de volta para data frame se não quiser manter como sf
appeears_modis <- as.data.frame(appeears_modis_sf)

# Conferir
glimpse(appeears_modis)

Classificando cada ponto em estado (Método mais rápido)

# Transformar em objeto sf (coordenadas lon/lat, CRS WGS84), 
# Nesse caso os pontos já estão em lon/lat, EPSG:4326
appeears_modis_sf <- st_as_sf(appeears_modis, 
                    coords = c("lon", "lat"), 
                    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
appeears_modis_incorporado <- st_join(appeears_modis_sf, estados["abbrev_state"])

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

# Visualizar resumo
glimpse(appeears_modis_incorporado)
# tail(appeears_modis_incorporado)

# Salvar
# write_rds(appeears_modis_incorporado, "../data/appeears_modis.rds")