R将SF对象转换回SpatialPolygonsDataFrame


27

如何将sf对象转换回SpatialPolygonsDataFrame?

我正在运行R 3.4.0和SF版本0.4.1。该SF文件中提到的as_Spatial功能,但这不是提供我的安装(出于某种原因)。


强制方法在0.4-1 SF可用,当您尝试调用该函数时会发生什么?
杰弗里·埃文斯

2
as(sf,“ Spatial”)
mdsumner's

@Jeffrey Evans,Kazuhito在下面的回答重复了这个问题(并提供了部分解决)
Simon,

Answers:


38

我用了

 as(nc, 'Spatial')

如Edzer Pebesma指出的小插图第2部分(滚动到页面底部)。


看到了。但是我只是在最近才发现这个问题,当我看到这个问题时,我感到有将其放入一个正确答案的
渴望

而且重要的是,将来的读者也不会忽略已接受的答案。
Kazuhito

1
为了使它真正像SPDF一样工作,我需要执行以下操作:tmp <-as(nc, 'Spatial')tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))然后row.names(tmp) <- tmpid
Simon,

1
“像SPDF一样真正工作”是什么意思?我看不到转换带来的不利影响。
andschar

8

我不得不使用sf:::as_Spatial()作为解决方法。

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)

有没有办法使数据框保持完整?
西蒙(Simon)

as(sf, "Spatial")通过@mdsumner 运行,我确认它会生成SpatialPolygonsDataFrame,它可以更好地满足您的需求。似乎只as_Spatial()需要sfc(即几何)。
Kazuhito

1
该函数是一种方法,可以使用as()进行调用。它没有导出为功能对象,因此,要直接调用它,您需要“ :::”。
杰弗里·埃文斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.