[R-br] Como Salvar Shapefile
Pedro R. Andrade
pedro.andrade em inpe.br
Qua Jan 16 16:56:54 -02 2019
Prezado Yury,
todo shapefile precisa de uma tabela de atributos, mesmo que voce nao
tenha uma. Por isto o writeOGR precisa de um Spatial*DataFrame. Para
conseguir salvar, basta criar um SpatialPolygonsDataFrame a partir do
seu SpatialPolygons. Por exemplo:
require(rgdal)
require(sp)
p <-
SpatialPolygons(list(Polygons(list(Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))),
"2"), Polygons(list(Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))), "3")))
# o codigo abaixo vai dar o mesmo erro que voce teve:
writeOGR(p,dsn = ".", layer = "abc", driver = 'ESRI Shapefile',
overwrite_layer = TRUE)
# transforma o SpatialPolygons em um SpatialPolygonsDataFrame
p.df <- data.frame(value=1:length(p)) # cria um atributo fake
rownames(p.df)<-getSpPPolygonsIDSlots(p)
p <- SpatialPolygonsDataFrame(p, p.df)
# agora funciona (mesmo codigo pra salvar acima)
writeOGR(p,dsn = ".", layer = "abc", driver = 'ESRI Shapefile',
overwrite_layer = TRUE)
Agora, caso o seu dado seja muito grande e o rgdal nao funcione, melhor
migrar para o sf que é muito mais rapido e eficiente em termos de memória.
Um abraço,
Pedro
Em 16/01/2019 16:22, Yury Duarte por (R-br) escreveu:
> Testei o efeito da função gSimplify(), mas acho que não vou poder
> utiliza-la.
> Mesmo passando um valor baixo no parâmetro 'tol', a quantidade de
> detalhes perdida nos contornos dos meus polígonos é grande.
> Acredito que eliminar polígonos concêntricos possa ajudar a diminuir o
> tamanho do objeto gerado pelo script (ainda não sei como fazer essa
> verificação e eliminação), mas o número de casos em que isso ocorre não
> está sendo tão grande assim.
>
> Yury Duarte
> Engenheiro Agrônomo - ESALQ/USP
>
>
> Em qua, 16 de jan de 2019 às 13:22, Elias T. Krainski
> <eliaskrainski em yahoo.com.br <mailto:eliaskrainski em yahoo.com.br>> escreveu:
>
> Não seria o caso de reduzir a resolução do shapefile? Já teve
> situaçoes que usei gSimplify() e escolhi parametros que se mostraram
> adequados ao meu objetivo.
>
> Elias T. Krainski
>
>
> Em quarta-feira, 16 de janeiro de 2019 12:08:04 BRST, Yury Duarte
> <yurynepomuceno em gmail.com <mailto:yurynepomuceno em gmail.com>> escreveu:
>
>
> Bom dia Elias, como vai?
>
> Interessante sua solução!
> Não estou acostumado a salvar minhas saídas no formato .RData. Irei
> testar esse formato nos casos onde irei trabalhar os dados/analises
> apenas em ambiente R.
> Aparentemente, esse formato economiza bastante espaço em disco.
> Entretanto, para essa situação em especial, eu realmente tenho a
> necessidade de salvar as saídas em formato .shp, pois tenho que
> aplicar o resultado do script em outros ambientes (nos SIGs em geral
> e no Google Earth).
>
> Caso tenha(m) mais alguma sugestão, ficarei feliz em testar.
>
> Mais uma vez, agradeço pela disponibilidade e apoio!
>
> Att
>
> Yury Duarte
> Engenheiro Agrônomo - ESALQ/USP
>
>
> Em qua, 16 de jan de 2019 às 11:24, Elias T. Krainski
> <eliaskrainski em yahoo.com.br <mailto:eliaskrainski em yahoo.com.br>>
> escreveu:
>
> se você for usar apenas em ambiente R, a melhor opção é usar
> save(...). Frequentemente uso com compress='xz'.
>
> Elias T. Krainski
>
>
> Em terça-feira, 15 de janeiro de 2019 11:30:21 BRST, Yury Duarte
> por (R-br) <r-br em listas.c3sl.ufpr.br
> <mailto:r-br em listas.c3sl.ufpr.br>> escreveu:
>
>
> Bom dia colegas listeiros!
>
> Ultimamente venho tentando manusear arquivos espaciais
> utilizando o R.
> Em alguns casos, objetos do tipo 'large SpatialPolygons' são
> gerados dentro do código. Quando isso ocorre (acredito que seja
> algo que acontece por padrão, devido a grande quantidade de
> informações armazenadas no objeto), a função writeOGR, que
> utilizo para salvar os shapefiles, quebra, por só tratar de
> objetos do tipo 'Spatial' e não os 'large Spatial'.
> Sendo assim, gostaria de saber se existe a possibilidade de
> salvar um shapefile a partir de um objeto do tipo 'large
> Spatial' ou ainda se existe a possibilidade de transformar esse
> num objeto do tipo SpatialPolygonsDataFrame, para que a função
> writeOGR possa funcionar normalmente.
>
> Segue código desenvolvido seguido do erro gerado.
> Desde já, agradeço pela ajuda de todos!
>
> rodar_bibliotecas = function(necessarias_para_o_projeto){
> if(necessarias_para_o_projeto){
> library(rgrass7)
> library(spatstat)
> library(maptools)
> library(shapefiles)
> library(foreign)
> library(magrittr)
> library(formattable)
> library(e1071)
> library(rlang)
> library(rgdal)
> library(rgeos)
> library(raster)
> library(sp)
> library(sf)
> library(RcppCNPy)
> library(deldir)
> library(dismo)
> library(dplyr)
> library(ggplot2)
> library(gstat)
> library(tidyverse)
> library(smoothr)
> library(viridisLite)
> }
> return('Ok')
> }
>
> rodar_bibliotecas(TRUE)
>
> raiz = '/home/yury/pesquisa/arquivos/areas/'
> clientes = dir(raiz)
>
> for (cliente in 1:length(clientes)) {
> analises = dir(paste0(raiz, clientes[cliente]))
> q = list()
> for (analise in 1:length(analises)) {
> shapefile_contorno = readOGR(paste0(raiz,
> clientes[cliente], '/', analises[analise], '/', 'vetores.shp'))
> shapefile_contorno$id = 1
> dissolvido = unionSpatialPolygons(shapefile_contorno, IDs =
> shapefile_contorno$id)
> #plot(dissolvido)
> q[analise] = dissolvido
> }
> fim = q[[1]]
> for (x in 2:length(q)){
> fim = bind(fim, q[[x]])
> }
> plot(fim)
>
> path_to_save = paste0(raiz, clientes[cliente])
> writeOGR(fim,
> dsn = path_to_save,
> layer = paste0('contorno_', clientes[cliente]),
> driver = 'ESRI Shapefile',
> overwrite_layer = TRUE)
>
> }
>
> Error in writeOGR(fim, dsn = path_to_save, layer =
> paste0("contorno_", : obj must be a SpatialPointsDataFrame,
> SpatialLinesDataFrame or SpatialPolygonsDataFrame
>
> Yury Duarte
> Engenheiro Agrônomo - ESALQ/USP
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br <mailto:R-br em listas.c3sl.ufpr.br>
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e
> forne�a c�digo m�nimo reproduz�vel.
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
>
--
Pedro R. Andrade, Dr.
Earth System Science Center (CCST)
National Institute for Space Research (INPE)
Sao Jose dos Campos, Brazil
Mais detalhes sobre a lista de discussão R-br