[英]Plotting 3D maps with RGL
我正在尝试在RGL的3d环境中绘制平面地图,因为它应该使地图能够自定义缩放/倾斜,以实现最适合数据和所需输出图像方面的投影。 该线程描述了使用rgl.surface()
绘制图像的过程。 但是尚不清楚此方法是否适用于OSM /其他地图对象。 非常感谢您可能有任何想法。
这是起点,失败是因为Error in is.matrix(z) : 'z' is missing
。 知道如何为z坐标插入一些零吗?
require(rgl)
open3d() # R crashes if this is done later(?)
#Sys.setenv(NOAWT=1) # fix an {OSM} X11 issue in Mac
require(OpenStreetMap)
require(ggplot2)
lat <- c(53, 50); lon <- c(-5, 1)
map <- openmap(c(lat[1],lon[1]),c(lat[2],lon[2]), 5, 'osm')
map <- openproj(map)
rgl.surface(map)
您需要创建一个高度为零的矩阵,并使用surface3d
的col=
参数设置图像的颜色。
从map
对象中获取所有尺寸和顺序以及所有这些都是很麻烦的,因此这里有一个函数可以做到:
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,...)
}
这给了我们:
现在,请注意,只有在返回的地图中只有一个图块时,它才起作用,但是原理就在那里。
另外,我也不完全相信坐标对齐是准确的。 坐标可能位于像素中心或图像边缘,因此某处可能缺少+1。 而且我不确定它是否适用于灰色边框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.