Shapefile é um formato de dados vetoriais geoespaciais muito utilizado em ambientes SIG. O ambiente R permite que se trabalhe com esse tipo de dados. Nesta postagem, quero demonstrar como podemos importar esse tipo de arquivo ao R em duas diferentes maneiras, a fim de plotar mapas utilizando esses dados.
Os tópicos a serem explorados neste tutorial são:
- Importar shapefiles e dados de interesse para o R;
- Verificar e limpar os dados;
- Preparação de variáveis a serem utilizadas no mapa;
- Plotar o mapa.
O que é necessário ter instalado em seu computador
- R instalado e atualizado;
- Pacotes ‘maptools’ e ‘rgdal’ atualizados.
Aviso importante!
Este tutorial necessita de conhecimentos básicos da linguagem por parte do usuário. Desta forma, caso você queira uma boa fonte para se iniciar na linguagem, recomendo visitar o sítio web da disciplina Preparação de dados para Análise Estatística do Programa de Pós-graduação em Ciências Biológicas (Botânica) do INPA. Lá você encontrará rica oferta de materiais para se familiarizar com o R e ser capaz de seguir este tutorial.
O passo a passo abaixo disponibilizado tenta apresentar os dados de maneira simples. Mas vejam que podemos cumprir a idéia central desta postagem com apenas três linhas.
library(maptools)
paises_shape <- readShapePoly('countries.shp')
plot(paises_shape)
Passo 01 - Estabelecer o diretório de trabalho
Tenho por costume o hábito de estabelecer o diretório de trabalho no início de todo script. Lembre-se de SEMPRE COLOCAR OS ARQUIVOS NECESSÁRIOS para rodar o tutorial DENTRO desta PASTA DE TRABALHO. ADAPTE o TEXTO ABAIXO para a SUA PASTA DE TRABALHO!!!
rm(list = ls()) #limpa a area de trabalho
#estabelece o diretorio de trabalho
setwd('/Users/ricoperdiz/Documents/DOC/PROJETO_DOC/LABOTAM/posts_blog/post_shapefile')
Passo 02 - Baixar shapefiles da web
Existem vários sítios web que disponibilizam shapefiles gratuitamente. Aqui vamos utilizar os dados disponíveis em DIVA-GIS. Clique no link abaixo para obter um arquivo ‘.zip’ contendo os shapefiles a serem utilizados neste tutorial.
Após baixá-lo, deve-se descomprimir os arquivos e colocá-los em sua pasta de trabalho.
ATENÇÃO!!! ACESSE a pasta countries_shp e retire os quatros arquivos, de extensão ‘.shp’, ‘.dbf’, ‘.shx’ e ‘.prj’. PEGUE-OS e COLOQUE-OS na pasta de trabalho. APENAS os arquivos, NÃO INCLUA a pasta countries_shp.
Passo 03 - Importar os dados para a sessão
Os dados estão dispostos em um arquivo ‘.csv’ e estão separados por tabulação e codificados em UTF-8. Baixe-o para seu computador:
Cabe ressaltar que vários formatos podem ser utilizados para importar dados ao R. Utilizo o ‘CSV’ porque é mais simples.
Passo 04 A
USANDO O PACOTE rgdal
#chama o pacote
library('rgdal')
#importa os dados para dentro da sessao
paises_shape <- readOGR(dsn = getwd(), layer = 'countries')
#cria um vetor com nomes de paises que queremos plotar no mapa
paises <- c('Brazil','Argentina','Peru','Paraguay','Ecuador','Chile','Uruguay','French Guiana','Suriname','Venezuela','Colombia','Guyana','Bolivia','Panama','Costa Rica')
#filtra os dados para uma lista de paises
dados <- paises_shape[paises_shape$NAME%in%paises,]
#apaga os dados desnecessarios do shape original
rm(paises_shape)
# DADOS DE OCORRENCIA
# chama os dados de ocorrencia de protium heptaphyllum
# obtido na base de dados do herbario virtual do NYBG
protium <- read.table("dados_phepta_aracouc.csv", header = T, as.is = T, sep = '\t', dec = '.')
############################################################
############################################################
### Vetores
#vetores de lat e long
lat <- protium$decimalLatitude
long <- protium$decimalLongitude
#vetor de amplitude
ylat <- range(lat) + c(-1,1)
xlong <- range(long) + c(-1,1)
#vetor para nomes das especies
spp <- unique(protium$Species)
#vetor de cores para utilizar no mapa
#para cada especie, uma cor
protium$cores.map <- ifelse(protium$Species == spp[1], 'red','black')
cores.map <- protium$cores.map
#cria um vetor de tamanho para cada especie
#como uma coluna de protium
#P heptaphyllum possui uma distribuicao mais ampla
#por isso atribuo um tamanho menor pra ela
protium$cex.p <- ifelse(protium$Species == spp[1], 1, 0.8)
#vetor para os simbolos pch
protium$pontos <- ifelse(protium$Species == spp[1], 21, 24)
############################################################
############################################################
### Plota os dados
plot(dados, xlim = xlong, ylim = ylat)
points(long, lat, pch = protium$pontos , col = protium$cores.map, bg = protium$cores.map, cex = protium$cex.p)
legend(max(long) - 16 , max(lat),legend = spp, pch = unique(protium$pontos), pt.bg = unique(cores.map), cex = 1, x.intersp = 0.8, text.font = 3)
Passo 04 B
USANDO O PACOTE maptools
#chama o pacote
library('maptools')
#le o shapefile e cria um objeto com esses dados
paises_shape <- readShapePoly('countries.shp')
#cria um vetor com nomes de paises que queremos plotar no mapa
paises <- c('Brazil','Argentina','Peru','Paraguay','Ecuador','Chile','Uruguay','French Guiana','Suriname','Venezuela','Colombia','Guyana','Bolivia','Panama','Costa Rica','Belize','El Salvador','Guatemala','Honduras','Nicaragua','Mexico')
#filtra os dados para uma lista de paises
dados <- paises_shape[paises_shape$NAME%in%paises,]
#apaga os dados desnecessarios do shape original
rm(paises_shape)
# DADOS DE OCORRENCIA
# chama os dados de ocorrencia de protium heptaphyllum
# obtido na base de dados do herbario virtual do NYBG
protium <- read.table("dados_phepta_aracouc.csv", header = T, as.is = T, sep = '\t', dec = '.')
############################################################
############################################################
### Vetores
#vetores de lat e long
lat <- protium$decimalLatitude
long <- protium$decimalLongitude
#vetor de amplitude
ylat <- range(lat) + c(-1,1)
xlong <- range(long) + c(-1,1)
#vetor para nomes das especies
spp <- unique(protium$Species)
#vetor de cores para utilizar no mapa
#para cada especie, uma cor
protium$cores.map <- ifelse(protium$Species == spp[1], 'red','black')
cores.map <- protium$cores.map
#cria um vetor de tamanho para cada especie
#como uma coluna de protium
#P heptaphyllum possui uma distribuicao mais ampla
#por isso atribuo um tamanho menor pra ela
protium$cex.p <- ifelse(protium$Species == spp[1], 1, 0.8)
#vetor para os simbolos pch
protium$pontos <- ifelse(protium$Species == spp[1], 21, 24)
############################################################
############################################################
### Plota os dados
plot(dados, xlim = xlong, ylim = ylat)
points(long, lat, pch = protium$pontos , col = protium$cores.map, bg = protium$cores.map, cex = protium$cex.p)
legend(max(long) - 16 , max(lat),legend = spp, pch = unique(protium$pontos), pt.bg = unique(cores.map), cex = 1, x.intersp = 0.8, text.font = 3)
Conclusão
Os comandos aqui apresentados são muito simples, há muito a se explorar em novas postagens, tanto na utilidade das funções aqui apresentadas dos dois pacotes citados (rgdal e maptools) quanto na variedade de shapefiles a serem utilizados. Deixemos para próximas postagens.
Dúvidas, sugestões, elogios, críticas, correções, favor entrar em contato via comentários. Sua opinião é sempre bem vinda.
Caso você encontre algum erro ou tenha tido problemas em rodar os comandos, ficarei muito feliz de poder consertar ou ajudar!
Tenha um bom divertimento e aprendizado!
Para saber mais: