R converte o objeto sf novamente para SpatialPolygonsDataFrame


27

Como converter um objeto sf novamente em um SpatialPolygonsDataFrame?

Estou executando o R 3.4.0 e a versão 0.4.1 do sf. A documentação do sf menciona uma as_Spatialfunção, mas isso não está disponível na minha instalação (por algum motivo).


O método de coerção está disponível em sf 0.4-1, o que acontece quando você tenta chamar a função?
Jeffrey Evans

2
as (sf, "Spatial")
mdsumner 4/17/17

@Jeffrey Evans, a resposta de Kazuhito abaixo repetições o problema (e fornece um solition parcial)
Simon

Respostas:


38

eu usei

 as(nc, 'Spatial')

como parte 2 da vinheta de Edzer Pebesma indicada (role até o final da página).


vi isso. No entanto, eu descobri isso apenas recentemente e senti o desejo de colocá-lo em uma resposta adequada ao ver esta pergunta;)
andschar

E é importante que a resposta aceita não seja esquecida pelos futuros leitores.
Kazuhito

11
Para que isso realmente funciona como um SPDF, eu precisava fazer algo como: tmp <-as(nc, 'Spatial')e, em seguida tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID")), em seguida,row.names(tmp) <- tmpid
Simon

11
o que significa 'realmente funciona como um SPDF'? Não vejo nenhuma desvantagem criada pela conversão.
andschar

8

Eu tive que usar sf:::as_Spatial()como solução alternativa.

library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"))

# sf -> sp
nc_sp <- as_Spatial(nc$geom)      # Error: could not find function "as_Spatial"

nc_sp <- sf:::as_Spatial(nc$geom) # This works

library(sp)
plot(nc_sp)

Existe uma maneira de manter o quadro de dados intacto?
Simon

Executando as(sf, "Spatial")por @mdsumner, confirmo que produz SpatialPolygonsDataFrame, o que é melhor para suas necessidades. Parece que as_Spatial()leva apenas sfc (isto é, geometria).
Kazuhito 4/17

11
Esta função é um método e deve ser chamada usando as (). Não é exportado como um objeto de função e é por isso que, para chamá-lo diretamente, você precisa de ":::".
Jeffrey Evans
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.