Como Salvar Shapefile

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

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@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@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.

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@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@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@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.

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@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@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@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@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.

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@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@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@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@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@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.

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@yahoo.com.br <mailto:eliaskrainski@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@gmail.com <mailto:yurynepomuceno@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@yahoo.com.br <mailto:eliaskrainski@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@listas.c3sl.ufpr.br <mailto:r-br@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@listas.c3sl.ufpr.br <mailto:R-br@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@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

Bom dia, Pedro e colegas listeiros. Gostaria de agradecer pela elucidação do problema, Pedro! Não havia percebido que a falta de valor para o atributo dos polígonos estava ausente/era necessário para a função desempenhar corretamente. Agora, com os valores fake inseridos no objeto, mesmo para os que tem grande número de polígonos, o 'rgdal' está performando bem em grava-los, mas farei uns testes utilizando a lib 'sf'. Mais uma vez, agradeço pela ajuda dos colegas! Att Yury Duarte Engenheiro Agrônomo - ESALQ/USP Em qua, 16 de jan de 2019 às 16:57, Pedro R. Andrade por (R-br) < r-br@listas.c3sl.ufpr.br> escreveu:
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@yahoo.com.br <mailto:eliaskrainski@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@gmail.com <mailto:yurynepomuceno@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@yahoo.com.br <mailto:eliaskrainski@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@listas.c3sl.ufpr.br <mailto:r-br@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@listas.c3sl.ufpr.br <mailto:R-br@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@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 _______________________________________________ R-br mailing list R-br@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 fornea cdigo mnimo reproduzvel.
participantes (4)
-
Elias T. Krainski
-
Pedro R. Andrade
-
sznelwar@uol.com.br
-
Yury Duarte