Ferramentas do usuário

Ferramentas do site


cursos:ecor:05_curso_antigo:r2019:alunos:trabalho_final:beatriz.murer:projeto

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:

cursos/ecor/05_curso_antigo/r2019/alunos/trabalho_final/beatriz.murer/projeto.txt · Última modificação: 2020/07/27 18:48 (edição externa)