1 Referência Principal

MENESES, P. R.; ALMEIDA, T. D.; ROSA, A. N. D. C. S.; SANO, E. E. et al. Introdução ao Processamento de Imagens de Sensoriamento Remoto. Brasília: UnB-CNPq, 276 p., 2012.

2 Pastas ou Diretório de trabalho

A primeira etapa de trabalho é reconhecer em qual diretório de trabalho estamos operando. Para verificar qual a pasta do computador em que os documentos estão salvos, acessíveis para carregamento e onde todas as produções ficaram salvas, a função é getwd(). Nela não é preciso digitar nada, somente a função.

getwd()
## [1] "C:/ARQUIVOS COMPUTADOR/DOUTORADO/APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS"

A função apresenta o caminho do diretório de trabalho (pasta no computador). Ressalvamos que a organização é a chave para manter todos os seus códigos/scripts, arquivos, figuras, imagens, mapeamentos, conjuntos de dados e resultados de pesquisa disponíveis para você. Recomendamos que todos os arquivos sejam salvos em uma única pasta, com nomes que não usem caracteres especiais ou acentos (ex.: arquivodetrabalho ao invés de arquivo_de_trabalho), de modo a facilitar seu uso no R.

Caso esteja trabalhando em um computador que não é seu (um computador compartilhado) ou ainda não tenha criado um diretório para você, recomendamos a criação e a seleção deste diretório para o uso no R. Existem duas formas de fazer isso:

  1. Você pode fazer manualmente no RStudio, seguindo este caminho: Session (Sessão) no menu superior > Selecione Set Working Directory (Definir Diretório de Trabalho) > Escolha uma das opções: To Directory (Para o Diretório) que permite navegar até o diretório desejado no seu sistema de arquivos ou Choose Directory (Escolher Diretório) que abre uma janela de seleção de diretório para escolher o diretório de trabalho.

  2. Se preferir, você pode fazer isso usando a estrutura de códigos atraves da função setwd() e inserir entre os parênteses o caminho da pasta disponibilizado em propriedades do arquivo/pasta do windows, como mostramos na sequência.

# Define o diretório de trabalho para um caminho específico - copiar o caminho para a pasta em propriedades do arquivo/pasta
setwd("C:/ARQUIVOS COMPUTADOR/DOUTORADO/APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS")

# Confira se a seleção do diretório foi realizada corretamente
getwd()
## [1] "C:/ARQUIVOS COMPUTADOR/DOUTORADO/APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS"

Realizadas estas operações estamos prontos para o trabalho. Vale retomar: **não esqueça de salvar todos os arquivos dentro desta pasta*. Seja qual for a extensão do arquivo (diferentes programas), deixe salvo nesta pasta para não perder nada. É possível fazer isso em um pendrive ou hd externo, se preferir; mas tome sempre o cuidado de conferir se o R está interpretando que você está trabalhando no diretório dos dois instrumentos. Sabemos que é difícil manter tudo junto quando se trata de organização, por isso lembre-se de usar nomes que facilitem seu entendimento na hora de buscar os arquivos necessários.

3 Carregamento de pacotes de funções

Para realizar a instalação de pacotes para as análises espaciais e geocomputacionais a função empregada é install.packages(), onde se insere o nome do pacote entre os parênteses. No código a seguir, instalaremos alguns pacotes funcionais para as análises que realizaremos ao longo do curso.

Os pacotes instalados serão apresentados posteriormente, à medida que os utilizaremos no curso. O importante agora é entender como se dá a instalação e o carregamento dos pacotes de análise no RStudio. Após a instalação é preciso carregar o pacote. Para realizar o carregamento de pacotes, os quais envolvem diferentes funções e recursos para as análises, a função empregada é library(). Entre os parenteses da função, insere-se o nome do pacote a ser carregado, conforme ilustramos no código a seguir:

No código acima, carregamos diferentes pacotes do R que estão associados às análises espaciais e geocomputacionais. Ao longo do curso, as exploraremos à medida que forem requeridas em nossas análises.

4 Operações básicas e visualização de recursos

