删除SpatialPointsDataFrame中的第三个维度

时间:2016-12-19 16:59:06

标签: r raster sp

我有一个包含3个维度的SpatialPoints对象:

x <- c(1,1,1,2,2,2,3,3,3)
y <- c(1,2,3,1,2,3,1,2,3)
z <- c(1,3,5,2,1,2,1,2,3)
xyz <- cbind(x,y,z)
ss <- SpatialPoints(xyz)
dimensions(ss)

raster对象:

rr <- raster(matrix(round(runif(49,0,10)),7,7), xmn=0, xmx=4, ymn=0, ymx=4, crs=NA, template=NULL)

我想使用SpatialPoints对象提取栅格值:

 extract(rr,ss)
#Error in .xyValues(x, coordinates(y), ..., df = df) : 
#  xy should have 2 columns only.
#Found these dimensions: 9, 3

如果需要,您可以将数据可视化:

plot(rr)
plot(ss, add=T)

所以问题是栅格包的extract函数需要2维SpatialPoints对象。我的(在我的真实数据中)3维。有没有办法放弃我的点形状的第三维?我试过了:

coordinates(ss) <- coordinates(ss)[,-3]
#Error in `coordinates<-`(`*tmp*`, value = c(1, 1, 1, 2, 2, 2, 3, 3, 3,  : 
#  setting coordinates cannot be done on Spatial objects, where they have #already been set

我不想从头开始重建自己的形状。

2 个答案:

答案 0 :(得分:2)

只需覆盖S4对象的coords插槽:

ss@coords <- ss@coords[, 1:2]

我不知道您的SpatialPoints对象是如何创建的,但如果您使用rgdal::readOGR,则会有pointDropZ个参数(默认为FALSE

答案 1 :(得分:0)

@rcs答案更好,但这也有效:

ss <- SpatialPoints(coordinates(ss)[,-3])   

如果您有SpatialPointsDataFrame:

ss <- SpatialPointsDataFrame(coordinates(ss)[,-3], ss@data,proj4string=CRS(proj4string(ss)))