R:对SpatialPoints对象进行子集和绘图

4

看起来这个问题以不同的形式被问了很多次,但我找不到正确的解决方案。我有一个包含几个多边形的SpatialPoint对象,想要使用“ID”插槽对其中的一个多边形进行子集和绘图。

使用这个问题中的示例:

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)

我可以提取SpatialPolygons对象的ID。
SpP@polygons[[1]]@ID # one ID
sapply(SpP@polygons, function(x) x@ID) # all IDs

但我该如何使用这些信息对单个多边形进行子集和绘制呢?非常感谢任何帮助,提前致谢!
1个回答

2

可以使用[]进行子集筛选。请参阅SpatialPolygons类帮助文档(?'SpatialPolygons-class'):

Methods [...]:
[ : select subset of (sets of) polygons; NAs are not permitted in the row index"

所以,使用您的数据:
library(sp)

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)

# plot single polygon
par(mfrow=c(3,1))
plot(SpP[1])
plot(SpP[3])

# or using IDs: retrieve list of all IDs
IDs = sapply(SpP@polygons, function(x) x@ID)

# plot polygon with specific ID
plot(SpP[which(IDs == 's2')])

我现在感觉有点傻 :-/ 谢谢你花时间解释显而易见的事情,我一定是哪儿出了问题! - Ratnanil
哈,你不是唯一一个...在我找到老古董[1]之前,我也尝试了SpS[[1]]、subset和SpS$s1等方法。 - koekenbakker
2
甚至更简单的是, plot(SpP['s2',]) - Edzer Pebesma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接