R mengonversi objek sf kembali ke SpatialPolygonsDataFrame


27

Bagaimana cara mengubah objek sf kembali ke SpatialPolygonsDataFrame?

Saya menjalankan R 3.4.0 dan sf versi 0.4.1. The dokumentasi sf menyebutkan sebuah as_Spatialfungsi, tapi ini tidak tersedia di saya install (untuk beberapa alasan).


Metode koersi tersedia pada sf 0.4-1, apa yang terjadi ketika Anda mencoba memanggil fungsi?
Jeffrey Evans

2
as (sf, "Spatial")
mdsumner

@ Jeffrey Evans, jawaban Kazuhito di bawah ini mereplikasi masalah (dan memberikan solisi parsial)
Simon

Jawaban:


38

Saya menggunakan

 as(nc, 'Spatial')

sebagai bagian 2 dari sketsa yang ditunjukkan oleh Edzer Pebesma (Gulir ke bagian bawah halaman).


melihatnya. Namun saya menemukan ini hanya baru-baru ini dan saya merasakan dorongan untuk memasukkannya ke dalam jawaban yang tepat ketika melihat pertanyaan ini;)
andschar

Dan penting bahwa jawaban yang diterima tidak akan diabaikan oleh pembaca di masa depan.
Kazuhito

1
Untuk ini untuk benar-benar bekerja seperti SPDF, saya perlu melakukan sesuatu seperti: tmp <-as(nc, 'Spatial'), maka tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))kemudianrow.names(tmp) <- tmpid
Simon

1
apa arti 'benar-benar berfungsi seperti SPDF'? Saya melihat tidak ada kerugian yang dibuat oleh konversi.
andschar

8

Saya harus menggunakan sf:::as_Spatial()solusi.

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)

Apakah ada cara untuk menjaga frame data tetap utuh?
Simon

Dijalankan as(sf, "Spatial")oleh @mdsumner, saya mengonfirmasi ini menghasilkan SpatialPolygonsDataFrame, yang lebih baik untuk kebutuhan Anda. Tampaknya hanya as_Spatial()membutuhkan sfc (yaitu geometri).
Kazuhito

1
Fungsi ini adalah metode dan harus dipanggil menggunakan as (). Itu tidak diekspor sebagai objek fungsi yang mengapa, untuk memanggilnya langsung, Anda perlu ":::".
Jeffrey Evans
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.