Neste ponto, vamos explorar algumas funções do R que são úteis nas análises espaciais. A primeira delas é o carregamento do conjunto de dados vetoriais, normalmente estruturados em tabelas (dados tabulares). Para o carregamento usamos a função read_excel() e criaremos um conjunto de dados usando um nome de identificação seguido de <- para que R interprete a criação do conjunto. Baixamos os dados tabulares populacionais do Estado de São Paulo para a análise; o arquivo tem o nome populacao01.xls e foi indexado na pasta de trabalho.

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.2
populacao01 <- read_excel("C:/ARQUIVOS COMPUTADOR/DOUTORADO/APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS/populacao01.xls")

populacao01
## # A tibble: 645 × 10
##    municipio       `Área Urbanizada` `Área não Urbanizada` `Área Urbana Isolada`
##    <chr>                       <dbl>                 <dbl>                 <dbl>
##  1 ADAMANTINA                  31713                    55                   180
##  2 ADOLFO                       3155                     0                    45
##  3 AGUAÍ                       27261                   715                  1025
##  4 ÁGUAS DA PRATA               5513                     0                  1258
##  5 ÁGUAS DE LINDÓ…              6886                 10225                     0
##  6 ÁGUAS DE SANTA…              3681                     0                   578
##  7 ÁGUAS DE SÃO P…              2707                     0                     0
##  8 AGUDOS                      32173                   659                   161
##  9 ALAMBARI                     3036                     0                   636
## 10 ALFREDO MARCON…              2690                   565                     0
## # ℹ 635 more rows
## # ℹ 6 more variables: `Área Rural (Exceto Aglomerado)` <dbl>,
## #   `Aglomerado Rural de Extensão Urbana` <dbl>,
## #   `Aglomerado Rural Povoado` <dbl>, `Aglomerado Rural Núcleo` <dbl>,
## #   `Outros Aglomerados Rurais Raros` <dbl>,
## #   `Código da Unidade Geográfica` <dbl>

Com os dados tabulares carregados em um objeto no R (dataframe), podemos realizar várias operações, desde a seleção de linhas e colunas, até a criação de novos conjuntos a partir desse.

#Criando novos conjuntos selecionando colunas específicas do conjunto
area_urbanizada = populacao01 [, c(1,3,10)] #selecionamos as colunas 1,3,10 do conjunto populacao01 e criamos um novo conjunto "area_urbanizada"
area_urbanizada
## # A tibble: 645 × 3
##    municipio              `Área não Urbanizada` `Código da Unidade Geográfica`
##    <chr>                                  <dbl>                          <dbl>
##  1 ADAMANTINA                                55                        3500105
##  2 ADOLFO                                     0                        3500204
##  3 AGUAÍ                                    715                        3500303
##  4 ÁGUAS DA PRATA                             0                        3500402
##  5 ÁGUAS DE LINDÓIA                       10225                        3500501
##  6 ÁGUAS DE SANTA BÁRBARA                     0                        3500550
##  7 ÁGUAS DE SÃO PEDRO                         0                        3500600
##  8 AGUDOS                                   659                        3500709
##  9 ALAMBARI                                   0                        3500758
## 10 ALFREDO MARCONDES                        565                        3500808
## # ℹ 635 more rows
#verificando informações do conjunto
summary(area_urbanizada)
##   municipio         Área não Urbanizada Código da Unidade Geográfica
##  Length:645         Min.   :    0       Min.   :3500105             
##  Class :character   1st Qu.:    0       1st Qu.:3514601             
##  Mode  :character   Median :    0       Median :3528700             
##                     Mean   : 1048       Mean   :3528698             
##                     3rd Qu.:   15       3rd Qu.:3543204             
##                     Max.   :65912       Max.   :3557303
names(area_urbanizada)
## [1] "municipio"                    "Área não Urbanizada"         
## [3] "Código da Unidade Geográfica"
crs(area_urbanizada)
## [1] NA
ncell(area_urbanizada)
## [1] 1935

