Como exportar um conjunto de dados com "SpatialPolygonsDataFrame" como um arquivo de forma

12

Como exportar conjuntos de dados espaciais em R, como tornadosconjunto de dados no GISToolspacote, como um arquivo de forma com a mesma referência espacial exata e os valores exatos?

library(GISTools)

data(tornados)

Desejado:

  • "SpatialPolygonsDataFrame" para "shapefile"
  • "(Forçado) SpatialPointsDataFrame" para "shapefile"
  • "SpatialPointsDataFrame (não forçado)" para "shapefile"
  • "SpatialLinesDataFrame" para "shapefile".
Mokhless
fonte
1
rgdal::writeOGR
Hrbrmstr # 7/15
O que significa Forçado aqui?
Mdsumner
Não sei o que significa "Forçado", mas achei na documentação "GISTools" sob o tipo de dados tornado.
Mokhless

Respostas:

16

A resposta de Wesley está correta. Portanto, para exportar especificamente os dados do tornado, você precisa:

library(GISTools)
library(rgdal)
data(tornados)

writeOGR(obj=torn, dsn="tempdir", layer="torn", driver="ESRI Shapefile") # this is in geographical projection

writeOGR(obj=torn2, dsn="tempdir", layer="torn2", driver="ESRI Shapefile") # this is in equal area projection

Para R, esses dois conjuntos de dados são simplesmente tratados como SpatialPointsDataFrames.

> class(torn)
[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"

> class(torn2)
[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"
cengel
fonte
8

Observe que também há uma função no maptoolspacote para fazer isso, a saber writeSpatialShape:

library(maptools)
writeSpatialShape(torn, "torn").

Veja ?writeSpatialShapepara opções.

MichaelChirico
fonte
2
Esta função não retém as informações do proj4string.
Jeffrey Evans
@ JeffreyEvans: então existe uma maneira de passar isso? talvez reatribua-o no pacote GIS para o qual está indo.
val
uso apenas @valwriteOGR
MichaelChirico
@ MichaelChirico: thx, mas foi aí que eu comecei e o problema é que ele trunca para um erro ... campos duplicados. Existem posts sobre isso.
val
6

Você deve olhar para o pacote rgdal , especificamente a writeOGRfunção.

Por exemplo, baixei primeiro os arquivos de forma "Estados e províncias" de resolução de 110m da Terra Natural , descompactando-os para ~/scratch/ne_110m_admin_1_states_provinces. Eu os li no R via:

library(rgdal)
setwd("~/scratch")
states <- readOGR(dsn="ne_110m_admin_1_states_provinces",
    layer="ne_110m_admin_1_states_provinces")

Neste ponto, o objeto statesé a SpatialPolygonsDataFrame. Agora eu crio um novo diretório (" tempdir") e salve os shapefiles lá:

dir.create("tempdir")
writeOGR(obj=states, dsn="tempdir", layer="states", driver="ESRI Shapefile")

As formas agora são salvas no diretório ~/scratch/tempdir, como arquivos states.shp, etc. Você pode fazer o mesmo com a SpatialPointsDataFrame, apenas veja o primeiro exemplo na documentação da writeOGRfunção.

Wesley
fonte
4
library(raster)
shapefile(tornados, filename='path/to/file.shp')

Verifique se você tem (ou se deu) permissões para gravar no diretório.

Momchill
fonte