# RAVI - Remote Analysis of Vegetation Indices

RAVI is a QGIS plugin designed to integrate with Google Earth Engine (GEE), enabling simplified processing and visualization of geospatial data from the harmonized surface reflectance catalog of the Copernicus Sentinel-2 mission satellites. The plugin supports vegetation index calculations, visualization, and download of multispectral images. These features make it a valuable tool for students, researchers, farmers, and professionals working in agriculture, land monitoring, or environmental management.

## Key Features

- Integration with Earth Engine: Easy authentication, direct processing, and immediate visualization of Sentinel-2 data in QGIS.
- Vegetation Index Calculations: Support for indices such as NDVI, EVI, SAVI, and GNDVI, on specific dates or in composite images.
- Time Series Analysis: Generation of time series, integration of NASA POWER precipitation data, and smoothing with Savitzky-Golay filters.
- Interactive Visualization: Creation of interactive charts, raster styling, and export options.

## Installation

To install RAVI:

1. Open QGIS and navigate to the Plugins menu.
2. Select Manage and Install Plugins.
3. In the "All" tab, search for "RAVI", select it, and click Install.
4. Ensure that RAVI is checked in the installed plugins list.
5. IMPORTANT: Restart QGIS

## Step by step guide

### Step 1: Authentication

- If you don't have a Google Earth Engine account, you can create one and register a project here.
- Open the Google Earth Engine Code Editor to find your project ID.
- You can also find the project ID in the Google Cloud Console under the "Project Info" section.
- After entering your project ID, click Setup Authentication.
- Authorize the plugin to access your Earth Engine account.

### Step 2: Select output folder

Choose the folder where you want to save the output files.

### Step 3: Load and select the area of interest (AOI)

- Select an AOI by loading a shapefile or GeoJSON file.
- Ensure the geometry is valid (Polygon or MultiPolygon only).
- Add a Google Maps layer to the QGIS canvas for better visualization and context.
- Use the Build AOI from Canvas Extent button to generate a new AOI based on the current canvas extent.

### Step 4: Define time range for imagery search

Set a custom time range or select a suggested one.

### Step 5: Select vegetation index for time series analysis

Choose the vegetation index you want to analyze from the dropdown menu.

### Step 6: Imagery Overlap filter

Set the specified filter according to your analysis requirements.

### Step 7: AOI Buffer

Set the Buffer according to your analysis requirements.

### Step 8: Cloud pixel percentage filter

Set the specified filter according to your analysis requirements.

### Step 9: Valid pixel percentage filter

Set the specified filter according to your analysis requirements.

## Panel

### 1. Time Series Plot

- Visualize the time series of the selected vegetation index over the defined AOI.
- Hover over the plot to see specific values and dates for detailed analysis.

### 2. Load RGB Layer (Focus on a Day)

Load and display an RGB layer for a specific date to analyze the visual appearance of the area. All spectral bands are downloaded, and the band numbers correspond to the Sentinel-2 bands as listed below:

Sentinel-2 Band Information
Sentinel-2 Band Name | QGIS Band Number | Wavelength (nm) | Spatial Resolution (m)
--- | --- | --- | ---
Band 1 (Coastal aerosol) | 1 | 443 | 60
Band 2 (Blue) | 2 | 490 | 10
Band 3 (Green) | 3 | 560 | 10
Band 4 (Red) | 4 | 665 | 10
Band 5 (Vegetation Red Edge) | 5 | 705 | 20
Band 6 (Vegetation Red Edge) | 6 | 740 | 20
Band 7 (Vegetation Red Edge) | 7 | 783 | 20
Band 8 (NIR) | 8 | 842 | 10
Band 8A (Vegetation Red Edge) | 9 | 865 | 20
Band 9 (Water Vapour) | 10 | 945 | 60
Band 11 (SWIR) | 11 | 1610 | 20
Band 12 (SWIR) | 12 | 2190 | 20

### Note on Band 10

