gpt4 book ai didi

r - R中的 map 地 block 更好的山体阴影

转载 作者:行者123 更新时间:2023-12-04 11:24:55 24 4
gpt4 key购买 nike

我正在为某些地形图绘制改进的山体阴影。 image()中记录的基本的hillshade工作流程是:

require(raster)
alt = getData('alt', country='CHE')
slope = terrain(alt, opt='slope')
aspect = terrain(alt, opt='aspect')
hill = hillShade(slope, aspect, 40, 270)
plot(hill, col=grey(0:100/100), legend=FALSE, main='Switzerland')
plot(alt, col=rainbow(25, alpha=0.35), add=TRUE)

此图显示了在应用 plot(hill..)之前的 plot(alt..):

该方法创建了一个山形阴影的纯灰色底层,在其上半透明地绘制了其他数据层(例如高程阴影)。这种方法的问题是(a)平坦地形的中性色(RBG(202,202,202),'#CACACA')严重遮盖了整个模型,这(b)防止了 'Swiss hillshade'方法使用的多重阴影分层。

我可以想象有一种变通方法,可以将栅格转换为矩阵,并将山阴影作为数值乘数应用于其他图层的亮度,但这似乎并不十分优雅(尽管我可能是错的)。我想知道是否有人在这方面有任何想法或(最好是)经验?提前致谢。

最佳答案

没有经验,但是为什么不给灰色 basemap 一个取决于斜率的Alpha值呢?这是我的尝试:

# before
require(raster)
alt = getData('alt', country='CHE')
slope = terrain(alt, opt='slope')
aspect = terrain(alt, opt='aspect')
hill = hillShade(slope, aspect, 40, 270)
plot(hill, col=grey(0:100/100), legend=FALSE, main='Switzerland')
plot(alt, col=rainbow(25, alpha=0.35), add=TRUE)

正如您所说,非常黑暗。
# after
grayalphas <- seq(-1,1,by=.01)^2*100
grayalphas[grayalphas==100] <- 99
plot(hill, col=paste0(grey(0:100/100),sprintf("%.2d",grayalphas)), legend=FALSE, main='Switzerland')

plot(alt, col=rainbow(25, alpha=0.35), add=TRUE)

我将灰度alpha设置为抛物线形状,灰度值为0.5时最小值,灰度值为0或1时最大值为99。如果您选择类似的内容,则需要调整色阶等。但是很容易实现。另外,您将需要比我在alpha上付出更多的努力,因为我的严格是数字而不是十六进制的。

[编辑]我在Sacha Epskamp的答案中发现了一个漂亮的函数,用于添加alpha, addTrans() here。这保留了抛物线,但范围从中间的0到极端的255。
grayalphas <- seq(-1,1,length=101)^2*255
plot(hill, col=addTrans(grey(0:100/100),grayalphas), legend=FALSE, main='Switzerland')
plot(alt, col=rainbow(25, alpha=0.35), add=TRUE)

关于r - R中的 map 地 block 更好的山体阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21487407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com