Este guia explica como criar expressões matemáticas para calcular índices espectrais personalizados no plugin RAVI. Ele também fornece exemplos práticos e dicas importantes para evitar erros comuns.

## Bandas Disponíveis

O Sentinel-2 fornece as seguintes bandas que você pode usar em suas expressões:

Banda (use na expressão) | Nome | Descrição | Comprimento de Onda | Resolução Espacial
--- | --- | --- | --- | ---
B1 | Aerossol Costeiro | Aerossol Costeiro | 443 nm | 60 m
B2 | Azul | Azul | 490 nm | 10 m
B3 | Verde | Verde | 560 nm | 10 m
B4 | Vermelho | Vermelho | 665 nm | 10 m
B5 | Borda Vermelha 1 | Borda Vermelha 1 | 705 nm | 20 m
B6 | Borda Vermelha 2 | Borda Vermelha 2 | 740 nm | 20 m
B7 | Borda Vermelha 3 | Borda Vermelha 3 | 783 nm | 20 m
B8 | NIR | Infravermelho Próximo | 842 nm | 10 m
B8A | NIR Estreito | Infravermelho Próximo Estreito | 865 nm | 20 m
B9 | Vapor d'Água | Vapor d'Água | 940 nm | 60 m
B11 | SWIR 1 | Infravermelho de Ondas Curtas 1 | 1610 nm | 20 m
B12 | SWIR 2 | Infravermelho de Ondas Curtas 2 | 2190 nm | 20 m

## Operadores Suportados

### Operadores Aritméticos

- `+` (adição)
- `-` (subtração)
- `*` (multiplicação)
- `/` (divisão)
- `**` (exponenciação)

### Operadores Relacionais

- `>` (maior que)
- `<` (menor que)
- `>=` (maior ou igual a)
- `<=` (menor ou igual a)
- `==` (igual a)
- `!=` (diferente de)

### Operadores Lógicos

- `&&` (E lógico)
- `||` (OU lógico)
- `!` (NÃO lógico)

## Funções Matemáticas Disponíveis

- `sqrt(x)` - Raiz quadrada de x
- `abs(x)` - Valor absoluto de x
- `min(x, y)` - Valor mínimo entre x e y
- `max(x, y)` - Valor máximo entre x e y
- `log(x)` - Logaritmo natural de x
- `exp(x)` - Função exponencial \( e^x \)
- `sin(x)`, `cos(x)`, `tan(x)` - Funções trigonométricas
- `round(x)` - Arredonda x para o inteiro mais próximo
- `floor(x)` - Arredonda x para baixo
- `ceil(x)` - Arredonda x para cima
- `pow(x, y)` - Eleva x à potência de y

## Exemplos de Expressões

### NDVI (Índice de Vegetação por Diferença Normalizada)

`(B8 - B4) / (B8 + B4)`

### EVI (Índice de Vegetação Melhorado)

`2.5 * ((B8 - B4) / (B8 + 6 * B4 - 7.5 * B2 + 1))`

### SAVI (Índice de Vegetação Ajustado ao Solo) com L=0.5

`(1 + 0.5) * ((B8 - B4) / (B8 + B4 + 0.5))`

### NDRE (Índice de Diferença Normalizada da Borda Vermelha)

`(B8 - B5) / (B8 + B5)`

### NDMI (Índice de Diferença Normalizada de Umidade)

`(B8 - B11) / (B8 + B11)`

### Expressão Condicional

Esta expressão calcula o NDVI apenas quando a banda vermelha (B4) for maior que 0.2. Caso contrário, retorna 0:

`(B4 > 0.2) ? ((B8 - B4) / (B8 + B4)) : 0`

Esta expressão calcula o NDMI apenas quando a banda SWIR1 (B11) for maior que 0.1. Caso contrário, retorna -1:

`(B11 > 0.1) ? ((B8 - B11) / (B8 + B11)) : -1`

### Expressão Condicional com Operadores Lógicos

Esta expressão calcula o NDVI apenas quando tanto a banda vermelha (B4) for maior que 0.2 quanto a banda NIR (B8) for maior que 0.3. Caso contrário, retorna 0:

`(B4 > 0.2 && B8 > 0.3) ? ((B8 - B4) / (B8 + B4)) : 0`

## Dicas Importantes

- Normalização automática: Todas as bandas já são divididas por 10000 para converter de valores digitais para reflectância (0-1).
- Evite divisão por zero: Certifique-se de que o denominador em suas expressões não possa ser zero.
- Use parênteses: Para garantir que as operações sejam executadas na ordem correta.
- Teste sua expressão: Comece com índices conhecidos e modifique-os para entender como funcionam.
- Siga as convenções do Python: As expressões devem seguir a sintaxe do Python, incluindo o uso de operadores como `**` para exponenciação.

## Atenção

Ao criar expressões complexas, teste-as incrementalmente para garantir que funcionem como esperado. Valores extremos ou divisão por zero podem causar resultados inesperados.