首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中将SpatialCollections转换为SpatialPolygonsDataFrame

在R中将SpatialCollections转换为SpatialPolygonsDataFrame
EN

Stack Overflow用户
提问于 2019-03-10 01:58:16
回答 1查看 816关注 0票数 0

我很难将类SpatialCollections的对象转换为SpatialPolygonsDataFrame对象。我的输入文件是shapefile和SpatialPolygonsDataFrame对象。它们可以访问这里

我对这两个对象做了一个交集:

代码语言:javascript
复制
SPDF_A <- shapefile("SPDF_A")
SPDF_B <- shapefile("SPDF_B")
intersection <- gIntersection(gBuffer(SPDF_A, width=0), gBuffer(SPDF_B, width=0))

结果是:

代码语言:javascript
复制
> intersection
class       : SpatialCollections 

设置gBuffer(... , byid=T)gBuffer(... , byid=F)似乎没有什么区别。

为了避免几何问题( gIntersection )和几何问题(Self-intersection),我使用了intersectintersect接口。这是更大的循环的一部分。我需要将交集作为SpatialPolygonsDataFrame,因为在下面的步骤中它将被保存为shp文件。

代码语言:javascript
复制
writeOGR(intersection, ".", layer=paste0("Int_SPDF_A-SPDF_B"), driver="ESRI Shapefile")

这在SpatialCollections对象中是不可能的。为了将其转换为SpatialPolygonsDataFrame,我尝试了:

代码语言:javascript
复制
intersection <- as(intersection ,"SpatialPolygonsDataFrame")
intersection <- SpatialPolygonsDataFrame(intersection)
intersection <- readOGR(intersection, layer = "intersection")

毫无办法。有谁有解决办法吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-11 11:12:19

首先,根据文献资料的说法,SpatialCollections是一种容器格式,可以“容纳SpatialPoints、SpatialLines、SpatialRings和SpatialPolygons (没有属性的)”。如果您需要SpatialPolygonsDataFrame的数据框架部分( GIS中的“属性表”),您将不得不设法解决这个问题。另一方面,如果您只对空间信息(没有附加数据的多边形)感兴趣,请尝试如下:

代码语言:javascript
复制
str(intersection, max.level = 3)   

建议@polyobj只是一个SpatialPolygons对象。因此

代码语言:javascript
复制
mySpoly <- intersection@polyobj

应该做点什么然后

代码语言:javascript
复制
class(mySpoly)

表明我们现在确实有了一个SpatialPolygons。

在导出之前,需要将其转换为SpatialPolygonsDataFrame:

代码语言:javascript
复制
mySpolyData <- as(mySpoly, "SpatialPolygonsDataFrame")
writeOGR(mySpolyData, ".", layer=paste0("Int_SPDF_A-SPDF_B"), driver="ESRI Shapefile")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55083784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档