Carregar pacotes

library(sf)
library(geobr)
library(ggplot2)
library(dplyr)
# remotes::install_github("abjur/abjData")
library(abjData)

O pacote {sf} (Simple Features for R) (Pebesma 2020, 2018) possibilita trabalhar com bases de dados espaciais.

Para utilizar esses dados, temos duas abordagens: - Bases que não são georreferenciadas - Bases que são georreferenciadas

Trabalhando com bases não georreferenciadas

Identificar a unidade de análise, e com os joins, unir com uma base georreferenciada.

O pacote geobr (Pereira and Goncalves 2020) é um pacote que disponibiliza funções para realizar o download de diversas bases de dados espaciais oficiais do Brasil. Você pode saber mais no repositório do pacote no GitHub: https://ipeagit.github.io/geobr/

Datasets do Brasil

Quais funções para acessar cada dataset: geobr::list_geobr()

knitr::kable(geobr::list_geobr())
function geography years source
read_country Country 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
read_region Region 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
read_state States 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
read_meso_region Meso region 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
read_micro_region Micro region 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
read_intermediate_region Intermediate region 2017, 2019, 2020 IBGE
read_immediate_region Immediate region 2017, 2019, 2020 IBGE
read_municipality Municipality 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2005, 2007, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
read_municipal_seat Municipality seats (sedes municipais) 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2010 IBGE
read_weighting_area Census weighting area (área de ponderação) 2010 IBGE
read_census_tract Census tract (setor censitário) 2000, 2010, 2017, 2019, 2020 IBGE
read_statistical_grid Statistical Grid of 200 x 200 meters 2010 IBGE
read_metro_area Metropolitan areas 1970, 2001, 2002, 2003, 2005, 2010, 2013, 2014, 2015, 2016, 2017, 2018 IBGE
read_urban_area Urban footprints 2005, 2015 IBGE
read_amazon Brazil’s Legal Amazon 2012 MMA
read_biomes Biomes 2004, 2019 IBGE
read_conservation_units Environmental Conservation Units 201909 MMA
read_disaster_risk_area Disaster risk areas 2010 CEMADEN and IBGE
read_indigenous_land Indigenous lands 201907, 202103 FUNAI
read_semiarid Semi Arid region 2005, 2017 IBGE
read_health_facilities Health facilities 2015 CNES, DataSUS
read_health_region Health regions and macro regions 1991, 1994, 1997, 2001, 2005, 2013 DataSUS
read_neighborhood Neighborhood limits 2010 IBGE
read_schools Schools 2020 INEP
read_comparable_areas Historically comparable municipalities, aka Areas minimas comparaveis (AMCs) 1872,1900,1911,1920,1933,1940,1950,1960,1970,1980,1991,2000,2010 IBGE
read_urban_concentrations Urban concentration areas (concentrações urbanas) 2015 IBGE
read_pop_arrangements Population arrangements (arranjos populacioanis) 2015 IBGE

Exemplos:

# geobr::read_country() # importa a delimitação do Brasil

# geobr::read_state() # importa a delimitação dos estados do Brasil

# geobr::read_state("DF") # importa a delimitação de um Estado específico, usando a sigla

# geobr::read_municipality() # importa a delimitação de todos os municípios do Brasil. É uma base mais pesada!

# geobr::read_municipality(code_muni = 3550308) # importa a delimitação de um município específico, usando o código do IBGE do município.

Exemplo 1: Trabalhando com os estados brasileiros

Importar as bases

Não usar View()!

  • Delimitação dos Estados:
  1. Todos os estados do Brasil
estados <- readr::read_rds("dados/geobr/estados.Rds")

# Como obter essa mesma base?
# estados <- geobr::read_state()
  1. Apenas um estado: DF
estado_df <- readr::read_rds("dados/geobr/estado_df.Rds")

# Como obter essa mesma base?
# estado_df <- geobr::read_state("DF")

Explorar os dados

Qual é a classe?

class(estados)
## [1] "sf"         "data.table" "data.frame"

Usamos o pacote ggplot2 para criar os mapas, utilizando o geom_sf()

estados %>%
  ggplot() +
  geom_sf()

Empilhando as bases usando os geom’s :

ggplot() +
  geom_sf(data = estados) +
  geom_sf(data = estado_df, fill = "blue") +
  theme_bw()

Usando o dplyr com objetos sf

  • glimpse() - observar o que a base contém
