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.
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.
## [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:
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.
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.
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.
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.
## 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
## 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
## [1] "municipio" "Área não Urbanizada"
## [3] "Código da Unidade Geográfica"
## [1] NA
## [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.
##
## 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"
##
## 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.
## 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.
## 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
## 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 -...
## [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]]"
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.
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