R riconvertire l'oggetto sf in SpatialPolygonsDataFrame


27

Come riconvertire un oggetto sf in SpatialPolygonsDataFrame?

Sto eseguendo R 3.4.0 e sf versione 0.4.1. La documentazione di sf menziona una as_Spatialfunzione, ma questa non è disponibile nella mia installazione (per qualche motivo).


Il metodo di conversione è disponibile in sf 0.4-1, cosa succede quando si tenta di chiamare la funzione?
Jeffrey Evans,

2
as (sf, "Spatial")
mdsumner

@Jeffrey Evans, la risposta di Kazuhito di seguito replica il problema (e fornisce una soluzione parziale)
Simon

Risposte:


38

ero solito

 as(nc, 'Spatial')

come indicato nella parte 2 della vignetta di Edzer Pebesma (scorrere fino alla fine della pagina).


l'ho visto. Tuttavia, l'ho capito solo di recente e ho sentito l'impulso di metterlo in una risposta adeguata quando vedevo questa domanda;)
eschar

Ed è importante che la risposta accettata non venga trascurata dai futuri lettori.
Kazuhito,

1
Per questo lavoro veramente come uno SPDF, avevo bisogno di fare qualcosa di simile: tmp <-as(nc, 'Spatial')allora tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))poirow.names(tmp) <- tmpid
Simon

1
cosa significa "lavorare veramente come un SPDF"? Non vedo alcuno svantaggio creato dalla conversione.
Andschar,

8

Ho dovuto usare sf:::as_Spatial()come soluzione 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)

C'è un modo per mantenere intatto il frame di dati?
Simon,

Esecuzione as(sf, "Spatial")da @mdsumner, confermo che produce SpatialPolygonsDataFrame, che è meglio per il vostro requisito. Sembra as_Spatial()prendere solo sfc (cioè la geometria).
Kazuhito,

1
Questa funzione è un metodo e deve essere chiamata usando as (). Non viene esportato come oggetto funzione, motivo per cui, per chiamarlo direttamente, è necessario ":::".
Jeffrey Evans,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.