O MODIS (MODerate resolution Imaging Spectroradiometer) faz parte de um programa da NASA para monitoramento da superfície terrestre. Os satélites Terra e Aqua fornecem informações muito interessantes para o setor agroflorestal e nos permite entender de maneira bastante eficaz a dinâmica do uso do solo e de crescimento das nossas culturas.

O MODOIS tem diversos produtos, mas neste post vamos tratar especificamente do produto MOD13Q1, que disponibiliza a cada 16 dias um raster de EVI e NDVI com resolução de 250 m. Bom, se você está acostumado com imagens de satélite/drone/vant com resolução submétrica, pode ser que no primeiro momento esta escala te assuste. Mas vale lembrar que é um serviço gratuito e de ótima qualidade.

As cenas do MODIS ficam disponíveis em um ftp e navegando por lá podemos chegar na pasta do produto que nos interessa. Temos então imagens de satélite processadas, com correção atmosférica, sem deslocamento espacial e com regularidade. O satélite varre a terra a cada dois dias e as melhores visadas são utilizadas para compor o produto que é disponibilizado a cada 16 dias. Há casos (de baixa frequência) em que a nebulosidade é tanta que não é possível compor a informação do pixel dentro desta janela

Nosso objetivo para este poste é fazer o download das cenas de forma automática, um web scraping. No R há diversos pacotes que nos auxiliam neste processo. A primeira etapa é acessar o ftp que contém as cenas e extrair as datas das cenas disponíveis.

if (!require("pacman")) install.packages("pacman")
pacman::p_load(dplyr, xml2, rvest, httr, stringr, methods)
# url do ftp que contém as cenas
path_root <- "http://e4ftl01.cr.usgs.gov/MOLT/MOD13Q1.006"

# carrega a raiz do ftp
page_root <- read_html(path_root)

# extrai os dias das cenas
scene_days <- page_root %>% 
 html_nodes("a") %>% 
  html_text(trim = T) %>%
  '['(-c(1:7)) %>%
  str_replace_all("\\/", "")

glimpse(scene_days)
##  chr [1:448] "2000.02.18" "2000.03.05" "2000.03.21" "2000.04.06" ...

Muito bem, temos até a data da última atualização deste post 448 cenas disponíveis. O script abaixo cria a pasta com a data da cena e coloca lá os tiles de seu interesse. Como exemplo vamos pegar os tiles que cobrem os estados de São Paulo e Bahia. Note que é preciso ter um cadastro para autorizar o download dos arquivos. É simples e rápido de fazer acessando este link.

# inicio do 1º loop - dias
for (i in seq_along(scene_days)) {
  # cria a pasta para receber os tiles
  if(!dir.exists(scene_days[i])) dir.create(scene_days[i])

  # ideintificador de iteração
  day <- scene_days[i]
  
  # carrega a pagina do dia da cena
  page_tiles <- read_html(paste(path_root, day, sep = "/"))
  
  # extrai os tiles de interesse
  path_tiles <- page_tiles %>% 
    html_nodes("a") %>% 
    html_text(trim = T) %>%
    '['(str_detect(., "[hdf]$")) %>% 
    '['(str_detect(., "h13v11|h14v10"))
  
  # inicio do 2º loop - tiles
  for (j in seq_along(path_tiles)) {
    # url do tile
    path_tile <- paste(path_root, day, path_tiles[j], sep = "/")

    # id do tile
    tile <- paste(day, path_tiles[j], sep = "/")
    
    # download do arquivo
    if (!file.exists(tile)) {
      temp <- GET(path_tile, authenticate("LOGIN", "SENHA"))
      writeBin(content(temp, "raw"), tile)
      rm(temp)
    }
  }
}

Como tudo que está neste blog, este script foi escrito para resolver um problema específico e com certeza tem muito espaço para melhoria. Os próximos passos da análise, extração dos rasters e processamento da imagem serão abordados em posts separados. No futuro, caso exista uma demanda, pode ser que as funções sejam reunidas em um pacote específico sobre isso.