Please note that Band 10 (SWIR - Cirrus) is not available in the Harmonized Surface Reflectance (S2_SR_HARMONIZED) catalog of Sentinel-2. This band is primarily used for cirrus cloud detection and is excluded from the SR dataset due to its limited applicability in surface analysis.

### 3. Load Index Layer (Focus on a Day)

Load and display a vegetation index layer for a specific date.

### 4. Load Index Layer (Composite)

Generate and display a composite image based on the selected vegetation index and the user-defined metric. The composite image will include all images within the current date selection. Use the date selection tool to filter out specific dates.

### 5. Date Selection Tool

- Use the date selection tool to filter and select specific dates for analysis.
- The tool updates the time series plot.
- Composite images are based on all selected dates.

### 6. Savitzky-Golay Filter

Apply the Savitzky-Golay filter to smooth the time series data for enhanced trend analysis. Adjust the polynomial order and window length as needed.

### 7. Save Options

Save the time series data in CSV format. To save the series as an image, open it in your browser to enable the download option.

### 8. NASA POWER Precipitation

Add monthly precipitation data from NASA POWER for cross-variable comparisons. Save the precipitation data in CSV format.

### 9. Quickly Run New Time Series

Quickly run a new time series analysis by changing the Area of Interest (AOI), vegetation index, or time range.

### 10. Clear All Layers

Clear all loaded layers from the QGIS layer panel to start a new analysis or to declutter your workspace.

### 11. Points Analysis

Perform Points (single pixel) Time Series Analysis. Note the newest point added show up as last in the plot label.

### 12. MultiPolygon Analysis

Perform MultiPolygon Time Series Analysis.

## Troubleshooting

- Problem: Module 'ee' not found (Google Earth Engine Python API not installed)

  Solution: Open the OSGeo4W Shell and run the following command:

  `pip install earthengine-api`

  After installation, restart QGIS.

- Earth Engine Authentication Failed: Ensure you meet all requirements as explained in the authentication section.
- AOI Errors: Verify the AOI file is valid and uses a proper CRS (EPSG:4326 is preferred).

## Reporting Issues

If you encounter any issues or have suggestions for improvements, please open an issue in the GitHub Issues section.

## Repository

Visit the GitHub repository.

## License

RAVI is licensed under the GNU General Public License v2.0 or later. Refer to the LICENSE file for details.

## About the Author

The RAVI plugin was developed by Caio Arantes, an Agricultural Engineering student passionate about precision agriculture and geotechnology, as part of his final graduation project.

Feel free to reach out if you have any questions or need further assistance.

📧 Email: caiosimplicioarantes@gmail.com
🔗 LinkedIn: linkedin.com/in/caioarantes
💻 GitHub: github.com/caioarantes

### Supervisors

This project was supervised by:

- Prof. Dr. Lucas Rios do Amaral - More about the supervisor
- M.Sc. Isabella Alves da Cunha - More about the co-supervisor

# RAVI - Análise Remota de Índices de Vegetação

RAVI é um plugin para QGIS projetado para se integrar ao Google Earth Engine (GEE), permitindo o processamento e a visualização simplificada de dados geoespaciais proveninetes do catálogo de reflectância de superfície harmonizada dos satélites da missão Copernicus Sentinel-2. O plugin suporta cálculos de índices de vegetação, visualização e download de imagens multiespectrais. Esses recursos o tornam uma ferramenta para estudantes, pesquisadores, agricultores e profissionais que trabalham com agricultura, monitoramento de terras ou gestão ambiental.

## Principais Funcionalidades

- Integração com o Earth Engine: Autenticação, processamento direto e visualização de dados do Sentinel-2 no QGIS.
- Cálculos de Índices de Vegetação: Suporte a índices como NDVI, EVI, SAVI e GNDVI, em datas datas específicas ou agregados em composições sintéticas.
- Análise de Séries Temporais: Geração de séries temporais, integração de dados de precipitação da NASA POWER e suavização com filtros de Savitzky-Golay.
- Visualização Interativa: Criação de gráficos interativos, estilização de raster e opções de exportação.

## Instalação

Para instalar o RAVI:

1. Abra o QGIS e navegue até o menu Plugins.
2. Selecione Gerenciar e Instalar Plugins.
3. Na aba "Todos", pesquise por "RAVI", selecione-o e clique em Instalar.
4. Certifique-se de que o RAVI está marcado na lista de plugins instalados.
5. IMPORTANTE: Reinicie o QGIS.

## Guia passo a passo

### Passo 1: Autenticação

- Se você não tem uma conta no Google Earth Engine, pode criar uma e registrar um projeto aqui.
- Abra o Editor de Código do Google Earth Engine para encontrar seu ID do projeto.
- Você também pode encontrar o ID do projeto no Console do Google Cloud na seção "Informações do Projeto".
- Após inserir seu ID do projeto, clique em Configurar Autenticação.
- Autorize o plugin a acessar sua conta do Earth Engine.

### Passo 2: Selecionar a pasta de saída

Escolha a pasta onde deseja salvar os arquivos de saída.

### Passo 3: Carregar e selecionar a área de interesse (AOI)

- Selecione uma AOI carregando um arquivo shapefile ou GeoJSON.
- Certifique-se de que a geometria é válida (apenas Polygon ou MultiPolygon).
- Adicione uma camada do Google Maps ao canvas do QGIS para melhor visualização e contexto.
- Use o botão Construir área de interesse a partir da extensão do mapa para gerar automaticamente uma nova AOI com base na extensão atual da tela.

### Passo 4: Definir o intervalo de tempo para busca de imagens

Defina um intervalo de tempo personalizado ou selecione um sugerido.

### Passo 5: Selecionar o índice de vegetação para análise de séries temporais

Escolha o índice de vegetação que deseja analisar a partir do menu.

### Passo 6: Filtro de sobreposição de imagens

Utilize o filtro de sobreposição para ajustar a seleção de imagens conforme os requisitos da sua análise.

### Passo 7: Buffer de AOI

Configure o Buffer conforme os requisitos da análise.

### Passo 8: Filtro de porcentagem de pixels nublados

Configure o filtro de conforme os requisitos da análise.

### Passo 9: Filtro de porcentagem de pixels válidos

Configure o filtro conforme os requisitos da análise.

## Painel

### 1. Gráfico de Séries Temporais

- Visualize a série temporal do índice de vegetação sobre a AOI definida.
- Coloque o cursor sobre o gráfico para ver valores e datas específicos para uma análise detalhada.

### 2. Carregar Camada RGB (Foco em um Dia)

Carregue e exiba uma camada RGB para uma data específica para analisar a aparência visual da área. Todas as bandas espectrais são baixadas, e os números das bandas correspondem às bandas do Sentinel-2 conforme listado abaixo:

