我正在努力将类SpatialCollections
的对象转换为SpatialPolygonsDataFrame
对象。我的输入文件是shapefile和SpatialPolygonsDataFrame
对象。他们可以访问here。
我做了两个对象的交集:
SPDF_A <- shapefile("SPDF_A")
SPDF_B <- shapefile("SPDF_B")
intersection <- gIntersection(gBuffer(SPDF_A, width=0), gBuffer(SPDF_B, width=0))
结果是:
> intersection
class : SpatialCollections
设置gBuffer(... , byid=T)
或gBuffer(... , byid=F)
似乎没有任何区别。
我使用gIntersection
和gBuffer(... , width=0)
而不是intersect
以避免几何问题(Self-intersection
)。这是更大循环的一部分。我需要将交集作为SpatialPolygonsDataFrame
,因为它将在后续步骤中保存为shp文件。
writeOGR(intersection, ".", layer=paste0("Int_SPDF_A-SPDF_B"), driver="ESRI Shapefile")
这不可能来自SpatialCollections
对象。为了将其转换为SpatialPolygonsDataFrame
,我试过:
intersection <- as(intersection ,"SpatialPolygonsDataFrame")
intersection <- SpatialPolygonsDataFrame(intersection)
intersection <- readOGR(intersection, layer = "intersection")
什么都行不通。有人有解决方案吗?非常感谢!
首先,根据the documentation,SpatialCollections是一种容器格式,可以“容纳SpatialPoints,SpatialLines,SpatialRings和SpatialPolygons(没有属性)”。如果您需要SpatialPolygonsDataFrame的数据框部分(GIS语言中的“属性表”),您将不得不以某种方式解决这个问题。另一方面,如果您只对空间信息(没有附加数据的多边形)感兴趣,请尝试以下方法:
str(intersection, max.level = 3)
表明@polyobj只是一个SpatialPolygons对象。于是
mySpoly <- intersection@polyobj
应该做的伎俩和
class(mySpoly)
表明我们现在确实有一个SpatialPolygons。
您需要在导出之前将其转换为SpatialPolygonsDataFrame:
mySpolyData <- as(mySpoly, "SpatialPolygonsDataFrame")
writeOGR(mySpolyData, ".", layer=paste0("Int_SPDF_A-SPDF_B"), driver="ESRI Shapefile")