2

我的目标是从 x、y 和 z 坐标的数据框创建一个 3 维多面体。我想要类似于SpatialPolygons对象的值,但欢迎提出其他建议。然后我想将该gBuffer功能扩展到 3D 多面体。gBuffer坚持从原始几何体到新几何体的距离,是我最终目标的理想特征。

下面的代码说明了 2D 中的情况:

library(sp)
library(rgeos)
#Create a SpatialPolygons object from set of x-y coordinates
xy2SP <- function(xy, ID=NULL) {
if(is.null(ID)) ID <- sample(1e12, size=1)
SpatialPolygons(list(Polygons(list(Polygon(xy)), ID=ID)),
                proj4string=CRS("+proj=merc"))
}
xy <- data.frame(x=c(0,2,3,1,0), y=c(0,0,2,2,0))
plot(xy)

sp1 <- xy2SP(xy)
sp2 <- gBuffer(sp1, width=.2)
sp3 <- gBuffer(sp1, width=.4)
sp4 <- gBuffer(sp1, width=.6)

plot(sp1,xlim=c(-1,4),ylim=c(-1,3))
plot(sp2,add=T,border=2)
plot(sp3,add=T,border=2)
plot(sp4,add=T,border=2)

我的第一次尝试是使用xy2SP3 个坐标而不是 2 个坐标的函数,但很快就被挫败了。在任何情况下,都有一个表示 3D 多面体顶点的数据框示例。

library(scatterplot3d)
xyz <- data.frame(x=c(0,2,3,1,0,2,3,1),y=c(0,0,2,2,0,0,2,2),z=c(0,0,0,0,2,2,2,2))
sp<-scatterplot3d(xyz,pch=16)   
sp1 <- xy2SP(xyz)
4

0 回答 0