Caso tenha alguma dúvida ou sugestão sobre o post, fique à vontade para fazer um comentário ou me contatar por E-mail.

sessioninfo::session_info(c("dplyr", "xml2", "rvest", "httr", "stringr", "methods"))
## - Session info ----------------------------------------------------------
##  setting  value                       
##  version  R version 3.5.3 (2019-03-11)
##  os       Windows 10 x64              
##  system   x86_64, mingw32             
##  ui       RTerm                       
##  language (EN)                        
##  collate  Portuguese_Brazil.1252      
##  ctype    Portuguese_Brazil.1252      
##  tz       America/Sao_Paulo           
##  date     2019-08-25                  
## 
## - Packages --------------------------------------------------------------
##  package    * version  date       lib source        
##  askpass      1.1      2019-01-13 [1] CRAN (R 3.5.2)
##  assertthat   0.2.1    2019-03-21 [1] CRAN (R 3.5.3)
##  backports    1.1.4    2019-04-10 [1] CRAN (R 3.5.3)
##  BH           1.69.0-1 2019-01-07 [1] CRAN (R 3.5.2)
##  cli          1.1.0    2019-03-19 [1] CRAN (R 3.5.3)
##  crayon       1.3.4    2017-09-16 [1] CRAN (R 3.5.1)
##  curl         4.0      2019-07-22 [1] CRAN (R 3.5.3)
##  digest       0.6.20   2019-07-04 [1] CRAN (R 3.5.3)
##  dplyr      * 0.8.3    2019-07-04 [1] CRAN (R 3.5.3)
##  ellipsis     0.2.0.1  2019-07-02 [1] CRAN (R 3.5.3)
##  fansi        0.4.0    2018-10-05 [1] CRAN (R 3.5.1)
##  glue         1.3.1    2019-03-12 [1] CRAN (R 3.5.3)
##  httr       * 1.4.1    2019-08-05 [1] CRAN (R 3.5.3)
##  jsonlite     1.6      2018-12-07 [1] CRAN (R 3.5.2)
##  magrittr     1.5      2014-11-22 [1] CRAN (R 3.5.1)
##  mime         0.7      2019-06-11 [1] CRAN (R 3.5.3)
##  openssl      1.4.1    2019-07-18 [1] CRAN (R 3.5.3)
##  pillar       1.4.2    2019-06-29 [1] CRAN (R 3.5.3)
##  pkgconfig    2.0.2    2018-08-16 [1] CRAN (R 3.5.1)
##  plogr        0.2.0    2018-03-25 [1] CRAN (R 3.5.1)
##  purrr        0.3.2    2019-03-15 [1] CRAN (R 3.5.3)
##  R6           2.4.0    2019-02-14 [1] CRAN (R 3.5.2)
##  Rcpp         1.0.2    2019-07-25 [1] CRAN (R 3.5.3)
##  rlang        0.4.0    2019-06-25 [1] CRAN (R 3.5.3)
##  rvest      * 0.3.4    2019-05-15 [1] CRAN (R 3.5.3)
##  selectr      0.4-1    2018-04-06 [1] CRAN (R 3.5.1)
##  stringi      1.4.3    2019-03-12 [1] CRAN (R 3.5.3)
##  stringr    * 1.4.0    2019-02-10 [1] CRAN (R 3.5.2)
##  sys          3.2      2019-04-23 [1] CRAN (R 3.5.3)
##  tibble       2.1.3    2019-06-06 [1] CRAN (R 3.5.3)
##  tidyselect   0.2.5    2018-10-11 [1] CRAN (R 3.5.1)
##  utf8         1.1.4    2018-05-24 [1] CRAN (R 3.5.1)
##  vctrs        0.2.0    2019-07-05 [1] CRAN (R 3.5.3)
##  xml2       * 1.2.2    2019-08-09 [1] CRAN (R 3.5.3)
##  zeallot      0.1.0    2018-01-28 [1] CRAN (R 3.5.2)
## 
## [1] C:/Users/Italo/Documents/R/win-library/3.5
## [2] C:/Program Files/R/R-3.5.3/library