将图像叠加到“Rayshader”贴图上以使它们对齐

ncecgwcz  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(139)

下面的代码获取了伦敦一个区域的海拔数据和等效的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函数了吗?我知道有其他方法可以覆盖贴图,但我想使用上面的方法。

q8l4jmvw

q8l4jmvw1#

elev_mat中的每个条目都是渲染图像中的一个点。

height=nrow(elev_mat)
width=ncol(elev_mat)

相关问题