Instalação dos packages para manipulação de dados espaciais no R
Inicialmente, faz-se necessária a instalação e carregamento dos packages:
Package | utilização |
---|---|
raster | informações espaciais matriciais |
OpenStreetMap | dados o OSM |
RgoogleMaps | dados do Google Maps |
grid | |
rgdal | ler e escrever dados espaciais |
tidyverse | organização de dados |
reshape2 | |
ggmosaic | |
GISTools | ler e escrever dados espaciais |
sf | manipulação de dados espaciais |
tmap | mapas temáticos |
library(raster)
library(rJava)
library(OpenStreetMap)
library(RgoogleMaps)
library(grid)
library(rgdal)
library(tidyverse)
library(reshape2)
library(ggmosaic)
library(GISTools)
library(sp)
library(sf)
library(tmap)
library(tmaptools)
library(mapview)
Introdução aos packages sp
e sf
O package sf
é uma evolução do package sp
. Na maioria dos casos, é interessante utilizar o sf
, mas para algumas implementações, como por exemplo o uso de funções no spdep
para técnicas de análise espacial, faz-se necessária a utilização do sp
.
Dados espaciais sp
Por meio do package sp
é possível definir classes (ou objetos sp
) para manipulação de dados vetoriais pontos, linhas e polígonos.
Formatos de dados espacais no R
Sem atributos | Com atributos | Equivalente ESRI |
---|---|---|
SpatialPoints | SpatialPointsDataFrame | Point shapefiles |
SpatiaLines | SpatialLinesDataFrame | Line shapefiles |
SpatialPolygons | SpatialPolygonsDataFrame | Polygon shapefiles |
Dados espaciais GISTools
O package GISTools
vem com diferentes bancos de dados que podem ajudar no entendimento das funções. Utilizaremos dois conjuntos dados para explorar as funcionalidades deste package, a saber: (i) dados representados em linhas e polígonos referentes aos municípios na Georgia, considerando New Haven e Connecticut nos EUA. Os dados de New Haven contemplam dados de estatísticas de crimes, rodovias, informações demográficas, ferrovias e locais. O dado da Georgia inclui os limites municipais com alguns atributos relacionados aos dados de 1990 (população total, população rural, que tem curso superior, estrangeira, idosos, linha da pobreza, negros, renda média).
Para carregar os dados, utilize a função data()
.
library(GISTools)
data(newhaven)
ls() # inspecionar os dados
Verifique as classes dos objetos:
class(breach)
## [1] "SpatialPoints"
## attr(,"package")
## [1] "sp"
class(blocks)
## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
Os dados associados ao objeto blocks
podem ser visualizados por meio da função:
head(data.frame(blocks))
O data frame de um objeto espacial sp
também pode ser acessado por meio de @data
:
head(blocks@data)
Os dados das unidades censitárias de New Haven podem ser visualizados por meio de:
plot(blocks)
Para plotar as unidades censitárias e as rodovias em vermelho. A função par
serve para plotar mais de um gráfico em uma mesma representação. Existem diferentes parâmetros para essa função. Por exemplo, o mfrow
refere-se ao número de linhas e colunas para combinar as plotagens.O parâmetro mar
ajuda na definição de margens.
par(mar = c(0,0,0,0))
plot(roads, col="red")
plot(blocks, add=TRUE)
Dados espaciais sf
knitr::include_graphics("https://retaoliveira.github.io/relements/figures/sf.png")
Uma nova classe de objetos espaciais no R foi definida por meio do package denominado sf
. O objetivo de desenvolvimento deste package é padronizar o formato dos dados espaciais.
Uma evolução de dados espaciais no R pode ser vista em Spatial Data in R: New Directions by Edzer Pebesma.
A ideia por trás do package sf
é de que uma feição seja um objeto, ou seja, uma representação de um objeto do mundo real. As feições apresentam informações sobre onde estão localizadas na Terra, e atributos relacionados aos fenômenos reais. Existem muitos tipos de objetos sf
Mais informações sobre o package
sf
podem ser encontrada em Simple Features for R
Os objetos espaciais mais usuais são:
Tipo | Descrição |
---|---|
POINT | zero-dimensional geometry containing a single point |
LINESTRING | sequence of points connected by straight, non-self intersecting line pieces; one-dimensional geometry |
POLYGON | geometry with a positive area (two-dimensional); sequence of points form a closed, non-self intersecting ring; the first ring denotes the exterior ring, zero or more subsequent rings denote holes in this exterior ring |
MULTIPOINT | set of points; a MULTIPOINT is simple if no two Points in the MULTIPOINT are equal |
MULTILINESTRING | set of linestrings |
MULTIPOLYGON | set of polygons |
GEOMETRYCOLLECTION | set of geometries of any type except GEOMETRYCOLLECTION |
library(sf)
vignette(package = "sf") # visualizar as vignettes
# vignette("sf1", package = "sf")
A forma mais simples de converter os dados considerados para análise das funções de sp
em objetos do sf
é por meio da função st_as_sf()
.
# carregar o dado
data("georgia")
# converter o dado em sf
georgia_sf <- st_as_sf(georgia)
class(georgia_sf)
## [1] "sf" "data.frame"
georgia_sf # representa as dez primeiras feições
## Simple feature collection with 159 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -85.6052 ymin: 30.35541 xmax: -80.84126 ymax: 35.00068
## CRS: +proj=longlat +ellps=WGS84
## First 10 features:
## Latitude Longitud TotPop90 PctRural PctBach PctEld PctFB PctPov PctBlack
## 0 31.75339 -82.28558 15744 75.6 8.2 11.43 0.64 19.9 20.76
## 1 31.29486 -82.87474 6213 100.0 6.4 11.77 1.58 26.0 26.86
## 2 31.55678 -82.45115 9566 61.7 6.6 11.11 0.27 24.1 15.42
## 3 31.33084 -84.45401 3615 100.0 9.4 13.17 0.11 24.8 51.67
## 4 33.07193 -83.25085 39530 42.7 13.3 8.64 1.43 17.5 42.39
## 5 34.35270 -83.50054 10308 100.0 6.4 11.37 0.34 15.1 3.49
## 6 33.99347 -83.71181 29721 64.6 9.2 10.63 0.92 14.7 11.44
## 7 34.23840 -84.83918 55911 75.2 9.0 9.66 0.82 10.7 9.21
## 8 31.75940 -83.21976 16245 47.0 7.6 12.81 0.33 22.0 31.33
## 9 31.27424 -83.23179 14153 66.2 7.5 11.98 1.19 19.3 11.62
## X Y ID Name MedInc geometry
## 0 941396.6 3521764 13001 Appling 32152 MULTIPOLYGON (((-82.2252 31...
## 1 895553.0 3471916 13003 Atkinson 27657 MULTIPOLYGON (((-82.6293 31...
## 2 930946.4 3502787 13005 Bacon 29342 MULTIPOLYGON (((-82.52171 3...
## 3 745398.6 3474765 13007 Baker 29610 MULTIPOLYGON (((-84.1407 31...
## 4 849431.3 3665553 13009 Baldwin 36414 MULTIPOLYGON (((-83.27423 3...
## 5 819317.3 3807616 13011 Banks 41783 MULTIPOLYGON (((-83.39851 3...
## 6 803747.1 3769623 13013 Barrow 49829 MULTIPOLYGON (((-83.53751 3...
## 7 699011.5 3793408 13015 Bartow 47309 MULTIPOLYGON (((-84.6533 34...
## 8 863020.8 3520432 13017 Ben Hill 28009 MULTIPOLYGON (((-83.17781 3...
## 9 859915.8 3466377 13019 Berrien 33786 MULTIPOLYGON (((-83.1461 31...
georgia #apresenta todas as feições
## class : SpatialPolygonsDataFrame
## features : 159
## extent : -85.6052, -80.84126, 30.35541, 35.00068 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +ellps=WGS84
## variables : 14
## names : Latitude, Longitud, TotPop90, PctRural, PctBach, PctEld, PctFB, PctPov, PctBlack, X, Y, ID, Name, MedInc
## min values : 30.7167, -85.50471, 1915, 2.5, 4.2, 1.46, 0.04, 2.6, 0, 635964.3, 3401148, 13001, Appling, 23456
## max values : 34.91864, -81.08524, 648951, 100, 37.5, 22.96, 6.74, 35.9, 79.64, 1059706, 3872640, 13321, Worth, 81603
A função plot
também funciona de maneira diferente. Ela permite criar objetos sf
e se o objeto tiver atributos, ele demarcará com preenchimento das feições. Teste:
# todos os atributos
plot(georgia_sf)
#atributos selecionados
plot(georgia_sf[,6])
# atributos selecionados
plot(georgia_sf[,c(4,5)])
Objetos sf
apresentam data frame. O data frame de sp
e sf
podem ser comparados. No data frame dos objetos sf
há atributos de geometria, diferentemente do data frame sp
.
head(data.frame(georgia))
## Latitude Longitud TotPop90 PctRural PctBach PctEld PctFB PctPov PctBlack
## 0 31.75339 -82.28558 15744 75.6 8.2 11.43 0.64 19.9 20.76
## 1 31.29486 -82.87474 6213 100.0 6.4 11.77 1.58 26.0 26.86
## 2 31.55678 -82.45115 9566 61.7 6.6 11.11 0.27 24.1 15.42
## 3 31.33084 -84.45401 3615 100.0 9.4 13.17 0.11 24.8 51.67
## 4 33.07193 -83.25085 39530 42.7 13.3 8.64 1.43 17.5 42.39
## 5 34.35270 -83.50054 10308 100.0 6.4 11.37 0.34 15.1 3.49
## X Y ID Name MedInc
## 0 941396.6 3521764 13001 Appling 32152
## 1 895553.0 3471916 13003 Atkinson 27657
## 2 930946.4 3502787 13005 Bacon 29342
## 3 745398.6 3474765 13007 Baker 29610
## 4 849431.3 3665553 13009 Baldwin 36414
## 5 819317.3 3807616 13011 Banks 41783
head(data.frame(georgia_sf))
## Latitude Longitud TotPop90 PctRural PctBach PctEld PctFB PctPov PctBlack
## 0 31.75339 -82.28558 15744 75.6 8.2 11.43 0.64 19.9 20.76
## 1 31.29486 -82.87474 6213 100.0 6.4 11.77 1.58 26.0 26.86
## 2 31.55678 -82.45115 9566 61.7 6.6 11.11 0.27 24.1 15.42
## 3 31.33084 -84.45401 3615 100.0 9.4 13.17 0.11 24.8 51.67
## 4 33.07193 -83.25085 39530 42.7 13.3 8.64 1.43 17.5 42.39
## 5 34.35270 -83.50054 10308 100.0 6.4 11.37 0.34 15.1 3.49
## X Y ID Name MedInc geometry
## 0 941396.6 3521764 13001 Appling 32152 MULTIPOLYGON (((-82.2252 31...
## 1 895553.0 3471916 13003 Atkinson 27657 MULTIPOLYGON (((-82.6293 31...
## 2 930946.4 3502787 13005 Bacon 29342 MULTIPOLYGON (((-82.52171 3...
## 3 745398.6 3474765 13007 Baker 29610 MULTIPOLYGON (((-84.1407 31...
## 4 849431.3 3665553 13009 Baldwin 36414 MULTIPOLYGON (((-83.27423 3...
## 5 819317.3 3807616 13011 Banks 41783 MULTIPOLYGON (((-83.39851 3...
Para converter dado espaciais sf
para sp
, faça:
g2 <- as(georgia_sf, "Spatial")
class(g2)
## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
Lendo e escrevendo dados espaciais no R
Muito frequentemente temos dados no formato shapefile que precisam ser importados para o R. As funções dos packages rgdal
e sf
permitem essa importação.
Lendo e escrevendo dados sp
.
As funções do rgdal
para ler e escrever dados espaciais são, respectivamente: readOGR()
e writeOGR()
. O objeto georgia
em sp
pode ser convertido em shapefile como a seguir:
library(rgdal)
writeOGR(obj=georgia, dsn="./shapefiles", layer="georgia", driver="ESRI Shapefile", overwrite_layer=TRUE)
Para ler um shapefile, faça:
new_georgia <- readOGR(dsn="./shapefiles/georgia.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "D:\Dropbox\courses\content\cursos\spatial\shapefiles\georgia.shp", layer: "georgia"
## with 159 features
## It has 14 fields
class(new_georgia)
## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
new_georgia
é um objeto sp
. Observe que o parâmetro dns
considerado na função writeOGR
endereça o folder onde os arquivos shapefile serão armazenados. Atribuir “.” implica na inclusão dos arquivos no diretório padrão do projeto.
As funções
setwd()
egetwd()
são úteis para identificar o diretório raiz do projeto e para determinar o diretório de trabalho. Para informações sobre como utilizar a função, acesse ?setwd e ?getwd.
Funções para ler e escrever dados espaciais do tipo raster
podem ser encontradas também no package rgdal
. Explore pelo help as funções writeGDAL
e readGDAL
.
Lendo e escrevendo dados sf
.
O package sf
também tem funções que permitem ler e escrever dados espaciais. As funções para isso são st_read()
e st_write()
. Experimente:
# setwd("./shapefiles/")
#g2 <- st_read("georgia.shp")
O diretório deve ser especificado para que os dados espaciais sejam varridos de forma efetiva pelas funções. Para escrever utilizando a função st_write()
são necessários dois parâmetros: o objeto e o nome do arquivo.
# st_write(g2, "georgia.shp", delete_layer = TRUE)
Esse comando é igual a:
# st_write(g2, dsn="georgia.shp", layer="georgia.shp", driver = "ESRI Shapefile", delete_layer = TRUE)