R chuyển đổi đối tượng sf trở lại SpatialPolygonsDataFrame


27

Làm cách nào để chuyển đổi một đối tượng sf trở lại SpatialPolygonsDataFrame?

Tôi đang chạy R 3.4.0 và sf phiên bản 0.4.1. Các tài liệu sf đề cập đến một as_Spatialchức năng, nhưng điều này không có sẵn trong cài đặt của tôi (vì một lý do).


Phương pháp coersion có sẵn ở sf 0,4-1, điều gì xảy ra khi bạn cố gắng gọi hàm?
Jeffrey Evans

2
như (sf, "Spatial")
mdsumner

@Jeffrey Evans, câu trả lời của Kazuhito dưới đây sao chép vấn đề (và cung cấp một phần giải quyết)
Simon

Câu trả lời:


38

Tôi đã sử dụng

 as(nc, 'Spatial')

như phần 2 của họa tiết do Edzer Pebesma chỉ định (Di chuyển xuống cuối trang).


đã thấy nó. Tuy nhiên tôi mới chỉ tìm ra điều này gần đây và tôi cảm thấy thôi thúc đưa nó vào một câu trả lời thích hợp khi nhìn thấy câu hỏi này;)
andschar

Và điều quan trọng là câu trả lời được chấp nhận sẽ không bị bỏ qua bởi các độc giả trong tương lai.
Kazuhito

1
Để điều này thực sự hoạt động như một SPDF, tôi cần phải làm một cái gì đó như: tmp <-as(nc, 'Spatial')sau tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))đórow.names(tmp) <- tmpid
Simon

1
"thực sự hoạt động như SPDF" nghĩa là gì? Tôi thấy không có bất lợi được tạo ra bởi việc chuyển đổi.
andschar

8

Tôi đã phải sử dụng sf:::as_Spatial()như một cách giải quyết.

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ó cách nào để giữ nguyên khung dữ liệu không?
Simon

Được điều hành as(sf, "Spatial")bởi @mdsumner, tôi xác nhận nó tạo ra SpatialPolygonsDataFrame, tốt hơn cho yêu cầu của bạn. Có vẻ như chỉ as_Spatial()mất sfc (tức là hình học).
Kazuhito

1
Hàm này là một phương thức và được gọi là as (). Nó không được xuất dưới dạng đối tượng hàm, đó là lý do tại sao, để gọi nó trực tiếp, bạn cần ":::".
Jeffrey Evans
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.