====== Projeto Final: Tá em Área Protegida? ======
**Alguns avisos importantes:**
* Rodar linha por linha antes de rodar a função.
* Trata-se de uma função que utiliza //shapefiles// (informações espacializadas).
A fonte para acesso a todos os //shapefiles// utilizados estão disponíveis abaixo.
Foram utilizados os //shapes// do território brasileiro (disponível //online//) e das AP (conseguidos por solicitação ao Instituto
Socioambiental (ISA), que dispõe de amplo acervo). É importante enfatizar que os //shapes// das AP foram cedidos
pelo ISA especificamente para este fim e **qualquer outra utilização desses dados** requer contato diretamente
com o Instituto.
**A Função:**
# Criando a função
taemap <- function(x, pasta, map=TRUE) #criando a função com os argumentos "x" (nome do arquivo a ser comparado: "__.shp") e map (decisão de plotar ou não o mapa com as AP e as áreas inseridas)
{
# Acessando os pacotes requeridos para o desenvolvimento da função
require(rgdal) # para acessar a função readOGR
require(tmap) # plotar o mapa
require(sf) # comparar dados sobreposições
require(dplyr) # para acessar a função mutate
# Se os pacotes não estiverem instalados
if(("package:rgdal" %in% search()) == FALSE) # se o pacote rgdal não tiver baixado..
{
install.packages("rgdal") # vai instalá-lo
library(rgdal) # e acessá-lo
}
if(("package:tmap" %in% search()) == FALSE) # se o pacote tmap não tiver baixado..
{
install.packages("tmap") # vai instalá-lo
library(tmap) # e acessá-lo
}
if(("package:sf" %in% search()) == FALSE) # se o pacote sf não tiver baixado..
{
install.packages("sf") # vai instalá-lo
library(sf) # e acessá-lo
}
if(("package:dplyr" %in% search()) == FALSE) # se o pacote dplyr não tiver baixado..
{
install.packages("dplyr") # vai instalá-lo
library(dplyr) # e acessá-lo
}
# Leitura dos dados de área inseridos pela/o usuária/o
pasta # lê o nome da pasta onde constam os shapefiles
diretorio <- getwd() # guarda a informação do diretório atual em um objeto (para ao final da função, retorná-lo)
setwd(pasta) # define como diretório a pasta que contem os shapefiles
if((".shp" %in% dir()) == FALSE | (".prj" %in% dir()) == FALSE | (".bdf" %in% dir()) == FALSE | (".shx" %in% dir()) == FALSE) # Se alguma das extensões dos shapefiles não estiverem na pasta
{message ("Todas as extensões do shapefile (.shp, .prj, .bdf, .shx, etc) devem estar nomeadas em seu diretório com o mesmo nome")} # mostra uma mensagem de alerta para garantir que, para que o arquivo seja lido, todas as extensões do shape estejam na mesma pasta e com o mesmo nome
x #lê o nome do arquivo a ser comparado com as AP ("nome.shp") - deve estar no diretório
insere <- readOGR(x) #cria o objeto "insere", designando-o a leitura do arquivo inserido
#Verificação de parâmetro
#Cria objetos para conferir a classe do objeto "insere"
class.polygons <- "SpatialPolygonsDataFrame" %in% class(insere) #cria o objeto "class.polygons" com a informação de se há o termo "SpatialPolygonsDataFrame" na classe do objeto "insere"
class.lines <- "SpatialLinesDataFrame" %in% class(insere) #cria o objeto "class.lines" com a informação de se há o termo "SpatialLinesDataFrame" na classe do objeto "insere"
#Cria um if para parar a função caso o objeto "insere" não seja de nenhuma das classes acima
if (class.lines == FALSE & class.polygons == FALSE) #cria uma condição: se a classe do objedo "insere" não for dos formatos correspondentes a shapefiles...
{stop ("o objeto 'insere' não é nem da classe 'SpatialPolygonsDataFrame' nem 'SpatialLinesDataFrame'!")} #...a função para, pois não é possível proceder.
# Leitura dos Shapes das Áreas Protegidas
# Unidades de Conservação Federais (UCF)
ucf <- readOGR("UCs_Federais.shp") #lê os shapes das Unidades de Conservação Federais
#summary(ucf) #lendo o objeto ucf
#class(ucf) #mostra que trata-se de um objeto da classe "SpatialPolygonsDataFrame"
#names(ucf) #verifica os nomes das colunas do objeto
# Unidades de Conservação Estaduais (UCE)
uce <- readOGR("UCs_Estaduais.shp") #lê os shapes das Unidades de Conservação Estaduais
#summary(uce) #lendo o objeto uce
#class(uce) #mostra que trata-se de um objeto da classe "SpatialPolygonsDataFrame"
#names(uce) #verifica os nomes das colunas do objeto
# Terras Indígenas (TI)
ti <- readOGR("Terra_Indígena.shp") #lê os shapes das Terras Indígenas
#summary(ti) #lendo o objeto ti
#class(ti) #mostra que trata-se de um objeto da classe "SpatialPolygonsDataFrame"
#names(ti) #verifica os nomes das colunas do objeto
# Preparando os dados das AP para retornar um Data.frame único com todas as informações de sobreposição todas as Áreas Protegidas
# Convertendo para sf (dados espaciais em data.frame) os dados a serem sobrepostos
{
insere.sf <- st_as_sf(insere) #convertendo o objeto "insere" (shapefile) ao formato sf, legível para st_intersects
ucf.sf <- st_as_sf(ucf) #convertendo o objeto "ucf" (shapefile) ao formato sf, legível para st_intersects
uce.sf <- st_as_sf(uce) #convertendo o objeto "uce" (shapefile) ao formato sf, legível para st_intersects
ti.sf <- st_as_sf(ti) #convertendo o objeto "ti" (shapefile) ao formato sf, legível para st_intersects
}
#transformar ti.sf em um objeto com o mesmo número de colunas que ucf.sf e uce.sf (para depois uní-los todos em um único objeto)
#cria um data.frame com repetidos NA (apenas pra coincidir o número de colunas do objeto ha.sobrepos.uc) com o número da extensão do objeto "extensao.ti"
uso = c(rep(NA,each=(length(ti.sf)))) # cria um objeto com repetidos NA (apenas pra coincidir o número de colunas do objeto ha.sobrepos.uc) com o número da extensão do objeto "ti.sf"
uso <- as.data.frame(uso) # transforma-o em data.frame
ti.sf <- merge(ti.sf,uso) # acrescenta mais uma coluna ao data.frame ti.sf
#Juntando informações de todas as AP
uc.sf <- rbind(ucf.sf,uce.sf) #Juntando informações das UC
#padronizando nome das colunas para unir as informações de todas as AP
names(uc.sf)[2] <- "nome_ap" #renomeia a coluna "nome_uc" para "nome_ap"
names(ti.sf)[2] <- "nome_ap" #renomeia a coluna "nome_ti" para "nome_ap"
ap.sf <- rbind(uc.sf, ti.sf) #Juntando informações das UC com TI = AP
# Comparando espacialização das AP e da área inserida
ap.sobrepos <- st_intersection(insere.sf, ap.sf) #averigua a presença de sobreposições das áreas protegidas e das áreas inseridas
#Averiguando a extensão da sobreposição
{
#UCF
sobrepos <- ap.sobrepos %>% #calcula a extensão da incidência da área inserida nas áreas protegidas
mutate(area_sobreposta = st_area(.) %>% as.numeric()) #cria a coluna "area_sobreposta" onde a área sobreposta é inserida em formato numérico
sobrepos #retorna todas as informações das AP, incluindo a sobreposição com as áreas inseridas
}
# Fonte da etapa de averiguação das extensões: https://gis.stackexchange.com/questions/140504/extracting-intersection-areas-in-r
#Plotando o mapa com as áreas
if (map) # Dado que um dos argumentos da função dá a alternativa de escolher plotar ou não o mapa - cria-se um if para tanto (se map = TRUE:)
{
br <- readOGR("UFEBRASIL.shp") #cria objeto com os shapes das Unidades Federativas brasileiras para plotá-las no mapa
#para o caso de "insere" conter shapefiles com polígonos
if (class.polygons == TRUE) #Se o objeto "insere" for da classe "SpatialPolygonsDataFrame" (polígonos)...
{
# Criar objeto de mapa com as informações de UCE, UCF, TI e área inserida
map.polygons <- tm_shape(br) + tm_fill(col ="white") + tm_borders() + #informação de plotagem dos limites (contorno) do país e dos estados
tm_shape(ucf) + tm_fill(col = "green", alpha = 0.5) + tm_borders() + #informação de plotagem das Unidades de Conservação Federais em verde
tm_shape(uce) + tm_fill(col = "yellow", alpha = 0.6) + tm_borders() + #informação de plotagem das Unidades de Conservação Estaduais em amarelo)
tm_shape(ti) + tm_fill(col = "blue", alpha = 0.4) + tm_borders() + #informação de plotagem das Terras Indígenas (contorno preto e preenchimento em marrom claro)
tm_scale_bar(position = c("right", "bottom")) + #informação de plotagem de escala (posicionada no canto inferior direito do mapa)
tm_layout(title = "Incidência nas Áreas Protegidas brasileiras", title.size=0.7, title.position = c("RIGHT", "TOP")) + #informação de plotagem do título (tamanho especificado e posicionado no canto superior direito do mapa)
tm_compass(position = c("left","top"), size=0.5) + #informação de plotagem da rosa dos ventos (tamanho especificado e posicionado no canto superior esquerdo do mapa)
tm_add_legend(type="fill", col = c("yellow","green","blue","red"), #informação de plotagem da legenda (sequência de cores)
labels= c("UCE", "UCF", "TI","Dados inseridos"), title="Legenda") + #informação de plotagem dos detalhes da legenda (respectivas categorias associadas às cores e título da legenda)
tm_shape(insere) + tm_borders(col = "red") + tm_fill(col = "red", alpha = 0.4) #informação de plotagem das áreas inseridas (contorno em vermelho e preenchimento em vermelho claro)
#plota o mapa
map <- print (map.polygons) # ..Plota o mapa com as configurações de polígonos
}
#para o caso de "insere" conter shapefiles com linhas
if (class.lines == TRUE) #Se o objeto "insere" for da classe "SpatialLinesDataFrame" (linhas)...
{
# Criar objeto de mapa com as informações de UCE, UCF, TI e área inserida
map.lines <- tm_shape(br) + tm_fill(col ="white") + tm_borders() + #informação de plotagem dos limites (contorno) do país e dos estados
tm_shape(ucf) + tm_fill(col = "green", alpha = 0.5) + tm_borders() + #informação de plotagem das Unidades de Conservação Federais em verde
tm_shape(uce) + tm_fill(col = "yellow", alpha = 0.6) + tm_borders() + #informação de plotagem das Unidades de Conservação Estaduais em amarelo)
tm_shape(ti) + tm_fill(col = "blue", alpha = 0.4) + tm_borders() + #informação de plotagem das Terras Indígenas (contorno preto e preenchimento em marrom claro)
tm_scale_bar(position = c("right", "bottom")) + #informação de plotagem de escala (posicionada no canto inferior direito do mapa)
tm_layout(title = "Incidência nas Áreas Protegidas brasileiras", title.size=0.7, title.position = c("RIGHT", "TOP")) + #informação de plotagem do título (tamanho especificado e posicionado no canto superior direito do mapa)
tm_compass(position = c("left","top"), size=0.5) + #informação de plotagem da rosa dos ventos (tamanho especificado e posicionado no canto superior esquerdo do mapa)
tm_add_legend(type="fill", col = c("yellow","green","blue","red"), #informação de plotagem da legenda (sequência de cores)
labels= c("UCE", "UCF", "TI","Dados inseridos"), title="Legenda") + #informação de plotagem dos detalhes da legenda (respectivas categorias associadas às cores e título da legenda)
tm_shape(insere) + tm_lines("red") #informação de plotagem das áreas inseridas (contorno em vermelho)
#plota o mapa
map <- print (map.lines) # Plota o mapa com as configurações de linha
}
}
setwd (diretorio) # retorna o diretório ao diretório original
# finaliza a função, mostrando o que retornará
retorna <- c(sobrepos, map) # Criar objeto com lista dos dois objetos (o data.frame com dados de todas as AP [incluindo as informações sobre as sobreposições] e o mapa)
return(retorna) # Retorna os dados das AP e o mapa
}
**Help da Função**
R Documentation
taemap ()
Description:
~~ A função "taemap" visa comparar áreas fixas, especificamente as áreas protegidas (AP), ou seja, Unidades de Conservação (UC) e Terras Indígenas (TI), com alguma área inserida (ex. rodovias, áreas de desmatamento, mineração, etc.). A função retorna um data.frame com informações de sobreposição e mapa plotado com as AP e áreas inseridas. ~~
Usage:
~~ taemap(x, pasta, map=TRUE) ~~
Arguments:
~~ x - nome do arquivo shapefile: "___.shp" ~~
~~ pasta - nome da pasta em que encontra-se o shapefile
~~ map - decisão sobre plotagem de mapa (TRUE = plotagem) ~~
Details:
~~ O objetivo é avaliar incidência de pressão e ameaças nas APs e, por isso, há especificação sobre as AP. Mas as etapas da função podem servir para comparação de outras áreas quaisquer. ~~
Value:
~~ sobrepos: Data.frame com informações de sobreposição das as áreas protegidas ~~
~~ map: Mapa do Brasil com as AP e área inserida plotadas ~~
Warning:
~~ Todas as extensões do shapefile (.shp, .prj, .bdf, .shx, etc) devem estar nomeadas em seu diretório com o mesmo nome. ~~
Author
~~ Beatriz Moraes Murer: Mestranda em Ecologia no Instituto de Biociências da Universidade de São Paulo e analista de pesquisa socioambiental do Instituto Socioambiental ~~
beatriz.murer@usp.br / beatriz@socioambiental.org
References:
~~ https://gis.stackexchange.com/questions/140504/extracting-intersection-areas-in-r ~~
~~ https://geocompr.robinlovelace.net/adv-map.html ~~
~~ https://keen-swartz-3146c4.netlify.com/plotting.html#class-intervals ~~
Shapefiles:
~~ Território Brasileiro: http://www.usp.br/nereus/?dados=brasil ~~
~~ Áreas Protegidas: Instituto Socioambiental. Cedido em junho/2019 ~~
See Also:
~~ st_intersects()
~~ tm_shape()
Examples:
~~ x <- "Shapes/Insere.shp" #Rodovias do Plano Nacional de Logística (Fonte: https://www.epl.gov.br/rede-georeferenciada-pnl-2025)
~~ pasta <- "C:/Users/Bia/Documents/R/Shapes"
~~ taemap(x, pasta)
**//Shapefiles//**
Todos os shapes estão disponíveis em: https://drive.google.com/drive/u/1/folders/1UWPBcv7Oy_FdL6xNFsZIW3cbP17BgocH
__Separadamente é possível acessar em__:
* Território Brasileiro: http://www.usp.br/nereus/?dados=brasil
* Áreas Protegidas: https://drive.google.com/drive/u/1/folders/1UWPBcv7Oy_FdL6xNFsZIW3cbP17BgocH (arquivos no drive acessível por solicitação [só para controle], já que a cessão do ISA demanda restrição de uso)
* Plano Nacional de Logística (malha de transportes a ser construída no país até 2025): https://www.epl.gov.br/rede-georeferenciada-pnl-2025 - exemplo de shapes usados para serem comparados às APs