我很难将类SpatialCollections的对象转换为SpatialPolygonsDataFrame对象。我的输入文件是shapefile和SpatialPolygonsDataFrame对象。它们可以访问这里。
我对这两个对象做了一个交集:
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 )和几何问题(Self-intersection),我使用了intersect的intersect接口。这是更大的循环的一部分。我需要将交集作为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")毫无办法。有谁有解决办法吗?非常感谢!
发布于 2019-03-11 11:12:19
首先,根据文献资料的说法,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")https://stackoverflow.com/questions/55083784
复制相似问题