Essas informações são úteis para reconhecer que tipo de conjunto de dados estamos trabalhando e como as informações nele podem ser usadas para outras análises, o que chamamos de análise exploratória. Agora vamos carregar o outro conjunto que já está no diretório, cujo arquivo recebe o nome de localsp.xls. Criaremos o conjunto local sp para analisar as informações.

library(readxl)
localsp <- read_excel("C:/ARQUIVOS COMPUTADOR/DOUTORADO/APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS/localsp.xls")

localsp
## # A tibble: 2,142 × 21
##       ID CD_GEOCODIGO TIPO   CD_GEOCODBA NM_BAIRRO CD_GEOCODSD CD_GEOCODDS
##    <dbl>        <dbl> <chr>        <dbl> <chr>           <dbl>       <dbl>
##  1 15316      3.50e14 URBANO          NA <NA>      35001050500   350010505
##  2 15317      3.50e14 URBANO          NA <NA>      35001050500   350010505
##  3 15318      3.50e14 URBANO          NA <NA>      35001050500   350010505
##  4 15319      3.50e14 URBANO          NA <NA>      35001050500   350010505
##  5 15320      3.50e14 URBANO          NA <NA>      35001050500   350010505
##  6 15321      3.50e14 URBANO          NA <NA>      35001050500   350010505
##  7 15322      3.50e14 URBANO          NA <NA>      35002040500   350020405
##  8 15323      3.50e14 URBANO          NA <NA>      35002040500   350020405
##  9 15324      3.50e14 URBANO          NA <NA>      35002040500   350020405
## 10 15325      3.50e14 URBANO          NA <NA>      35003030500   350030305
## # ℹ 2,132 more rows
## # ℹ 14 more variables: NM_DISTRITO <chr>, CD_GEOCODMU <dbl>,
## #   NM_MUNICIPIO <chr>, NM_MICRO <chr>, NM_MESO <chr>, NM_UF <chr>,
## #   CD_NIVEL <dbl>, CD_CATEGORIA <dbl>, NM_CATEGORIA <chr>,
## #   NM_LOCALIDADE <chr>, LONG <dbl>, LAT <dbl>, ALT <dbl>, GM_PONTO_sk <chr>

Neste conjunto notamos que existem algumas informações de posicionamento geográfico, como LONG, LAT e ALT, respectivamente, longitude, latitude e altitude. Aqui vamos conhecer a função plot(), a qual permite a plotagem de dados de acordo com os eixos X e Y. Usaremos somente LONG e LAT para espacializar os pontos referentes a cada uma das linhas do conjunto localsp

#plotagem do conjunto de dados utilizando long e lat (colunas 18 e 19 do conjunto localsp)
plot(localsp[, (18:19)])

A função plot() não se limita a este modelo de distribuição; pelo contrário, a função é muito poderosa, permitindo a construção de diferentes modelos. Confira usando o código a seguir.

example ("plot")
## 
## plot> nc = st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE)
## 
## plot> # plot single attribute, auto-legend:
## plot> plot(nc["SID74"])

## 
## plot> # plot multiple:
## plot> plot(nc[c("SID74", "SID79")]) # better use ggplot2::geom_sf to facet and get a single legend!

## 
## plot> # adding to a plot of an sf object only works when using reset=FALSE in the first plot:
## plot> plot(nc["SID74"], reset = FALSE)
## 
## plot> plot(st_centroid(st_geometry(nc)), add = TRUE)
## Warning in st_centroid.sfc(st_geometry(nc)): st_centroid does not give correct
## centroids for longitude/latitude data

## 
## plot> # log10 z-scale:
## plot> plot(nc["SID74"], logz = TRUE, breaks = c(0,.5,1,1.5,2), at = c(0,.5,1,1.5,2))

## 
## plot> # and we need to reset the plotting device after that, e.g. by
## plot> layout(1)
## 
## plot> # when plotting only geometries, the reset=FALSE is not needed:
## plot> plot(st_geometry(nc))

## 
## plot> plot(st_geometry(nc)[1], col = 'red', add = TRUE)
## 
## plot> # add a custom legend to an arbitray plot:
## plot> layout(matrix(1:2, ncol = 2), widths = c(1, lcm(2)))
## 
## plot> plot(1)
## 
## plot> .image_scale(1:10, col = sf.colors(9), key.length = lcm(8), key.pos = 4, at = 1:10)

