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


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


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)

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.