brazil-data-cube / stac.py

Python Client Library for SpatioTemporal Asset Catalog
MIT License
5 stars 16 forks source link

Coleção Sentinel-2 Level-1 não se encontra na lista de opções #88

Closed joaofelipecsantos closed 3 years ago

joaofelipecsantos commented 3 years ago

Issue:

Etapas:

Esperado:

Observações:

Sistema:

Obrigado pela ajuda.

raphaelrpl commented 3 years ago

Olá @joaofelipecsantos,

Nos ultimos dias, essa coleção Sentinel-2 Level-1 (S2_L1C-1) estava passando por algumas mudanças internas e ficou indisponível. Por favor, verifique novamente com o trecho de código que mencionou e deve funcionar.

Desculpe o transtorno.

joaofelipecsantos commented 3 years ago

@raphaelrpl

A opção para Sentinel-2 Level-1 agora está ativa, obrigado. Porém, não consigo carregar nenhuma banda.

Mensagem de erro:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-63-3313b17a066b> in <module>
----> 1 xarray = bdc2xray(bdc_stac, data_source, bbox, timeline, my_bands)

<ipython-input-49-55688415cc03> in bdc2xray(stac, collection, bbox, time, bands)
     84 
     85         for item in range(len(items.features)):
---> 86             dataarray = file_to_da(items.features[item].assets[band]['href'], box )
     87             list_of_data_arrays.append(dataarray)
     88 

KeyError: 'NDVI'

Etapas:

Bounding box

w = -45.90 n = -12.20 e = -45.20 s = -12.90 bbox = ( w,s,e,n )

Bands

my_bands = ['NDVI'] # Aqui eu tentei para o Sentinel-2 Level-1 diferentes bandas: NDVI, B04, B08, etc.

Timeline

start_date: '2018-09-01' end_date: '2018-12-31' timeline = f'{start_date}/{end_date}'



Alguma sugestão?
Se você preferir "fechar" esse issue que está resolvido, eu posso começar um novo com esse outro issue.

Obrigado pela ajuda.
joaofelipecsantos commented 3 years ago

@raphaelrpl ,

Rodei o Sentinel-2 Level-1 no código do stac introduction. Na parte do código abaixo:

for k in assets.keys():
    print(k)

Ele me retorna as seguintes informações (para o Sentinel-2 Level-1) Out: asset thumbnail

Quando faço o mesmo código para o CBERS o output é: Out: EVI NDVI CMASK BAND13 BAND14 BAND15 BAND16 CLEAROB TOTALOB thumbnail PROVENANCE

Quando eu coloco uma banda que não existe no assets.keys() do CBERS para procurar (um teste) a mensagem de erro que eu recebo é a mesma que eu recebo com o Sentinel-2 Level-1. Parece que o problema está nesse assets do Sentinel-2 Level-1 que não tem as informações das bandas (eu acho).

Espero ter ajudado um pouco com essa informação.

raphaelrpl commented 3 years ago

@joaofelipecsantos,

Na verdade, as coleções Level-1 (Sentinel S2 S2_L1C-1 ou Landsat-8 LC8_DN-1) possuem apenas os assets thumbnail e asset. A chave asset consiste no arquivo comprimido .zip (Sentinel-2 mantido pela ESA Copernicus SciHub) ou .tar.gz (Landsat-8 mantido pela USGS). Logo, se você necessita acessar alguma banda em especifico, é necessário o download desse item feature.download() e a extração manual do arquivo comprimido. A especificação do STAC nos permite descrever como é o dado e as bandas do mesmo, mas não necessariamente toda banda descrita precisa existir no escopo de assets.

Além disso, não era para conter essa chave de indice NDVI, EVI nessa coleção. Irei repassar para o pessoal responsavel para corrigir essa metadado no nosso catalogo. Muito obrigado pela informação :)

Para acesso as bandas de indice espectrais, temos a coleção Level-2 SR para Sentinel-2 (S2_MSI_L2_SR_LASRC-1)

