删除 SpatialPointsDataFrame 中的第三维
Removing the third dimension in SpatialPointsDataFrame
我有一个具有 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
函数需要一个二维 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
我不想从头开始重建我的形状。
@rcs 答案更好,但这也有效:
ss <- SpatialPoints(coordinates(ss)[,-3])
如果您有 SpatialPointsDataFrame:
ss <- SpatialPointsDataFrame(coordinates(ss)[,-3], ss@data,proj4string=CRS(proj4string(ss)))
只需覆盖S4对象的coords
槽:
ss@coords <- ss@coords[, 1:2]
我不知道你的 SpatialPoints
对象是如何创建的,但是如果你使用 rgdal::readOGR
则有一个 pointDropZ
参数(默认 FALSE
)
我有一个具有 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
函数需要一个二维 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
我不想从头开始重建我的形状。
@rcs 答案更好,但这也有效:
ss <- SpatialPoints(coordinates(ss)[,-3])
如果您有 SpatialPointsDataFrame:
ss <- SpatialPointsDataFrame(coordinates(ss)[,-3], ss@data,proj4string=CRS(proj4string(ss)))
只需覆盖S4对象的coords
槽:
ss@coords <- ss@coords[, 1:2]
我不知道你的 SpatialPoints
对象是如何创建的,但是如果你使用 rgdal::readOGR
则有一个 pointDropZ
参数(默认 FALSE
)