Baixe o app para aproveitar ainda mais
Prévia do material em texto
1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.4.1 1.3.4.2 1.3.4.3 1.4 1.4.1 1.4.2 Tabela de conteúdos Introduction Seção 1 Conceitos básicos Tipos de shapefile Tipos de mapas Tipos de coordenadas Seção 2 Carregar shapefile Ver atributos da projeção Ver a classe do objeto Plotar mapa Plotar mapa (ggplot2) Plotar linhas Plotar pontos Seção 3 Selecionar polígonos específicos Centróide de polígonos 1 Mapas no R e RStudio Autor: Raul Ossada Versão: 0.2.2 - "Oferendar" Ano: 2017 Este livro tem como objetivo de apresentar alguns pacotes, funções e parâmetros dessas funções, presentes no programa R relacionados à criação, manipulação, visualizaçao e análises de mapas. A cópia parcial do conteúdo deste livro é permitida desde que citada a fonte. Este livro está em constante atualização, portanto o uso do conteúdo deste é de responsabilidade do usuário. Comentários, críticas e sugestões que visem melhorar o conteúdo do livro são bem-vindos. Introduction 2 Seção 1 Nesta seção iremos ver alguns conceitos mais básicos quando se trabalha com mapas. Seção 1 3 Planeta Terra Uma rápida introdução sobre os conceitos básicos quando se usa mapas Elipsóide Para representar o planeta utiliza-se um elipsóide, que é uma aproximação do formato do planeta e portanto não se ajusta perfeitamente à Terra. Os diversos elipsóides usados para representar o Planeta Terra. Utilizam-se diferentes tipos de elipsóides, sendo alguns usados para ajustar o planeta todo e alguns usados para ajustar uma região específica. Datum Globo (3D) Tipos de coordenada: Unprojected (Geographic) Latitude/Longitude Representação: graus decimais e 'grau, minuto, segundo' Projection Mapa (2D) Tipos de coordenada: Projected (Easting/Northing) Conceitos básicos 4 Tipos de shapefile Shape de Polígonos Shape de Linhas Shape de Pontos Tipos de shapefile 5 Tipos de mapas Mapas Vetoriais Objetivo deste livro Mapas de Raster Futuramente podem vir a serem tratados neste livro Tipos de mapas 6 Tipos de coordenadas Coordenadas geográficas (Não-projetadas) Latitude/Longitude Formatos de Latitude/Longitude 1) Signed degrees format (DDD.dddddddd) Uma latitude ou uma longitude com 8 casas decimais indica uma resolução de 1 milímetro. Características: Latitudes do Sul e Longitudes do Oeste são precedidas por um sinal de menos; Latitudes variam de -90 a 90. Longitudes variam de -180 a 180. https://stackoverflow.com/questions/15965166/what-is-the-maximum-length-of-latitude-and- longitude https://msdn.microsoft.com/en-us/library/aa578799.aspx http://www.geomidpoint.com/latlon.html Coordenadas projetadas UTM Tipos de coordenadas 7 Seção 2 Nesta seção iremos ver alguns pacotes e funções para visualizar mapas no R e no RStudio. Os shapefiles usados nesta seção foram obtidos do site da Agência Executiva de Gestão das Águas do Estado da Paraíba AESA, seguindo o caminho: Arquivos Shapefiles → Municipios.zip → Estrada_Ferro.zip → Sedes_Municipais.zip Importante! Lembre-se de descompactar os arquivos "*.zip" antes de usá-los. Seção 2 8 Como carregar um shapefile no R Função: readOGR Recomenda-se o uso da função readOGR do pacote rgdal , pois esta lê tanto o arquivo ".shp", quanto o arquivo ".prj". Parâmetros interessantes da função: dsn : Pasta (diretório), onde se encontram os arquivos (*.cpg, *.dbf, *.prj, *.shp, *.shx, etc). layer : Nome do arquivo, sem a extensão. verbose : Indica se deve ser exibido um relatório de progresso da leitura do arquivo. stringsAsFactors : Indica se os vetores do tipo character devem ser convertidos para o tipo factor. library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); Sugestões de busca em inglês: "r read shapefile". Sugestões de busca em português: "r como abrir um shapefile", "r como ler um shapefile". Importante! Neste livro, os shapefiles serão carregados com essa função. Ficando as funções de outros pacotes como uma curiosidade extra. Carregar shapefile 9 Como ver os atributos da projeção Função: proj4string Para ver os atributos da projeção de um objeto carregado usando a função readOGR , podemos usar a função proj4string do pacote sp . Parâmetros interessantes da função: obj : Nome do objeto com os dados do shapefile. 1) Vamos carregar o shapefile: library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); 2) Vamos ver quais são os atributos da projeção desse shapefile: proj4string(obj=pb_poligonos_rgdal); [1] "+proj=longlat +ellps=aust_SA +no_defs" Alguns atributos de projeções: +ellps +datum +proj +zone +units +init Importante! É importante conhecer os atributos de uma projeção para evitar problemas como: pontos aparecendo fora de um mapa ou cálculos de distância entre pontos muito absurdos, etc. Sugestões de busca em inglês: "r shapefile projection". Ver atributos da projeção 10 Como ver a classe de um objeto Função: class Para ver a classe do objeto que guarda os dados do shapefile podemos usar a função class . Parâmetros interessantes da função: x : Nome do objeto com os dados do shapefile. 1) Vamos carregar o shapefile: library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); 2) Vamos ver qual a classe do objeto que guarda os dados do shapefile: class(x=pb_poligonos_rgdal); [1] "SpatialPolygonsDataFrame" attr(,"package") [1] "sp" Como podemos ver, nosso objeto pertence à classe SpatialPolygonsDataFrame. Ou seja, trata-se de um objeto que contém informações sobre um shape de polígonos (Spatial Polygons). Outras possibilidades que iremos explorar serão os objetos que contêm informações sobre um shape de linhas (Spatial Lines) e sobre um shape de pontos (Spatial Points). Importante! É importante saber à que tipo de classe um objeto pertence, pois uma mesma função pode apresentam saídas diferentes dependendo do tipo de objeto que é fornecido como entrada. Sugestões de busca em inglês: Ver a classe do objeto 11 Como plotar um mapa no R Função: plot Para plotar um mapa de um objeto carregado usando a função readOGR , podemos usar a função plot . Parâmetros interessantes da função: axes : Indica se devem ser plotados os eixos x e y do gráfico. border : Define a cor da linha de borda dos polígonos. (Exemplos: "black", "darkgray", "red", etc). lty : Define o tipo da linha de borda. (1-linha contínua, 2-tracejado, 3-pontos, etc). lwd : Define a grossura das linhas de borda. col : Define a cor de preenchimento dos polígonos. (Exemplos: "white", "brown", "blue", etc) main : Texto do título do gráfico. 1) Vamos carregar o shapefile: library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); 2) Vamos plotar o mapa plot(pb_poligonos_rgdal, axes=TRUE, border="darkgrey", lty=1, lwd=1, col="white", main="Mapa dos municipios do Estado da Paraiba"); Plotar mapa 12 Sugestões de busca em inglês: "r plot shapefile". Outro exemplo: Mapa Mundi library("maps"); map(database="world"); Plotar mapa 13 # map(database="world", fill=TRUE, col="white", bg="lightblue", ylim=c(-60, 90), mar=c (0,0,0,0)); Plotar mapa 14 Como plotar um mapa no R com o pacote ggplot2 Função: ggplot + geom_polygon + coord_map Para plotar um mapa de um objeto carregado usando a função readOGR , podemos usar a função ggplot com a função geom_polygon e a função coord_map . Parâmetros interessantes da função: data : Define os dados a serem usados para criar o mapa. mapping : aes x : Nome da coluna com as coordenadas das longitudes. y : Nome da coluna com as coordenadas das latitudes. group : Nome da coluna com os grupos que definem os polígonos. fill : Nome da coluna com os grupos que definem as cores de preenchimento dos polígonos. color : Define a cor da linha da borda dos polígonos. fill : Define a cor de preenchimento dos polígonos. (Exemplos: "white", "brown", "blue", etc). 1) Vamos carregar o shapefile: library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); 2) Vamos plotar o mapa library("rgeos"); library("maptools"); library("ggplot2"); library("mapproj"); # Verifica os nomes das colunas que podem ser usadas para definir os polígonos (municí pios) names(pb_poligonos_rgdal); [1] "OBJECTID" "GEOCODIG_M" "UF" "Sigla" "Nome_Munic" [6] "Regi�.o" "Mesorregi�." "Nome_Meso" "Microrregi" "Nome_Micro" [11] "Shape_Leng" "Shape_Area" Plotar mapa (ggplot2) 15 # Requer os pacotes rgeos, maptools e ggplot2, carregados nesta ordem. # Transforma os SpatialPolygonsDataFrame em um data.frame que pode ser usado pelo geom _polygon. pb_poligonos_fortify <- fortify(model=pb_poligonos_rgdal, region="GEOCODIG_M"); # Plot # coord_map(): Evita que o mapa fique distorcido, requer o pacote mapproj ggplot() + geom_polygon(data=pb_poligonos_fortify, mapping=aes(x=long, y=lat, group=group), color="black", fill="white") + coord_map() + labs(y="latitude", x="longitude", title="Municipios do Estado da Paraiba") + theme(plot.title=element_text(hjust = 0.5) ); Sugestões de busca em inglês: "r plot shapefile with ggplot2". Plotar mapa (ggplot2) 16 Como plotar um mapa no R Extra: Adicionar um shape de linhas Vamos adicionar o shape de linhas de Estrada de Ferro 1) Carregar o shape de polígonos e verificar os atributos de sua projeção: pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); proj4string(pb_poligonos_rgdal); [1] "+proj=longlat +ellps=aust_SA +no_defs" 2) Carregar o shape de linhas e verificar os atributos de sua projeção: pb_linhas_rgdal <- readOGR(dsn="aesa_pb/Estrada_Ferro", layer="Estrada_Ferro", verbose=FALSE, stringsAsFactors=FALSE); proj4string(pb_linhas_rgdal); [1] "+proj=longlat +ellps=aust_SA +no_defs" Observe que no caso deste exemplo os atributos do shape de polígonos e de linhas são os mesmos. Caso eles fossem diferentes seria necessário transformar os atributos de um dos shapes para garantir a consistência de nossas análises. 3) Plotar o mapa de municípios e adicionar as linhas da estrada de ferro: plot(pb_poligonos_rgdal, axes=TRUE, border="darkgrey", lty=1, lwd=1, col="white", main="Mapa dos municipios do Estado da Paraiba (Estrada de Ferro)"); plot(pb_linhas_rgdal, add=TRUE, col="red"); Plotar linhas 17 Sugestões de busca em inglês: Plotar linhas 18 Como plotar um mapa no R Extra: Adicionar um shape de pontos Vamos adicionar o shape de pontos de Sedes Municipais. 1) Carregar o shape de polígonos e verificar os atributos de sua projeção: pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); proj4string(pb_poligonos_rgdal); [1] "+proj=longlat +ellps=aust_SA +no_defs" 2) Carregar o shape de pontos e verificar os atributos de sua projeção: pb_pontos_rgdal <- readOGR(dsn="aesa_pb/Sedes_Municipais", layer="Sedes_Municipais", verbose=FALSE, stringsAsFactors=FALSE); proj4string(pb_pontos_rgdal); [1] "+proj=longlat +ellps=aust_SA +no_defs" Observe que no caso deste exemplo os atributos do shape de polígonos e de pontos são os mesmos. Caso eles fossem diferentes seria necessário transformar os atributos de um dos shapes para garantir a consistência de nossas análises. 3) Plotar o mapa de municípios e adicionar os pontos das sedes municipais: plot(pb_poligonos_rgdal, axes=TRUE, border="darkgrey", lty=1, lwd=1, col="white", main="Mapa dos municipios do Estado da Paraiba (Sedes Municipais)"); plot(pb_pontos_rgdal, add=TRUE, col="red", pch=19, cex=0.1); Plotar pontos 19 Sugestões de busca em inglês: Plotar pontos 20 Seção 3 Nesta seção iremos ver alguns pacotes e funções para operar com mapas no R e no RStudio. Seção 3 21 Escolher 1 ou mais polígonos específicos Função: slot + lógica de programação Recomenda-se o uso da função slot em conjunto com algumas operações de lógica de programação. Parâmetros interessantes da função: object : Objeto com os dados do shape. name : Nome do slot que contém os dados de interesse. 1) Carregar o shapefile library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); 2) Separar os dados do shape num data frame pb_dados <- slot(object=pb_poligonos_rgdal, name="data"); print( pb_dados[1:6, 1:5] ); OBJECTID GEOCODIG_M UF Sigla Nome_Munic 0 1 2500106 25 PB Água Branca 1 2 2500205 25 PB Aguiar 2 3 2500304 25 PB Alagoa Grande 3 4 2500403 25 PB Alagoa Nova 4 5 2500502 25 PB Alagoinha 5 6 2500536 25 PB Alcantil Importante! Observe que a coluna que contém os nomes dos municípios se chama Nome_Munic e está no objeto pb_dados . 3) Criar uma lista com os nomes dos municípios desejados lista_municipios <- c("Cruz do Espírito Santo", "João Pessoa"); 4) Encontrar o indice numérico correspondente aos municípios desejados Selecionar polígonos específicos 22 Observe que neste passo usamos o nome da coluna que contém os nomes dos municípios ( Nome_Munic ) para este exemplo específico. Lembre-se de alterar esse nome para se ajustar aos seus dados! indice_numerico <- which( pb_dados$Nome_Munic %in% lista_municipios ); print(indice_numerico); [1] 66 96 5) Pegar apenas as informações dos polígonos dos municípios desejados dados_municipio <- pb_poligonos_rgdal[indice_numerico, ]; 6) Fazer o plot dos municípios desejados plot(dados_municipio, axes=TRUE, border="darkgrey", main="Poligonos dos municipios selecionados" ); Selecionar polígonos específicos 23 Sugestões de busca em inglês: "r subset polygon shapefile", "r get polygon shapefile" Sugestões de busca em português: "r como selecionar 1 polígono específico", "r como selecionar vários polígonos", "como selecionar os polígonos alguns municípios". Extra Caso queria plotar os poligonos sobre o mapa de municípios basta fazer o que segue: plot( pb_poligonos_rgdal, axes=TRUE, border="darkgrey", main="Municipios do Estado da Paraiba \n com os municipios selecionados em desta que" ); plot( dados_municipio, border="darkgray", col="red", add=TRUE ); Extra - Problemas com Encoding Caso você tenha problemas de encoding no passo 2, tente usar a função read.dbf do pacote foreign para ler o arquivo "*.dbf". Selecionar polígonos específicos 24 library("foreign"); pb_dados <- read.dbf(file="aesa_pb/Municipios/Municipios.dbf", as.is=TRUE); Extra - Plot com ggplot2 library("rgeos"); library("maptools");library("ggplot2"); library("mapproj"); names(pb_poligonos_rgdal); [1] "OBJECTID" "GEOCODIG_M" "UF" "Sigla" "Nome_Munic" [6] "Regi�.o" "Mesorregi�." "Nome_Meso" "Microrregi" "Nome_Micro" [11] "Shape_Leng" "Shape_Area" pb_poligonos_fortify <- fortify(model=pb_poligonos_rgdal, region="GEOCODIG_M"); dados_municipio_fortify <- fortify(model=dados_municipio, region="GEOCODIG_M"); ggplot() + geom_polygon(data=pb_poligonos_fortify, mapping=aes(x=long, y=lat, group=group), color="black", fill="white") + geom_polygon(data=dados_municipio_fortify, mapping=aes(x=long, y=lat, group=group), color="black", fill="red") + coord_map() + labs(y="latitude", x="longitude", title="Municipios do Estado da Paraiba") + theme(plot.title=element_text(hjust = 0.5) ); Selecionar polígonos específicos 25 ou ggplot() + geom_polygon(data=pb_poligonos_fortify, mapping=aes(x=long, y=lat, group=group), color="black", fill="white") + geom_polygon(data=dados_municipio_fortify, mapping=aes(x=long, y=lat, group=group, fill=group), color="black") + coord_map() + scale_fill_discrete( name="Municipios", labels=c("Cruz do Espirito Santo", "Joao Pes soa") ) + labs(y="latitude", x="longitude", title="Municipios do Estado da Paraiba") + theme(plot.title=element_text(hjust = 0.5) ); Selecionar polígonos específicos 26 Selecionar polígonos específicos 27 Calcular o centróide de 1 ou mais polígonos Função: coordinates Recomenda-se o uso da função coordinates do pacote sp . Parâmetros interessantes da função: obj : Objeto com os dados do shape. 1) Carregar o shapefile library("rgdal"); pb_poligonos_rgdal <- readOGR(dsn="aesa_pb/Municipios", layer="Municipios", verbose=FALSE, stringsAsFactors=FALSE); proj4string(pb_poligonos_rgdal); [1] "+proj=longlat +ellps=aust_SA +no_defs" 2) Calcular as coordenadas dos centróides dos polígonos centroide_poligonos <- coordinates(obj=pb_poligonos_rgdal); 3) Transformar as coordenadas para um objeto SpatialPoints e definir os atributos da projeção para serem os mesmos dos polígonos centroide_poligonos <- SpatialPoints(coords=centroide_poligonos, proj4string=CRS( proj4string(pb_poligonos_rgdal) ) ); proj4string(centroide_poligonos); [1] "+proj=longlat +ellps=aust_SA +no_defs" 4) Plotar o mapa de municípios adicionando os pontos dos centróides calculados anteriormente. Centróide de polígonos 28 plot(pb_poligonos_rgdal, axes=TRUE, border="darkgrey", lty=1, lwd=1, col="white", main="Mapa dos municipios do Estado da Paraiba (Centroides)"); points(centroide_poligonos, pch=19, cex=0.5, col="purple"); Sugestões de busca em inglês: "r polygon centroid". Centróide de polígonos 29 Introduction Seção 1 Conceitos básicos Tipos de shapefile Tipos de mapas Tipos de coordenadas Seção 2 Carregar shapefile Ver atributos da projeção Ver a classe do objeto Plotar mapa Plotar mapa (ggplot2) Plotar linhas Plotar pontos Seção 3 Selecionar polígonos específicos Centróide de polígonos
Compartilhar