R przekonwertuj obiekt sf z powrotem na SpatialPolygonsDataFrame

27

Jak przekonwertować obiekt sf z powrotem na SpatialPolygonsDataFrame?

Korzystam z wersji R 3.4.0 i sf w wersji 0.4.1. Dokumentacja sf wspomina o as_Spatialfunkcji, ale nie jest dostępna w mojej instalacji (z jakiegoś powodu).

Szymon, Szymek
źródło
Metoda koercji jest dostępna na sf 0.4-1, co się dzieje, gdy próbujesz wywołać funkcję?
Jeffrey Evans
2
as (sf, „Spatial”)
mdsumner
@Jeffrey Evans, poniższa odpowiedź Kazuhito powiela problem (i zapewnia częściowe rozwiązanie)
Simon

Odpowiedzi:

38

użyłem

 as(nc, 'Spatial')

jako część 2 wskazanej przez Edzera Pebesma winiety (Przewiń na dół strony).

andschar
źródło
widziałem to. Jednak odkryłem to dopiero niedawno i poczułem
potrzebę
I ważne jest, aby przyjęta odpowiedź nie została przeoczona przez przyszłych czytelników.
Kazuhito,
1
Aby to naprawdę działało jak SPDF, musiałem zrobić coś takiego: tmp <-as(nc, 'Spatial')a tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))potemrow.names(tmp) <- tmpid
Simon
1
co znaczy „naprawdę działa jak SPDF”? Nie widzę żadnych wad wynikających z konwersji.
andschar
8

Musiałem użyć sf:::as_Spatial()jako obejścia.

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)
Kazuhito
źródło
Czy istnieje sposób na zachowanie nietkniętej ramki danych?
Simon
Uruchomione as(sf, "Spatial")przez @mdsumner, potwierdzam, że produkuje SpatialPolygonsDataFrame, co jest lepsze dla twoich wymagań. Wygląda na as_Spatial()to, że zajmuje tylko sfc (tj. Geometrię).
Kazuhito
1
Ta funkcja jest metodą i należy ją wywoływać za pomocą as (). Nie jest eksportowany jako obiekt funkcji, dlatego aby wywołać go bezpośrednio, potrzebujesz „:::”.
Jeffrey Evans