【问题标题】:Better hillshading for map plots in RR中地图的更好的山体阴影
【发布时间】:2014-02-24 13:56:24
【问题描述】:

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

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' 使用的接近。

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

【问题讨论】:

  • 所以@geotheory 自提出问题以来,您在这方面取得了进展吗?如果您有一些巧妙的工作,请随时发布答案。
  • 还没有蒂姆,我很抱歉让你走神了。已接受您的回答。我会在这里发布任何你们觉得有用的东西。

标签: r gis


【解决方案1】:

没有这方面的经验,但为什么不给灰色底图一个取决于斜率的 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 时的最小值为 99,灰度值为 0 或 1 时为最大值等,但它很容易实现。另外,你会比我在 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)

【讨论】:

  • 作为addTrans 的打包替代品,scales 包中有alpha
  • @shujaa 感谢您的提示,我不知道!这是我不时需要的东西,会记下
  • 我发现它非常有用。它曾经在ggplot2,但是当我更新时我惊慌失措并且它不见了!很高兴意识到这些功能只是得到了更恰当的分组。但现在我记得@BenBolker 曾经将我指向?adjustcolor,它默认加载并且可以完成相同的工作(以及更多)。
猜你喜欢
  • 2022-11-22
  • 2019-02-08
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多