[[bot89:precurso:2lists:inicio]]

Objetos Complexos

  • Em alguns casos, como por exemplo, em arquivos de dados espaciais (shapefiles), que tem estruturas complexas que incluem as especificações dos polígonos, pontos ou linhas, a projeção espacial e os dados associados (attribute tables), exige um objeto que tenha uma estrutura complexa no R.
  • Nestes casos é importante que você conheça o operador @, que permite extrair elementos nesses objetos. Em alguns casos você terá que usá-lo para entender o objeto ou pegar elementos nesses objetos.
  • A função slotNames() - permite ver os elementos que podem ser extraídos com @.
  • Abaixo mostramos um exemplo através de um mapa dos municípios brasileiros. Baixe este arquivo comprimido que contém os arquivos de um um único shapefile. Descomprima ele na sua pasta de trabalho no R e vai ter vários arquivos associados:
#vamos precisar de dois pacotes para dados espaciais
#se não tiver instalado, instale com as dependencias
library(maps)
library(rgdal)
dir(pattern="shp") #lista arquivos shape na pasta
 
#veja o help da função para ler shapefiles
?readOGR 
 
#le o shape file com objeto espacial no R
mp = readOGR(dsn="MUNICIPIOS.shp",layer = "MUNICIPIOS",encoding="UTF-8")
plot(mp) #veja o mapa
 
class(mp) #é um objeto de classe SpatialPolygonsDataFrame
str(mp) #a estrutura é complexa
 
#tem elementos definidos por $, que interpretado diretamente, é corresponde a um data.frame que é o dado associado à cada polígono no arquivo (attribute table do shapefile).
names(mp)
mp$NOME_MUNI
dim(mp)
 
#tem elementos definidos por @
#ver o help da função 
#?slot
#slotNames(mp) #lista quais são esses elementos
 
 
mp@data  #é o mesmo data.frame que é automaticamente reconhecido na expressão acima
dim(mp)==dim(mp@data)
names(mp)==names(mp@data)
 
#area do mapa dos municipios (os limites em latitude e longitude da área)
mp@bbox 
plot(mp@bbox)
#adicionamos o mapa mundi sobre isso
map(add=T)
 
#mp@polygons define cada poligono individualmente numa lista
class(mp@polygons)
mp@polygons[[1]] #um elemento qualquer
class(mp@polygons[[1]])
str(mp@polygons[[1]])
 
#veja que este objeto tem vários elementos definidos por @
#slotNames(mp@polygons[[1]]) #slots desse objeto
mp@polygons[[1]]@labpt #o centroid do polígono 1 que é o municipio de:
mp@data$NOME_MUNI[1] #Chuí
 
#qual elemento é manaus?
gp = grep("Manaus",mp@data$NOME_MUNI)
#pega o polígono de manaus
manaus= mp@polygons[[gp]]
class(manaus)
str(manaus)
 
#plota manaus
#dev.off() #fecha dispositivos gráficos podes precisar disso
map(xlim=mp@bbox["x",],ylim=mp@bbox["y",])
polygon(manaus@Polygons[[1]]@coords,col='red')
#centroides do poligono de manaus
ctro = manaus@Polygons[[1]]@labpt
ctro[2] = ctro[2]+1.5 #adiciona 1.5 graus na latitude para não plotar sobre o poligono do municipio
#plota no nome
text(x=ctro[1],y=ctro[2],labels='Manaus',cex=0.8)

  • bot89/precurso/2lists/inicio.txt
  • Última modificação: 08/38/2020 17:38
  • por perdiz