Neste post, vou ensinar como calcular o NDVI no Google Earth Engine usando a API do Python. O NDVI é uma ferramenta fundamental para avaliar a saúde e a cobertura vegetal em áreas geográficas. Por meio desse índice, podemos obter informações sobre a vegetação, como: identificar áreas de desmatamento, monitorar safras agrícolas e até mesmo acompanhar mudanças climáticas. Além disso vou compartilhar com vocês os códigos utilizados e você é livre para copiar e reproduzir em seus estudos.
Sumário
O que é o NDVI?
O NDVI, ou Índice de Vegetação por Diferença Normalizada, é uma métrica fundamental em sensoriamento remoto e geoprocessamento. Ele é calculado com base em informações espectrais provenientes de imagens de satélite, especificamente nas bandas de luz visível (geralmente a luz vermelha) e na banda do infravermelho próximo.
A ideia por trás do NDVI é que as plantas saudáveis refletem a luz visível, como o vermelho, enquanto absorvem a radiação na faixa do infravermelho próximo. Plantas menos saudáveis ou áreas não vegetadas terão um comportamento diferente. O NDVI quantifica essa diferença e fornece um valor que varia de -1 a +1.
- Valores próximos a +1 indicam uma alta densidade de vegetação.
- Valores próximos a 0 sugerem áreas não vegetadas, como corpos d’água ou áreas urbanas.
- Valores negativos, geralmente próximos a -1, são associados a superfícies artificiais, como estradas ou construções.
Essa métrica é especialmente útil em diversas aplicações, como o monitoramento de safras agrícolas, detecção de desmatamento, estudos de mudanças climáticas e avaliação da saúde das vegetações em ecossistemas naturais. A capacidade de calcular o NDVI a partir de imagens de satélite permite o acompanhamento e a análise de vastas áreas geográficas ao longo do tempo, contribuindo para a tomada de decisões informadas em diversos campos, incluindo a agricultura de precisão e a gestão ambiental.
O que é o Google Earth Engine?
O Google Earth Engine é uma plataforma de processamento e análise de dados geoespaciais baseada na nuvem, desenvolvida pelo Google. Ela oferece acesso a uma vasta coleção de imagens de satélite e dados geoespaciais de alta resolução, permitindo que pesquisadores, cientistas e desenvolvedores realizem análises complexas e projetos relacionados à geoinformação de forma eficiente. Em outro post eu fiz uma pequena Introdução ao Google Earth Engine, confira aqui: Introdução ao Google Earth Engine
Uma das características mais distintas do Google Earth Engine é a sua capacidade de processar grandes volumes de dados geoespaciais de forma rápida e escalável. Isso significa que os usuários podem realizar análises espaciais complexas sem precisar baixar ou armazenar os dados localmente, economizando tempo e recursos de computação.
A plataforma oferece uma variedade de ferramentas e recursos para análise de imagens de satélite, modelagem ambiental, monitoramento de mudanças na terra, detecção de desmatamento, previsão climática, entre muitos outros usos. Além disso, o Google Earth Engine fornece suporte para linguagens de programação como JavaScript e Python, permitindo que os usuários escrevam código personalizado para suas análises e aplicações geoespaciais.
O Google Earth Engine desempenha um papel fundamental em projetos de ciências da terra, ambientais e climáticas, fornecendo acesso a uma enorme quantidade de dados espaciais e recursos de processamento poderosos diretamente na nuvem. Isso o torna uma ferramenta valiosa para quem trabalha com informações geoespaciais em todo o mundo.
Vantagens de se calcular NDVI no Google Earth Engine
- Acesso a uma enorme base de dados: O Google Earth Engine disponibiliza uma vasta coleção de imagens de satélite de alta resolução, cobrindo todo o globo. Isso garante que os usuários tenham acesso a dados atualizados e históricos para suas análises.
- Processamento escalável na nuvem: O cálculo do NDVI no Google Earth Engine, por exemplo, em grandes áreas geográficas pode ser intensivo em recursos computacionais. O Google Earth Engine oferece uma capacidade de processamento escalável na nuvem, permitindo que análises em larga escala sejam realizadas sem a necessidade de infraestrutura local robusta.
- Eficiência de tempo: A plataforma agiliza o processo de análise, eliminando a necessidade de baixar e processar grandes conjuntos de dados localmente. Isso economiza tempo, especialmente para projetos que envolvem grandes áreas geográficas e séries temporais extensas.
- Acesso a ferramentas de análise avançadas: O Google Earth Engine fornece uma ampla gama de ferramentas de análise geoespacial, permitindo que os usuários realizem análises complexas de vegetação, mudanças na terra e monitoramento ambiental com facilidade.
- Programação personalizada: Os usuários podem aproveitar linguagens de programação como Python e JavaScript para escrever código personalizado, adaptando as análises às suas necessidades específicas e criando aplicativos geoespaciais personalizados.
- Colaboração e compartilhamento de resultados: O Google Earth Engine permite que os resultados das análises sejam compartilhados facilmente com colegas e colaboradores, promovendo a colaboração em projetos de geociências.
- Aplicações em tempo real: A capacidade de acessar dados e calcular o NDVI na nuvem significa que as análises podem ser conduzidas em tempo quase real, permitindo a detecção rápida de mudanças e eventos ambientais.
Calculando NDVI no Google Earth Engine
O Google Earth Engine é fantástico, no entanto, para começar a aproveitar todas as capacidades dessa plataforma, é essencial ter conhecimentos básicos de programação. Se você ainda não se sente à vontade com a programação, não se preocupe! Tenho uma ótima dica para você. Meu livro, “Fundamentos em Python,” oferece exatamente o que você precisa para dar seus primeiros passos na programação e, assim, começar a utilizar os scripts que estou compartilhando aqui para aproveitar ao máximo o Google Earth Engine.
No livro, você aprenderá os conceitos básicos de Python, uma linguagem de programação amplamente utilizada e altamente acessível, que é fundamental para escrever scripts no Google Earth Engine. Com uma abordagem amigável e prática, meu livro orienta você desde o início, proporcionando uma base sólida para a programação. Não importa se você é um iniciante completo ou se já possui alguma experiência, você encontrará o conteúdo adequado para suas necessidades.
Então, por que esperar? Dê o primeiro passo em direção a uma jornada emocionante de análises geoespaciais e comece a desvendar os segredos do Google Earth Engine. Clique no banner para adquirir o livro “Fundamentos em Python” agora mesmo e comece a aprender as habilidades essenciais para aproveitar ao máximo esta plataforma!
Autenticando no Google Earth Engine
O primeiro passo para começar a usar o Google Earth Engine é se cadastrar no serviço. Para fazer isso, siga os seguintes passos:
- Cadastro no Google Earth Engine: Acesse o site oficial do Google Earth Engine e clique em “Sign Up” (Inscrever-se) para criar uma conta. Você precisará fornecer suas informações de contato e aceitar os termos de uso.
- Aprovação da Conta: Após se inscrever, sua conta será submetida a uma análise pelo Google Earth Engine. Isso pode levar algum tempo, pois a plataforma prioriza pesquisadores e cientistas. Uma vez aprovado, você receberá um e-mail de confirmação.
Agora, você está pronto para autenticar-se no ambiente Python e começar a usar o Google Earth Engine. Geralmente, é possível realizar a autenticação em diferentes ambientes, mas aqui estão duas opções populares:
Opção 1: Ambiente Local com Visual Studio Code (VS Code): Se você preferir trabalhar localmente, siga os seguintes passos:
- Abra o seu ambiente de desenvolvimento preferido, como o Visual Studio Code (VS Code).
- Certifique-se de que a biblioteca
earthengine-api
esteja instalada no seu ambiente Python. - Utilize o código de autenticação que mencionei anteriormente para autenticar-se no Google Earth Engine.
Opção 2: Google Colab (Colaboratory): Se você preferir uma abordagem baseada na nuvem e desejar usar o Google Colab, siga estes passos:
- Acesse o Google Colab e crie um novo notebook.
- No notebook do Google Colab, você pode utilizar o mesmo código de autenticação mencionado anteriormente.
- A vantagem do Google Colab é que ele fornece uma plataforma pronta para uso com integração fácil com o Google Earth Engine, eliminando a necessidade de configurar um ambiente local.
Após se cadastrar veja abaixo o código python para autenticar. Todas as vezes será necessário autenticar para usar os produtos do Google Earth Engine.
# Importe a biblioteca earthengine-api
import ee
# Autentique-se no Google Earth Engine usando sua conta do Google
ee.Authenticate()
# Inicialize o Earth Engine para calcular NDVI no Google Earth Engine
ee.Initialize()
import ee
: Importa a biblioteca earthengine-api
.
ee.Authenticate()
: Este comando solicitará que você faça login na sua conta do Google. Após executá-lo, siga as instruções no console para autenticar-se. Isso abrirá uma janela do navegador para autenticação. Após a autenticação bem-sucedida, você receberá um código de autenticação que deverá ser copiado e colado de volta no console Python.
ee.Initialize()
: Inicializa o Google Earth Engine após a autenticação bem-sucedida. Agora você está pronto para começar a usar o Google Earth Engine.
Configuração e Coleta de Imagens
Agora que você está registrado no sistema podemos começar os scripts de cálculo do NDVI no Google Earth Engine. A primeira etapa é definir as datas que queremos calcular. Você pode mudar os parâmetros, para definir as datas que desejar.
Definindo as Datas de Início e Término
# Define as datas que iremos calcular o NDVI no Google Earth Engine
start_date = '2022-11-01'
end_date = '2022-12-31'
Nesta parte, definimos as datas de início e término para especificar o período para o qual desejamos coletar as imagens de satélite.
Aqui, criamos uma coleção de imagens Sentinel-2 usando a API do Earth Engine. Estamos filtrando as imagens com base na região de interesse definida em um GeoDataFrame e no intervalo de datas especificado. Filtrando a Coleção Sentinel-2:
# Filtra a coleção Sentinel-2 antes de calcular NDVI no Google Earth Engine
collection = (ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(gdf_ee.geometry())
.filterDate(ee.Date(start_date), ee.Date(end_date)))
Cálculo do NDVI
Nesta parte, definimos uma função chamada calculate_ndvi
, que aceita uma imagem de satélite como entrada e calcula o NDVI usando as bandas espectrais B8 (infravermelho próximo) e B4 (vermelho) da imagem. O NDVI é adicionado à imagem como uma nova banda.
# Função para calcular o NDVI no Google Earth Engine
def calculate_ndvi(image):
ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI')
return image.addBands(ndvi)
# Mapeia a função de cálculo do NDVI no Google Earth Engine
collection_with_ndvi = collection.map(calculate_ndvi)
Aqui, aplicamos a função calculate_ndvi
a cada imagem na coleção usando o método map
, criando uma nova coleção com o NDVI calculado para cada imagem.
Fique atento para a próxima parte do tutorial, onde abordaremos a aplicação da máscara SCL para remover nuvens e sombras das imagens.
Remoção de Nuvens e Sombras Usando a Máscara SCL
Agora, vamos continuar com a parte do tutorial que se concentra na remoção de nuvens e sombras das imagens de satélite.
# Função para aplicar a máscara SCL para remover nuvens e sombras do NDVI no Google Earth Engine
def apply_scl_mask(image):
scl = image.select('SCL')
# Define valores que representam vegetação
vegetation_mask = scl.eq(4)
return image.updateMask(vegetation_mask)
Nesta parte, definimos uma função chamada apply_scl_mask
que aceita uma imagem como entrada. A função seleciona a banda SCL (Scene Classification Map) da imagem, que identifica diferentes tipos de cobertura terrestre, incluindo nuvens, sombras e vegetação. Em seguida, criamos uma máscara de vegetação, onde o valor 4 na banda SCL representa a vegetação. Você pode ajustar esse valor conforme necessário, dependendo dos dados específicos da sua região de interesse. A função aplica a máscara à imagem, removendo assim as áreas afetadas por nuvens e sombras.
# Aplica a máscara SCL à coleção do NDVI no Google Earth Engine
collection_with_mask = collection_with_ndvi.map(apply_scl_mask)
Aqui, usamos a função apply_scl_mask
para aplicar a máscara SCL a cada imagem na coleção que já possui o NDVI calculado. Isso resulta em uma nova coleção onde as imagens foram pré-processadas para remover nuvens e sombras.
Coleta de Dados e Armazenamento em um DataFrame
Agora que temos nossas imagens pré-processadas, vamos coletar os dados do NDVI médio em nossa região de interesse e armazená-los em um DataFrame do Pandas.
# Converte a coleção em uma lista
image_list = collection_with_mask.toList(collection_with_mask.size())
# Inicializa uma lista para armazenar os dados
all_data = []
# Loop sobre as imagens na lista
for i in range(collection_with_mask.size().getInfo()):
image = ee.Image(image_list.get(i))
# Calcula o NDVI médio na região de interesse
mean_ndvi_region = image.reduceRegion(
reducer=ee.Reducer.mean(),
geometry=gdf_ee.geometry(), # Use a geometria do GeoDataFrame
scale=10,
maxPixels=1e13
)
date = image.date().format("yyyy-MM-dd").getInfo()
ndvi_mean = mean_ndvi_region.get('NDVI').getInfo()
data = {'date': date, 'ndvi_mean': ndvi_mean}
all_data.append(data)
# Cria um DataFrame a partir dos dados
df = pd.DataFrame(all_data)
Nesta parte, estamos coletando os dados do NDVI médio para cada imagem na coleção, usando a função reduceRegion
para calcular o valor médio do NDVI na região de interesse. Em seguida, esses dados são armazenados em uma lista chamada all_data
. Finalmente, os dados são convertidos em um DataFrame do Pandas para análise e visualização.
Este é o final do tutorial de como calcular NDVI no Google Earth Engine. Agora você aprendeu como coletar e armazenar os dados do NDVI no Google Earth Engine em um DataFrame. Veja abaixo o resultado final:
Data | NDVI |
---|---|
2022-11-02 | NaN |
2022-11-04 | 0.531155 |
2022-11-07 | 0.532685 |
2022-11-09 | 0.608312 |
2022-11-12 | NaN |
2022-11-14 | 0.531042 |
2022-11-17 | 0.546167 |
2022-11-19 | 0.533477 |
2022-11-22 | NaN |
2022-11-24 | NaN |
2022-11-27 | 0.528339 |
2022-11-29 | 0.562482 |
2022-12-02 | 0.499800 |
2022-12-04 | 0.493658 |
2022-12-07 | NaN |
2022-12-09 | 0.561319 |
2022-12-12 | 0.538269 |
2022-12-14 | NaN |
2022-12-17 | NaN |
2022-12-19 | NaN |
2022-12-22 | NaN |
2022-12-24 | 0.414788 |
2022-12-27 | NaN |
2022-12-29 | 0.525121 |
Os valores que foram classificados como NaN são os valores faltantes. Esses valores podem acontecer por vários motivos, sendo o mais comum a presença de nuvem em toda a área de interesse. Ao calcular o NDVI no Google Earth Engine nós aplicamos uma máscara para pegar apenas área de vegetação, o que pode ocasionar em casos como esses.