2017-04-15 116 views
1

我有一个栅格堆栈,其中有两层,分别对应2个立面。每个图层都是Lon和Lat坐标值为1(所有缺失值为NA)的栅格,形成多边形。 RasterStack example3D栅格堆栈图

r1<-raster(xmn = 2.5, xmx = 3.3, ymn = 42, ymx = 42.5, nrows = 28, ncols = 33) 
r2<-raster(xmn = 2.5, xmx = 3.3, ymn = 42, ymx = 42.5, nrows = 28, ncols = 33) 

a<-c(421, 422, 424, 453, 454, 455, 456, 457, 485, 486, 487, 488, 489, 513, 514, 515, 516, 517, 518, 519, 546, 547, 548, 549, 550, 579, 580, 581, 582, 583, 613, 614, 615, 646, 647, 648, 649, 680, 681, 682) 
r1[a]<-1 
b<-c(514, 515, 516, 547, 548, 549, 550, 613, 614, 615, 647, 648, 649) 
r2[b]<-1 

st<-stack(r1,r2) 

有没有什么办法可以使显示的不同层上不同的海拔高度每一个多边形的3D绘图? (x = LON,Y = LAT,Z = nlayer)

我已经实现了第1层和第2层Scatter3D example的scatter3D图,但我想将它们显示为多边形,以查看整个垂直内的区域是如何重叠的。

+0

请悬停在R标志 - 它要求AA)最小和b)可重复的例子,与一个可以重新创建你目前的状态和问题使用复制,粘贴,运行。也许你想要类似'library(raster); library(plot3D); library(rgl); slogo < - stack(system.file(“external/rlogo.grd”,package =“raster”)); f < - function (x,offset = 0,add = FALSE){x <-as.matrix(x); persp3D(z = x + offset,zlim = c(0,3000),add = add,phi = 50,theta = 30 ); persp3d(z = x + offset,zlim = c(0,3000),col =“lightblue”,add = add,alpha = .75)}; f(slogo [[1]],0 * 1000,F ); F(slogo [[3]],1 * 1000,T); F(slogo [[3]],2 * 1000,T)'? – lukeA

+0

非常感谢!这正是我想要的。 – ADM

+0

@lukeA我仍然有一些问题。为什么3D绘图正在改变多边形的原始形状? (我已经附上上面的可重现示例的代码行)。刚刚用一个简单的“绘图”功能绘制了“r1”栅格和你的图,看起来多边形正在发生一些事情。 – ADM

回答

0

你可以尝试

library(raster) 
library(plot3D) 
f <- function(x, offset=0, add=FALSE) { 
    poly <- rasterToPolygons(x, dissolve = T) 
    coords <- [email protected][[1]]@Polygons[[1]]@coords 
    polygon3D(
    x=coords[,1], 
    y=coords[,2], 
    z=rep(offset,nrow(coords)), 
    xlim=lims[1:2], 
    ylim=lims[3:4], 
    zlim=lims[5:6], 
    add=add, 
    col="red", 
    theta = 0 
) 
} 
lims <- c(as(extent(st),"vector"), 0, 3000) 
f(st[[1]],0*1000,F) 
for (x in 2:nlayers(st)) 
    f(st[[x]],x*1000,T) 

enter image description here

+0

完全不是,我真正想要的是精确地绘制多边形的原样。也许我真的不明白3D阴谋如何工作,但我不明白为什么在st [[1]]的简单阴谋中,例如,多边形看起来是连续的(单元格连接良好),在“persp3d “此连接消失,st [[1]]被绘制为两个不同的区域。 – ADM

+0

也许你想玩'rasterToPolygons' - 看我的编辑。 – lukeA

+0

另请注意https://gis.stackexchange.com,它可能更适合该问题。 – lukeA