glimpse(estados)
## Rows: 27
## Columns: 6
## $ code_state   <dbl> 11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 27, 2…
## $ abbrev_state <fct> RO, AC, AM, RR, PA, AP, TO, MA, PI, CE, RN, PB, PE, AL, S…
## $ name_state   <fct> Rondônia, Acre, Amazonas, Roraima, Pará, Amapá, Tocantins…
## $ code_region  <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, …
## $ name_region  <fct> Norte, Norte, Norte, Norte, Norte, Norte, Norte, Nordeste…
## $ geom         <MULTIPOLYGON [°]> MULTIPOLYGON (((-63.32721 -..., MULTIPOLYGON…
  • filter() - conseguimos filtrar os objetos
estados %>% 
  filter(name_region == "Nordeste") %>% 
  ggplot() +
  geom_sf() 

  • join()
class(abjData::pnud_uf)
## [1] "tbl_df"     "tbl"        "data.frame"
pnud_uf_sf <- estados %>% 
  left_join(abjData::pnud_uf, by = c("code_state" = "uf")) 

class(pnud_uf_sf)
## [1] "sf"         "data.table" "data.frame"

Mapas temáticos

# glimpse(pnud_uf_sf)

pnud_uf_sf  %>% 
  ggplot(aes(fill = idhm)) +
  geom_sf() +
  theme_void()

Exemplo 2: Escolas em Brasília, DF

Carregar os pacotes usados

library(magrittr)
library(dplyr)
library(ggplot2)

Carregar os dados usados

  1. Escolas em Brasília
escolas_brasilia <- readr::read_rds("dados/geobr/escolas_brasilia.Rds")

# Como obter essa mesma base?
# escolas <- geobr::read_schools()
# escolas_brasilia <- escolas %>% 
#   filter(abbrev_state == "DF", name_muni == "Brasília") 
  1. Delimitação de Brasília
municipio_brasilia <- readr::read_rds("dados/geobr/municipio_brasilia.Rds")

# Como obter essa mesma base?
# municipio_brasilia <- geobr::read_municipality(5300108)

Fazer um mapa!

Passo 1: colocar a delimitação do município e também as escolas

ggplot() +
  geom_sf(data = municipio_brasilia) +
  geom_sf(data = escolas_brasilia) 

Passo 2: Colorir as escolas por “government_level”

ggplot() +
  geom_sf(data = municipio_brasilia) +
  geom_sf(data = escolas_brasilia, aes(color = government_level)) 

Passo 3: Fazer um facet com “government_level”

ggplot() +
  geom_sf(data = municipio_brasilia) +
  geom_sf(data = escolas_brasilia, aes(color = government_level)) + 
  facet_wrap(~ government_level)

Passo 4: Remover a legenda, mudar o tema, adicionar um título e centralizar o título

ggplot() +
  geom_sf(data = municipio_brasilia) +
  geom_sf(data = escolas_brasilia, aes(color = government_level), show.legend = FALSE) + 
  facet_wrap(~ government_level) +
  theme_void() + 
  labs(title = "Escolas em Brasília \n") + 
  theme(plot.title = element_text(hjust = 0.5))

Exemplo 3 - Rodovias em DF

Carregar os pacotes

library(sf)
library(geobr)
library(magrittr)

Como buscar a base? Se quiser baixar, remova os comentários (#) dos códigos abaixo:

# Link que disponibiliza a base
# u_shp <- "https://www.gov.br/infraestrutura/pt-br/centrais-de-conteudo/rodovias-zip"

# Cirar a pasta para baixar o arquivo
# dir.create("../dados/shp_rod")

# Fazer o download do arquivo zip
# httr::GET(u_shp,
#           httr::write_disk("../dados/shp_rod/rodovias.zip"),
#           httr::progress())

# Descompactar o zip
# unzip("../dados/shp_rod/rodovias.zip", exdir = "../dados/shp_rod/")


# Importar a base em arquivo .shp
# rodovias <-
#   st_read(
#     "../dados/shp_rod/rodovias.shp",
#     quiet = TRUE#,
#     #options = "ENCODING=WINDOWS-1252"
#   ) %>%
#   # limpar o nome das colunas
#   janitor::clean_names()

# filtrar para DF

# rodovias_df <- rodovias %>% 
#   filter(sg_uf == "DF") 

Importar a base

Essa base foi gerada a partir do código no chunk anterior.

rodovias_df <- readr::read_rds("dados/rodovias_df.Rds")

Fazendo um mapa simples

ggplot() +
  geom_sf(data = rodovias_df)

Juntar os 3 exemplos!

# Inicio do ggplot
ggplot() +
  # limite do estado
  geom_sf(data = estado_df, color = "gray") +
  # escolas
  geom_sf(data = escolas_brasilia, aes(color = government_level), show.legend = FALSE) +
  # rodovias
  geom_sf(data = rodovias_df, color = "black") +
  # adicionar tema
  theme_void()