使用R在3D基本地图上添加数据

时间:2016-08-09 18:56:49

标签: r 3d

我正在尝试在R中绘制一个3D空间时间立方体,我希望有一个底图。 我正在使用rgl库。我知道如何使用x,y和z绘制我的数据,其中z是时间变量。我还设法下载了一个我想用作openstreetmap参考的地图,使用R中的库。但是,我找不到在3D环境中在地图上绘制数据的方法。我在几个站点中找到了以下代码,并作为类似问题的答案:

map3d <- function(map, ...){
if(length(map$tiles)!=1){stop("multiple tiles not implemented") }
nx = map$tiles[[1]]$xres
ny = map$tiles[[1]]$yres
xmin = map$tiles[[1]]$bbox$p1[1]
xmax = map$tiles[[1]]$bbox$p2[1]
ymin = map$tiles[[1]]$bbox$p1[2]
ymax = map$tiles[[1]]$bbox$p2[2]
xc = seq(xmin,xmax,len=ny)
yc = seq(ymin,ymax,len=nx)
colours = matrix(map$tiles[[1]]$colorData,ny,nx)
m = matrix(0,ny,nx)
surface3d(xc,yc,m,col=colours, ...)
}

然而,我真的不明白它是如何运作的。 到目前为止,这是我的代码:

library(rgl)
library(ggplot2)
library(OpenStreetMap)
map <- openmap(c(53.5,73.6),c(15.7,134.7),type= 'esri-topo')
plot3d(x,y,z, col= colour) # to plot my data
autoplot(map) # to plot the map. though this is 2D

同样,我知道如何在2D地图上绘制数据。与3D混淆。 有关如何执行此操作的任何提示和提示?

1 个答案:

答案 0 :(得分:0)

一种选择是使用新的&#39; show2d&#39;功能在&#39; rgl&#39;。

library(rgl)
library(OpenStreetMap)
library(raster)

map <- openmap(c(53.5,73.6),c(15.7,134.7),type= 'esri-topo')

## fake up some xyz
xyz <- expand.grid(x = map$bbox$p1, 
               y = map$bbox$p2, 
               z = 1:4)

plot3d(xyz, col = "black") # to plot my data
编辑:这是错误的,它只适用于边界框 获得正确的方向是令人困惑的,需要检查show2d的x,y,z参数。

show2d(raster::plotRGB(raster(map)))

此函数捕获正常的绘图表达式,将其写入PNG,然后将其纹理映射到场景中的四边形。

我无法完全看到如何使用x,y,z args控制图像纹理的四边形位置 - 正在进行中。