Informações das Bandas do Sentinel-2
Nome da Banda Sentinel-2 | Número da Banda no QGIS | Comprimento de Onda (nm) | Resolução Espacial (m)
--- | --- | --- | ---
Banda 1 (Aerossol Costeiro) | 1 | 443 | 60
Banda 2 (Azul) | 2 | 490 | 10
Banda 3 (Verde) | 3 | 560 | 10
Banda 4 (Vermelho) | 4 | 665 | 10
Banda 5 (Borda Vermelha da Vegetação) | 5 | 705 | 20
Banda 6 (Borda Vermelha da Vegetação) | 6 | 740 | 20
Banda 7 (Borda Vermelha da Vegetação) | 7 | 783 | 20
Banda 8 (NIR) | 8 | 842 | 10
Banda 8A (Borda Vermelha da Vegetação) | 9 | 865 | 20
Banda 9 (Vapor d'água) | 10 | 945 | 60
Banda 11 (SWIR) | 11 | 1610 | 20
Banda 12 (SWIR) | 12 | 2190 | 20

### Nota sobre a Banda 10

Observe que a Banda 10 (SWIR - Cirrus) não está disponível no catálogo de Reflectância de Superfície (SR) harmonizada do Sentinel-2. Esta banda é usada principalmente para detecção de nuvens cirrus e é excluída do conjunto de dados SR devido à sua aplicabilidade limitada na análise de superfície.

### 3. Carregar Camada de Índice (Foco em um Dia)

Carregue e exiba uma camada de índice de vegetação para uma data específica.

### 4. Carregar Camada de Índice (Sintética)

Gere e exiba uma imagem sintética baseada no índice de vegetação selecionado e na métrica definida pelo usuário. A imagem sintética é gerada com base em todas as imagems que compoem a série temporal. As imagens são sobrepostas e cada pixel resultante representa a métrica definida para o índice de vegetação selecionado. Utilize a ferramenta de remoção de data para remover uma data indesejada ou filtrar períodos específicos antes de gerar a imagem sintética.

### 5. Ferramenta de Remoção de Data

- Use a ferramenta de remoção de data para filtrar e selecionar datas e periodos específicos para análise.
- A ferramenta atualiza o gráfico de séries temporais.
- IMPORTANTE: Imagens sintéticas são baseadas em todas as datas atualmente selecionadas.

### 6. Filtro Savitzky-Golay

Aplique o filtro de Savitzky-Golay para suavizar os dados de séries temporais e aprimorar a análise de tendências. Ajuste a ordem do polinômio e o tamanho da janela conforme necessário.

### 7. Opções de Salvamento

Salve os dados da série temporal em formato CSV. Para salvar a série como imagem, abra-a no navegador para habilitar a opção de download.

### 8. Precipitação NASA POWER

Adicione dados mensais de precipitação do NASA POWER para comparações entre variáveis. Salve os dados em formato CSV.

### 9. Executar Nova Série

Execute rapidamente uma nova análise de série temporal alterando a Área de Interesse (AOI), o índice de vegetação ou o intervalo de tempo.

### 10. Limpar Camadas

Limpe todas as camadas carregadas do painel para iniciar uma nova análise ou para organizar o espaço de trabalho.

### 11. Points Analysis

Realize a análise de séries temporais de pontos (pixel único). Observe que o ponto mais recente adicionado aparece por último no rótulo do gráfico.

### 12. MultiPolygon Analysis

Realize a análise de séries temporais de MultiPolígono.

## Solução de Problemas

- Problema: Erro módulo 'ee' não encontrado (Google Earth Engine Python API não instalado)

  Solução: Abra o OSGeo4W Shell (encontrado no menu Iniciar do Windows) e execute o seguinte comando:

  `pip install earthengine-api`

  Após a instalação, reinicie o QGIS.

- Problema: Falha na Autenticação do Earth Engine

  Solução: Verifique se você seguiu todos os passos e atende aos requisitos explicados na aba "Autenticação".

- Problema: Erros relacionados à Área de Interesse (AOI)

  Solução: Certifique-se de que:

  - O arquivo da AOI é um arquivo vetorial válido (Shapefile, GeoJSON, etc.).
  - O arquivo da AOI não está corrompido.
  - O arquivo da AOI possui um Sistema de Referência de Coordenadas (CRS) adequado. Recomendamos usar EPSG:4326.

## Relatar Problemas

Se encontrar problemas ou tiver sugestões, abra uma issue na seção de GitHub Issues.

## Repositório

Visite o repositório no GitHub.

## Licença

RAVI é licenciado sob a GNU General Public License v2.0 ou superior. Consulte o arquivo LICENSE para mais detalhes.

## Sobre o Autor

O plugin RAVI foi desenvolvido por Caio Arantes, estudante de Engenharia Agrícola entusiasta de agricultura de precisão e geotecnologia, como parte de seu trabalho de conclusão de curso.

Sinta-se à vontade para entrar em contato se tiver alguma dúvida.

📧 Email: caiosimplicioarantes@gmail.com
🔗 LinkedIn: linkedin.com/in/caioarantes
💻 GitHub: github.com/caioarantes

### Orientadores

Este projeto foi orientado por:

- Prof. Dr. Lucas Rios do Amaral - Mais sobre o orientador
- M.Sc. Isabella Alves da Cunha - Mais sobre a coorientadora