在 R 中将 SpatialCollections 转换为 SpatialPolygonsDataFrame
Convert SpatialCollections to SpatialPolygonsDataFrame in R
我正在努力将 class 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 是一种容器格式,可以 "hold SpatialPoints, SpatialLines, SpatialRings, and SpatialPolygons (without attributes)"。如果您需要 SpatialPolygonsDataFrame 的数据框部分(GIS 语言中的 "attribute table"),您将不得不以某种方式解决这个问题。另一方面,如果您只对空间信息(没有附加数据的多边形)感兴趣,请尝试以下操作:
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")
我正在努力将 class 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 是一种容器格式,可以 "hold SpatialPoints, SpatialLines, SpatialRings, and SpatialPolygons (without attributes)"。如果您需要 SpatialPolygonsDataFrame 的数据框部分(GIS 语言中的 "attribute table"),您将不得不以某种方式解决这个问题。另一方面,如果您只对空间信息(没有附加数据的多边形)感兴趣,请尝试以下操作:
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")