下面的代码获取了伦敦一个区域的海拔数据和等效的bingMap。我使用rayshader绘制了海拔代码,并覆盖了bingMap,但它们并不匹配。这是因为bingMap的尺寸与rayshaderMap不匹配。我可以通过png函数中的width和height变量来更改尺寸,并通过反复试验使它们匹配。然而,我想这样做的程序,而不需要这样的手动调整。
library(elevatr)
library(rayshader)
library(OpenStreetMap)
#london bbox
mapextent<-c(51.477482,-0.120438,51.527517,0.051910)
#get elevation data
elev_data <- get_elev_raster(
locations = data.frame(x = c(mapextent[2],mapextent[4]), y = c(mapextent[1],mapextent[3])),
z = 10,
prj = "EPSG:4326",
clip = "bbox")
elev_mat<-raster_to_matrix(elev_data)
#create bing png to overlay
png("bing_map.png")
map<-openmap(upperLeft=c(mapextent[1], mapextent[2]),
lowerRight=c(mapextent[3],mapextent[4]),
type = "bing")
plot(map)
dev.off()
bing_map <- png::readPNG("bing_map.png")
#put together in a 3d map
elev_mat %>%
sphere_shade() %>%
add_overlay(bing_map, alphalayer = 0.9) %>%
plot_3d(elev_mat, zscale = 10, fov = 0, theta = 0, phi = 60,
windowsize = c(600, 450),
zoom = 0.7,
background = "lightgrey")
这是Map的样子,你可以看到bingMap太窄了。
有谁知道如何事先得到光线着色器贴图的尺寸,这样我就可以把这些传递给png函数了吗?我知道有其他方法可以覆盖贴图,但我想使用上面的方法。
1条答案
按热度按时间q8l4jmvw1#
elev_mat中的每个条目都是渲染图像中的一个点。