## 
## plot> # manipulate plotting order, plot largest polygons first:
## plot> p = st_polygon(list(rbind(c(0,0), c(1,0), c(1,1), c(0,1), c(0,0))))
## 
## plot> x = st_sf(a=1:4, st_sfc(p, p * 2, p * 3, p * 4)) # plot(x, col=2:5) only shows the largest polygon!
## 
## plot> plot(x[order(st_area(x), decreasing = TRUE),], col = 2:5) # plot largest polygons first

## 
## plot> sf.colors(10)
##  [1] "#0000B3FF" "#0400FFFF" "#4500FFFF" "#8500FFFF" "#C527D8FF" "#FF50AFFF"
##  [7] "#FF7A85FF" "#FFA35CFF" "#FFCC33FF" "#FFF50AFF"
example ("persp")
## 
## persp> r <- raster(system.file("external/test.grd", package="raster"))
## 
## persp> persp(r)

Para conhecer outros modelos, convidamos você a acessar o meu “help” do RStudio, onde são apresentadas diferentes tipologias de dados em que se aplicam a função plot(), basta executar o código na sequência.

?plot
## starting httpd help server ... done

Outra função também usada para a criação de mapeamentos é a função ggplot(), que permite a criação de mapas de diferentes formatos usando os conjuntos de dados. Para ilustrar o funcionamento da função, utilizamos o conjunto localsp e as informações de latitude e longitude de referências. Realizamos alguns ajustes, como a alteração do nome dos eixos e do título (em labs), a determinação dos pontos em vermelho (color = “red”) e o tamanho dos pontos (size = 1). Confira a estrutura do código e o resultado gerado através da função print().

#estruturando os pontos a serem plotados
pontos_sp <- ggplot() +
  geom_point(data = localsp, aes(x = localsp$LONG, y = localsp$LAT), color = "red", size = 1) +
  labs(title = "Mapa com Pontos de Latitude e Longitude", x = "Longitude", y = "Latitude")

print(pontos_sp)

Para demostrar que podemos ampliar as camadas sobrepostas na função ggplot(), carregaremos um arquivo shapefile dos municipios de São Paulo para usar como fundo do nosso mapa. Primeiramente vamos carregar o arquivo shapefile.

#carregamento do shapefile
municipios_shp <- st_read ("sp_municipios.shp")
## Reading layer `sp_municipios' from data source 
##   `C:\ARQUIVOS COMPUTADOR\DOUTORADO\APOSTILA PROCESSAMENTO DIGITAL DE IMAGENS\sp_municipios.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 645 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -53.11011 ymin: -25.31232 xmax: -44.16137 ymax: -19.77966
## Geodetic CRS:  SIRGAS 2000
#conferência do carregamento
municipios_shp
## Simple feature collection with 645 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -53.11011 ymin: -25.31232 xmax: -44.16137 ymax: -19.77966
## Geodetic CRS:  SIRGAS 2000
## First 10 features:
##      ID CD_GEOCODM                   NM_MUNICIP                       geometry
## 1  1727    3500105                   ADAMANTINA MULTIPOLYGON (((-51.09093 -...
## 2  1728    3500204                       ADOLFO MULTIPOLYGON (((-49.69668 -...
## 3  1729    3500303                     AGUA\xcd MULTIPOLYGON (((-47.01254 -...
## 4  1730    3500402            \xc1GUAS DA PRATA MULTIPOLYGON (((-46.73069 -...
## 5  1731    3500501       \xc1GUAS DE LIND\xd3IA MULTIPOLYGON (((-46.635 -22...
## 6  1732    3500550 \xc1GUAS DE SANTA B\xc1RBARA MULTIPOLYGON (((-49.28903 -...
## 7  1733    3500600     \xc1GUAS DE S\xc3O PEDRO MULTIPOLYGON (((-47.86292 -...
## 8  1734    3500709                       AGUDOS MULTIPOLYGON (((-49.0167 -2...
## 9  1735    3500758                     ALAMBARI MULTIPOLYGON (((-47.86567 -...
## 10 1736    3500808            ALFREDO MARCONDES MULTIPOLYGON (((-51.37102 -...
#filtragem do conjunto para os atributos "NM_MUNICIP" (nome do município) e "geometry" (geometria)
cidades_shp <- municipios_shp[, c("NM_MUNICIP", "geometry")]

