Dados espaciais

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() e getwd() 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)

Previous
Next