---
title: "mappingAS: triagem do Critério B (EOO, AOO e conversão MapBiomas)"
author: "mappingAS"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{mappingAS: triagem do Critério B (EOO, AOO e conversão MapBiomas)}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE        # os exemplos leem o MapBiomas pela rede; nao sao executados aqui
)
```

## O que o pacote faz

`mappingAS` é uma ferramenta no estilo do [GeoCat](https://geocat.iucnredlist.org/)
para **triagem do Critério B** da Lista Vermelha da IUCN. A partir de pontos de
ocorrência (`.xlsx`, `.csv` ou shapefile), ele:

- calcula a **EOO** (Extensão de Ocorrência, polígono convexo mínimo) e a
  **AOO** (Área de Ocupação, grade de 2 km), em projeção de áreas iguais;
- mede o **% de área convertida (antrópica)** e o **% natural** dentro do EOO e
  do AOO, além da **área de cada classe** do MapBiomas;
- monta a **série temporal** da cobertura (% × ano);
- exporta tudo (tabelas, shapefile/GeoPackage) e tem um **app Shiny**.

> As categorias de risco são **provisórias** (apenas limiares de tamanho de
> EOO/AOO) e servem só para triagem.

```{r load}
library(mappingAS)
```

## 1. Importar os pontos

`read_occurrences()` aceita `.csv`/`.tsv`/`.txt`, `.xlsx`/`.xls` e arquivos
vetoriais (`.shp`, `.gpkg`, `.geojson`, `.zip`) e tenta **detectar
automaticamente** as colunas de espécie, longitude e latitude.

```{r import}
# arquivo de exemplo que acompanha o pacote
ex <- system.file("extdata", "example_occurrences.csv", package = "mappingAS")
occ <- read_occurrences(ex)

# se a deteccao falhar, informe as colunas manualmente:
```

```{r, eval=FALSE}
occ <- read_occurrences("meus_dados.csv",
                        species_col = "especie",
                        lon_col = "longitude",
                        lat_col = "latitude")
```

O resultado é um objeto `sf` de pontos em WGS84, com uma coluna `species`.

## 2. Avaliar as espécies

`assess_species()` roda toda a cadeia para cada espécie: EOO, AOO, conversão e a
categoria provisória.

```{r assess}
res <- assess_species(
  occ,
  year = 2024,          # ano do MapBiomas para o "retrato" de cobertura
  collection = 10,      # coleção do MapBiomas
  backend = "local"     # "local" (sem conta GEE) ou "gee"
)

res            # impressão resumida
res$summary    # uma linha por espécie
```

Principais colunas de `res$summary`: `eoo_km2`, `aoo_km2`, `aoo_cells`,
`eoo_converted_pct`/`eoo_natural_pct`, `aoo_converted_pct`/`aoo_natural_pct` e
`provisional_cat`.

O índice de conversão usa um denominador **terrestre**:
`convertido = antrópico / (antrópico + natural) × 100` (água e "não observado"
ficam de fora por padrão; mude com `water_in_denominator = TRUE`).

## 3. Mapa e gráfico de conversão

```{r viz}
map_species(res)            # leaflet: pontos + EOO + AOO
plot_conversion(res)        # barras: natural / alterado / agua / outros
```

## 4. Composição por classe (todas as classes do MapBiomas)

Para ver **cada classe** dentro do EOO e do AOO:

```{r classes}
ct <- class_table(res)
head(ct)
# species | range(EOO/AOO) | code | class_pt | class_en | group | area_km2 | pct
```

## 5. Série temporal (% da área × ano)

```{r timeseries}
# a cada 5 anos (padrao), dentro do EOO da primeira especie
ts <- timeseries_for_species(res, range = "eoo", by = "class", years = c(2022, 2024))
plot_timeseries(ts)         # grafico de area empilhada, cores oficiais MapBiomas

# anual (mais lento) e por grupo:
ts_anual <- timeseries_for_species(res, range = "eoo",
                                   years = c(2022, 2024), by = "group")

# ou sobre uma geometria qualquer:
# ts2 <- cover_timeseries(minha_geometria,
#                         years = c(1990, 2000, 2010, 2020),
#                         by = "class", backend = "local")
```

Cada ano é lido separadamente do MapBiomas, então séries anuais de toda a
coleção podem demorar.

## 6. Exportar

```{r export}
# duas shapefiles (EOO e AOO) + CSV com todas as classes, na pasta "saida"
export_ranges(res, dir = "saida")

# um GeoPackage com as camadas eoo e aoo
export_ranges(res, dir = "saida", format = "gpkg")

# tudo num unico .zip (bom para enviar)
export_ranges(res, dir = "saida", zip = TRUE)
```

A tabela de atributos traz `species`, `eoo_km2`/`aoo_km2`, `conv_pct`,
`nat_pct`, `cat_B1`/`cat_B2`, `prov_cat`, `mb_year` e `mb_coll`. O arquivo
`*_classes.csv` traz a área e o % de cada classe.

## 7. Aplicativo Shiny

```{r app, eval=FALSE}
run_app()
```

A interface tem abas de **Resultados**, **Mapa**, **Conversão**, **Classes**,
**Série temporal** e **Métodos**, com download de CSV, shapefile/GeoPackage e
imagens (PNG/HTML).

## 8. Backends do MapBiomas

- **`"local"` (padrão)**: lê pela internet apenas a *janela* do GeoTIFF nacional
  via GDAL `/vsicurl/`. Não precisa de conta no Earth Engine nem baixar o mosaico
  inteiro. Para uso offline/repetido, aponte `src=` para um GeoTIFF local.
- **`"gee"`**: calcula as áreas por classe no servidor do Google Earth Engine
  (recomendado para distribuições muito grandes). Requer `rgee`:

```{r gee, eval=FALSE}
install.packages("rgee")
rgee::ee_install()
rgee::ee_Initialize()
res <- assess_species(occ, backend = "gee")
```

## Ressalvas

- As **categorias são provisórias** (não incluem fragmentação, declínio ou
  flutuação) — não as reporte como categorias finais.
- O **AOO** é sensível ao posicionamento da grade e ao esforço amostral.
- A **acurácia do MapBiomas** varia por classe, bioma e ano.
- Para distribuições continentais, prefira `backend = "gee"`.

## Citação

Cite também o **MapBiomas** (Coleção 10), as **diretrizes da IUCN** para o
Critério B e o **GeoCAT** (Bachman et al., 2011, ZooKeys).
