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).
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 „:::”.
Odpowiedzi:
użyłem
jako część 2 wskazanej przez Edzera Pebesma winiety (Przewiń na dół strony).
źródło
tmp <-as(nc, 'Spatial')
atmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))
potemrow.names(tmp) <- tmpid
Musiałem użyć
sf:::as_Spatial()
jako obejścia.źródło
as(sf, "Spatial")
przez @mdsumner, potwierdzam, że produkuje SpatialPolygonsDataFrame, co jest lepsze dla twoich wymagań. Wygląda naas_Spatial()
to, że zajmuje tylko sfc (tj. Geometrię).