#conferência do novo conjunto
cidades_shp
## Simple feature collection with 645 features and 1 field
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -53.11011 ymin: -25.31232 xmax: -44.16137 ymax: -19.77966
## Geodetic CRS:  SIRGAS 2000
## First 10 features:
##                      NM_MUNICIP                       geometry
## 1                    ADAMANTINA MULTIPOLYGON (((-51.09093 -...
## 2                        ADOLFO MULTIPOLYGON (((-49.69668 -...
## 3                      AGUA\xcd MULTIPOLYGON (((-47.01254 -...
## 4             \xc1GUAS DA PRATA MULTIPOLYGON (((-46.73069 -...
## 5        \xc1GUAS DE LIND\xd3IA MULTIPOLYGON (((-46.635 -22...
## 6  \xc1GUAS DE SANTA B\xc1RBARA MULTIPOLYGON (((-49.28903 -...
## 7      \xc1GUAS DE S\xc3O PEDRO MULTIPOLYGON (((-47.86292 -...
## 8                        AGUDOS MULTIPOLYGON (((-49.0167 -2...
## 9                      ALAMBARI MULTIPOLYGON (((-47.86567 -...
## 10            ALFREDO MARCONDES MULTIPOLYGON (((-51.37102 -...
#verificando a presença de sistema de referenciamento
crs(cidades_shp)
## [1] "GEOGCRS[\"SIRGAS 2000\",\n    DATUM[\"Sistema de Referencia Geocentrico para las AmericaS 2000\",\n        ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n            LENGTHUNIT[\"metre\",1]]],\n    PRIMEM[\"Greenwich\",0,\n        ANGLEUNIT[\"degree\",0.0174532925199433]],\n    CS[ellipsoidal,2],\n        AXIS[\"geodetic latitude (Lat)\",north,\n            ORDER[1],\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        AXIS[\"geodetic longitude (Lon)\",east,\n            ORDER[2],\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n    USAGE[\n        SCOPE[\"Horizontal component of 3D system.\"],\n        AREA[\"Latin America - Central America and South America - onshore and offshore. Brazil - onshore and offshore.\"],\n        BBOX[-59.87,-122.19,32.72,-25.28]],\n    ID[\"EPSG\",4674]]"
#plotagem do conjunto, optando pela coloração cinza (gray)
plot(cidades_shp, col = "gray")

Após as análises, podemos utilizar o conjunto cidades_shp como camada de fundo para o mapeamento de pontos pontos_sp. Então vamos adicionar esta camada no mapeamento feito pela função ggplot().

#estruturando os pontos a serem plotados
pontos_sp02 <- ggplot() +
  geom_sf(data = cidades_shp, fill = "lightgray", color = "black") +
  geom_point(data = localsp, aes(x = localsp$LONG, y = localsp$LAT), color = "red", size = 1) +
  labs(title = "Mapa com Pontos de Latitude e Longitude", x = "Longitude", y = "Latitude")

print(pontos_sp02)

Agora temos uma camada com os recortes municipais do Estado de São Paulo e os pontos (que representam as áreas povoados do Estado).

Os exemplos gerados até aqui são para ilustração e ambientação no R. Não se esgotam a eles e podem ser muito mais refinados, como demonstraremos ao longo do nosso curso. Mas, para deixar vocês ansiosos pelo que o R pode trazer, extraímos do livro Geocomputation with R (Geocomputação com o R), presente na Bibliografia da aula prática, um código que gera um mapeamento interativo. Execute o código e descubra como o R pode ser um recurso formidável de geocomputação.