joaofelipecsantos commented 3 years ago

@raphaelrpl ,

Obrigado Raphael pela informação! Me desculpa, mas tenho outra dúvida aqui, tudo bem?

Fui procurar imagens para a minha área de interesse e período de interesse. No código do stac introduction usei o comando abaixo:

items = collection.get_items(
            filter={
                'bbox':'-50.453362,-29.531077,-50.360118,-29.468340',
                'datetime':'2016-12-01/2017-01-30',
                'limit':10
            }
)
items

Esse código me retornou 1 resultado. Achei estranho porque nessa época tinha somente o Sentinel-2A, mas mesmo assim, deveria ter frequência de amostragem de 10 dias. Então fui no SciHub e no CREODIAS e fiz a mesma busca para minha região (granule T22JEN) e mesmo período. Nesses sites tive 9 resultados. Pensei que fosse algum critério de cobertura de nuvens usado no BDC, mas a imagem disponível no BDC tem 96% de nuvem e existem imagens com 16%, 22% e 0% de nuvens nos resultados do SciHub Copernicus e CREODIAS. Algum motivo para ter encontrado somente 1 resultado ao inves de 9 resultados?

Fiz a mesma coisa usando o S2_MSI_L2_SR_LASRC-1 e para essa coleção não obtive resultado. Mas já adianto que usando o site do BDC existe 1 resultado de Level-2 que vem do processamento do resultado que obtive antes do Level-1.

Fui rodar os mesmos critérios no stmetrics. No notebook do stmetrics me retorna o erro abaixo:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-110-3313b17a066b> in <module>
----> 1 xarray = bdc2xray(bdc_stac, data_source, bbox, timeline, my_bands)

<ipython-input-106-55688415cc03> in bdc2xray(stac, collection, bbox, time, bands)
     84 
     85         for item in range(len(items.features)):
---> 86             dataarray = file_to_da(items.features[item].assets[band]['href'], box )
     87             list_of_data_arrays.append(dataarray)
     88 

<ipython-input-106-55688415cc03> in file_to_da(filepath, bbox, crop)
     36 
     37     #find datetime
---> 38     match = re.findall(r'\d{4}-\d{2}-\d{2}', filepath)[-1]
     39     da.coords['time'] = match
     40 

IndexError: list index out of range

Será que a função de busca no stmetrics não está funcionando por algum motivo para o Sentinel-2? Porque fazendo para o Landsat-8 Level-2 funciona normalmente.

Por fim, fiz a mesma busca no BDC web browser. No site me retornou 1 resultado tanto para o Sentinel-2 Level-1 quanto Level-2. O resultado foi a mesma imagem encontrada pelo código do stac introduction (5 de janeiro de 2017 granule 22JEN).

Resumindo: isso é mais uma observação para informar que os resultados não batem dependendo de qual script eu estou usando (stac ou stmetrics) e que no site consigo 1 resultado (mas que deveriam ser 9 resultados comparados com o SciHub Copernicus).

Novamente, muito obrigado pela atenção e ajuda. Espero ter ajudado vocês em algo.

raphaelrpl commented 3 years ago

Sobre os produtos de dados, estamos trabalhando para trazer toda série histórica do Sentinel-2 L1C e ser disponibilizado em nosso catálogo. O desafio é o grande volume de dados e estamos sempre atualizando. Embora a timeline aponte 2015-09, isso apenas reflete em algumas micro regiões do Brasil. Essa área em específico, temos outros periodos apenas o L1C. Para o Landsat-8, temos todos os produtos Digital Number e Surperficie de Reflectância de 2016/01 até 2021/04 para o Brasil.

Foi muito bom ter levantado esses pontos, e nos ajudou muito nesses pequenos detalhes que passam despercebidos. Obrigado :smile:

joaofelipecsantos commented 3 years ago

Muito obrigado pela ajuda e explicação.