Classificação de bricks e geração de mapas

Prática com R Notebook

sits bricks classification

Neste hands-on, organizamos uma atividade prática no sits de acordo com o fluxograma apresentado ao lado. Nele, mostramos como é realizado a classificação de bricks e geração de mapas no sits. Aqui você aprenderá a:

  • acessar e classificar bricks locais.

  • gerar mapas a partir de bricks de probabilidades.

  • visualizar mapas gerados.

Notebook Kaggle: https://www.kaggle.com/rolfsimoes/sits-kaggle

Referências a Cubos de Dados

Um cubo de dados de observação da terra pode ser representado de várias formas. Eles podem fornecer séries temporais que geralmente são geradas por um processo de organização sistemática de imagens de um determinado sensor/satélite. Essa organização realiza as correções e os ajustes necessários para que os pixels correspondentes de imagens de diferentes datas se refiram a um mesmo local geográfico.

No sits, a função que faz referência a uma fonte de séries temporais é a função sits_cube(). O que essa função faz é retornar uma tabela de metadados que descreva um cubo de dados, seja um brick ou um serviço Web como o WTSS. Vimos em exemplos anteriores como usar o WTSS para acessar séries temporais. Aqui, mostraremos ainda como acessar outro serviço de séries temporais, o SATVeg.

Note

Em breve, o pacote sits poderá fazer referências aos cubos do Projeto Brazil Data Cube.

Exemplo acesso serviço SATVeg

O SATVeg é um serviço de séries temporais desenvolvido pela Embrapa Informática Agropecuária. Atualmente o serviço fornece séries temporais dos produtos MOD13Q1 e MYD13Q1 do sensor MODIS. O acesso pode ser realizado como mostrado no exemplo a seguir:

Code snippet 19 - Acesso ao serviço SATVeg da Embrapa.
 1# Cria referências para diferentes bases de séries temporais
 2terra <- sits_cube(type = "SATVEG", name = "terra")
 3aqua <- sits_cube(type = "SATVEG", name = "aqua")
 4combined <- sits_cube(type = "SATVEG", name = "comb")
 5
 6# recupera o mesmo ponto dos três cubos de dados
 7ts1 <- sits_get_data(terra,
 8                     longitude = -55.50563, latitude = -11.71557)
 9ts1 <- sits_get_data(aqua,
10                     longitude = -55.50563, latitude = -11.71557)
11ts1 <- sits_get_data(combined,
12                     longitude = -55.50563, latitude = -11.71557)
13
14# Mostra as séries temporais de cada ponto
15plot(ts1)
16plot(ts2)
17plot(ts2)

Tanto o WTSS quanto o SATVEG são úteis para coletar séries temporais de pontos esparsos. Entretanto, devido a natureza desses serviços, não são adequados para gerar mapas de uso e cobertura. Uma possível solução para gerar mapas de uso e cobertura da terra é o uso de bricks.

Exemplo acesso/classificação de brick local

Quando se quer gerar um mapa de uma área de estudo relativamente pequena, que não imponha entraves para o gerenciamento dos arquivos e da memória, os bricks tornam-se uma solução interessante. Um brick consiste em um arquivo no formato GeoTIF cujas bandas ou camadas se referem a diferentes instâncias no tempo. Por exemplo, um brick de NDVI do produto MOD13Q1 (MODIS), com 23 observações ao longo do ano de 2014 e compreendendo a região do município de Sinop-MT é armazenado em um único arquivo. Suas 23 observações ao longo do ano são organizadas como bandas do arquivo GeoTIF.

Como não existe um padrão definido para gravar metadados em arquivos GeoTIF, geralmete algumas informações extras precisam ser forncedidas pelo usuário, tais como valores mínimo e máximo teóricos, fator de escala do dado, etc. Além disso, os bricks precisam de um arquivo texto que indique as datas correspondentes às suas camadas. Com essas informações, é possível acessar um brick a partir do sits e gerar mapas de uso e cobertura da terra.

No ambiente do Kaggle, disponibilizamos dois bricks sobre o município de Sinop-MT, um com os valores de NDVI e o outro com os de EVI, ambos do mesmo ano-calendário. O código a seguir cria a referência para esses bricks:

Code snippet 20 - Acesso aos bricks de Sinop-MT.
 1# Carrega timeline do arquivo
 2timeline <- readLines("../input/sits-dataset/timeline.txt")
 3
 4# Informa o caminho dos arquivos GeoTIF
 5files <- c("../input/sits-dataset/NDVI.tif",
 6           "../input/sits-dataset/EVI.tif")
 7
 8# Cria a referência para os bricks de Sinop-MT
 9sinop <- sits_cube(type = "BRICK",
10                   name = "sinop-mt",
11                   satellite = "TERRA",
12                   sensor = "MODIS",
13                   timeline = timeline,
14                   bands = c("ndvi", "evi"),
15                   files = files)

Como nos exemplos anteriores, este cubo provê acesso às séries temporais usando a função sits_get_data(). No entanto, diferentemente dos outros cubos, este pode ser usado com a função sits_classify() para ser classificado e gerar um mapa de probabilidades de classes com a mesma extensão espacial.

Code snippet 21 - Classificação dos bricks de Sinop-MT.
 1# Cria um novo conjunto de amostras apenas com as bandas 'ndvi' e 'evi'
 2samples_2bands <- sits_select(samples, bands = sits_bands(sinop))
 3
 4# Treina um modelo RF com 200 árvores
 5rf3 <- sits_train(samples_2bands, ml_method = sits_rfor(num_trees = 200))
 6
 7# Classifica o cubo `sinop`
 8probs <- sits_classify(sinop, ml_model = rf3)
 9
10# Mostra os mapas de probabilidades
11plot(probs)

A última etapa para gerar um mapa de uso e cobertura da terra é converter as probabilidades em classes discretas. A estratégia mais simples é escolher a classe com a maior probabilidade usando a função sits_label_classification(). Esta função permite também gerar mapas espacialmente suavizados a partir de várias estratégias.

Code snippet 22 - Mapa de uso e cobertura da terra de Sinop-MT.
1# Gera mapa de uso e cobertura da terra
2maps <- sits_label_classification(probs)
3
4# Mostra mapa de uso e cobertura da terra
5plot(maps)
sinop 2014 land use land cover map