library(leaflet)
popup = c("Robin", "Jakub", "Jannes")
leaflet() |>
  addProviderTiles("NASAGIBS.ViirsEarthAtNight2012") |>
  addMarkers(lng = c(-3, 23, 11),
             lat = c(52, 53, 49), 
             popup = popup)

Com isso, encerramos nossa primeira aula em R e esperamos que tenham aproveitado as dicas. Ao longo do curso exploraremos outros recursos e ampliaremos os conhecimentos sobre os temas aqui tratados.

Índice

Capítulo 02 - Classificação de Imagens Orbitais

5 Referências Bibliográficas

ANDERSON, E. C. Making Maps with R Â: Reproducible Research. GitHub, 2021. Disponível em: https://eriqande.github.io/rep-res-web/lectures/making-maps-with-R.html.

CHAMBERS, J. M. Extending R. CRC Press, 364p., 2017. ISBN: 9781498775724.

DA SILVA, F. R.; GONÇALVES-SOUZA, T.; PATERNO, G. B.; PROVETE, D. B.; VANCINE, M. H. Análises ecológicas no R. Recife, PE: Nupeea, 1ª ed., 640p., 2022. ISBN: 9788579175640. Disponível em: https://analises-ecologicas.com/.

GAUTHIER, N. Anthromes 12K DGG (V1) analysis code and R research compendium. Harvard Dataverse, 2021. DOI: https://doi.org/10.7910/DVN/6FWPZ9.

LOVELACE, R. Introduction to visualizing spatial data in R. 2017. Disponível em:https://github.com/Robinlovelace/Creating-maps-in-R.

LOVELACE, R., NOWOSAD, J., & MUENCHOW, J. Geocomputation with R. Chapman and Hall/CRC, 353p., 2019. Disponível em: https://www.routledge.com/Geocomputation-withR/Lovelace-Nowosad-Muenchow/p/book/9780367670573

MACHLIS, S. Create maps in R in 10 (fairly) easy steps. Computerworld, 2017. Disponível em: https://www.computerworld.com/article/3038270/create-maps-in-r-in-10-fairly-easy-steps.html.

MARTOS, G. Cluster Analysis with R. 2021. Disponível em: https://rstudio-pubsstatic.s3.amazonaws.com/33876_1d7794d9a86647ca90c4f182df93f0e8.html.

MENESES, P. R.; ALMEIDA, T. D.; ROSA, A. N. D. C. S.; SANO, E. E. et al. Introdução ao Processamento de Imagens de Sensoriamento Remoto. Brasília: UnB-CNPq, 276 p., 2012.

MORENO, M. & BASILLE, M. Drawing beautiful maps programmatically with R, sf and ggplot2 - Part 1: Basics. 2021. Disponível em: https://r-spatial.org/r/2018/10/25/ggplot2-sf.html.

MUENCHOW, J.; SCHRATZ, P.; BRENNING, A. RQGIS: Integrating R with QGIS for Statistical Geocomputing. The R Journal, 9, n. 2, p. 409-428, 2017 2017. Doi: https://doi.org/10.32614/RJ-2017-067.

NOVIA, D. Cluster Analysis in R: Tips for Great Analysis and Visualization. Datanovia, 2018.Disponível em: https://www.datanovia.com/en/blog/cluster-analysis-in-r-simplified-and-enhanced/.

PEBESMA, E.; BIVAND, R. Spatial Data Science: With Applications in R. Chapman and Hall/CRC, 1ª ed., 314p., 2023. Doi: https://doi.org/10.1201/9780429459016.

R-BLOGGERS. Cluster Analysis in R. 2021. Disponível em: https://www.rbloggers.com/2021/04/cluster-analysis-in-r/.

STANIAK, M.; BIECEK, P. The Landscape of R Packages for Automated Exploratory Data Analysis. The R Journal, v. 11, n. 2, 23 p., 2019. Disponível em: https://arxiv.org/pdf/1904.02101.

VENABLES, W. N.; SMITH, D. M. An Introduction to R. R Core Team, 2017. Disponível em: http://colinfay.me/intro-to-r/#.

WICKHAM, H. Advanced R. CRC Press, 2ª ed., 2022. Disponível em: https://advr.hadley.nz/#license