Como baixar imagens de satélite com Google Earth Engine usando Python?

Confira nosso curso online de QGIS

Seja para ter a imagem aérea no seu banco de dados ou para avaliar seus resultados, o download de imagens pode ser feito de três formas diferentes usando o Google Earth Engine com Python.

Imagens de satélites são utilizadas por vários profissionais. Engenheiros, geógrafos, oceanógrafos e muitos outros fazem uso delas para planejar atividades de campo, quantificar o impacto em matas nativas e avaliar mudanças no solo.

Softwares como QGIS e ArcGIS apresentam recursos para mostrar imagens de satélite online, seja por meio do QuickMapService ou pelo Base Map, respectivamente.

Porém, em algumas situações, esses recursos podem não estar disponíveis. Um bom exemplo disso é o site do SIG SDS de Santa Catarina, o qual permite visualizar os dados por meio de WMS, mas que eventualmente, fica fora do ar, sendo necessário baixar as imagens manualmente.

Portanto, ter as imagens no seu computador pode evitar algumas dores de cabeça na execução de estudos ambientais.

Há vários sites que possibilitam baixar imagens de satélites, tais como Earth Explorer e Copernicus Open Access Hub. Mas para dar continuidade nas postagens sobre o Google Earth Explorer com Python, vamos mostrar como baixar imagens de satélite para que você possa analisar as imagens que você esta trabalhando e seus resultados e permitir que você crie mapas com elas no QGIS (ou outro software de geoprocessamento de preferência).

Imagem obtida no GEE (visualização prévia com modificações).
Imagem obtida no GEE (visualização prévia com modificações).

Autenticação no Google Earth Engine (GEE)

Como comentamos na postagem anterior sobre GEE, é necessário realizar a sua autenticação e inicializar a biblioteca ee. Você pode realizar esse procedimento a partir do código abaixo, que irá redirecionar você para uma nova página, solicitando a sua conta Google (gmail) e você receberá um código para colar no campo aberto.

import ee
ee.Authenticate()
ee.Initialize()

Caso você já tenha executado o código uma vez, você pode deixar a função ee.Authenticate() como comentário.

Recortando e Selecionando Bandas Específicas

Agora que já autenticamos nosso acesso. Vamos criar uma variável com os limites da nossa área de estudo e outra para guardar a nossa imagem de satélite. Neste tutorial, vamos salvar uma imagem LANDSAT 8, porém, você pode consultar as imagens disponíveis no Google Earth Engine visitando a página dos conjuntos de imagens disponíveis.

Além disso, usaremos o LANDSAT Acquisition Tool para identificar os números da rota e trajeto do satélite na nossa área de estudo, e o Earth Explorer para saber o dia que ele passou (embora você possa usar o segundo para os dois).

Depois disso tudo, iremos selecionar as bandas 2 (Azul), 3 (Verde) e 4 (Vermelho) e em seguida, recortar a imagem usando a função clip().

area_estudo = ee.Geometry.Rectangle([-49.7, -28.3, -49.3, -28.7])
img_landsat = ee.Image('LANDSAT/LC08/C01/T1/LC08_220080_20200420')\
    .select(['B2','B3','B4']).clip(area_estudo)

Agora que salvamos nossa área de estudo, vamos ver alguns comandos para visualizá-la.

Na nossa primeira postagem, mostramos uma função para retornar as datas disponíveis em um período de tempo considerando como variável uma coleção de imagens. Você pode conferir ela clicando aqui.

Visualização prévia com getThumbURL()

Antes de olharmos a função getThumbURL(), que nos fornece um endereço online para visualizarmos nossa imagem, vamos olhar um pouco sobre redutores (ee.Reducer).

As funções de redução servem para calcular estatísticas de uma região, tais como média (mean), mediana (median), desvio padrão (stdDev) e valores mínimos e máximos (minMax). No nosso caso, vamos usar ee.Reducer.minMax() para conhecermos os valores extremos da nossa imagem e configurar a visualização dela.

Após esse procedimento, usamos a função getThumbURL() para obter o endereço da nossa imagem. Lembrando que essa função é utilizada para ter a imagem para ser usada em apresentações (não sendo ainda a imagem para ser usada no SIG).

print(img_landsat.reduceRegion(reducer = ee.Reducer.minMax()).getInfo())

print(img_landsat.getThumbURL({'min':5000, 'max': 23000}))

Os resultados irão aparecer no terminal python. Basta então copiar e colar o link no navegador para ver a imagem. Caso você esteja obtendo uma imagem totalmente branca, verifique se os valores mínimos e máximos na função getThumbURL abrangem todos os valores mostrados pela função de redução.

Além disso, caso sua área seja grande demais, poderá haver problemas, visto que o Earth Engine, para priorizar desempenho, não executa a função Reducer com muitos pixels.

Exportando para o Google Drive

Uma forma de obter as suas imagens de interesse é salvá-las diretamente no seu Google Drive. Para realizar esse procedimento, vamos usar a função ee.batch.Export.image.toDrive().

Essa função precisa de alguns dados de entrada para fazer seu trabalho. Precisamos indicar qual imagem queremos salvar, o nome do arquivo quando salvo, a pasta, a resolução (neste caso, no GEE, chamada de scale), e a região que gostaríamos de salvar.

O código abaixo mostra como realizar esse procedimento.

task = ee.batch.Export.image.toDrive(**{
    'image': img_landsat,
    'description': 'img_B2E',
    'folder': 'EE_Output',
    'scale': 30,
    'region': area_estudo.getInfo()['coordinates']
    })
task.start()

import time
while task.active():
    print('Salvando a imagem (id: {}).'.format(task.id))
    time.sleep(5)

Note que salvamos a nossa função dentro da variável task. Para que o GEE entenda que a exportação deve iniciar, temos que usar start(). Em seguida, usamos a função sleep() da biblioteca time para nos dar o andamento do processo a cada 5 segundos.

Caso tudo ocorra corretamente, você terá no seu Google Drive, uma pasta chamada EE_Output com o tif da sua imagem.

Obtendo endereço da imagem para download

Outra forma ainda de conseguirmos baixar uma imagem no GEE é por meio da função getDownloadURL().

download_url = img_landsat.getDownloadURL({
    'image': img_landsat,
    'region': area_estudo,
    'name': 'img_B2E_down',
})

print(download_url)

Ao rodar esse código, será salvo uma variável do tipo string (texto), contendo a URL para download. A diferença desse método, para o anterior, é que você irá baixar um arquivo compactado com cada uma das bandas em arquivos separados.

Agora você aprendeu alguns métodos para realizar o download das suas imagens, possibilitando avaliar elas e apresentar seus resultados em artigos e projetos.

Você pode consultar o código completo no meu GitHub. Estarei disponibilizando os códigos que apresentamos aqui no blog e, alguns poucos, irei alimentar com alguns códigos que uso em alguns estudos ambientais.

Caso você tenha alguma dúvida, fique a vontade para usar os comentários que estaremos respondendo assim que possível.



Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".

Apostila Mapa de Localização Banner

Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de geoprocessamento, mineração e hidrologia. Busca soluções utilizando softwares como QGIS, R e Python.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *