在R中将SpatialCollections转换为SpatialPolygonsDataFrame

问题描述 投票:-1回答:1

我正在努力将类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)似乎没有任何区别。

我使用gIntersectiongBuffer(... , 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")

什么都行不通。有人有解决方案吗?非常感谢!

r intersection shapefile
1个回答
1
投票

首先,根据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")
© www.soinside.com 2019 - 2024. All rights reserved.