rastermap
生成十六进制字符串中的颜色矩阵(
#RRGGBB
格式)。对于空间数据来说,将其转换为更常见的形式可能是最简单的,即多波段光栅砖,红色、绿色和蓝色分别具有不同的层。
我们可以编写一个简短的助手函数,将十六进制字符串转换为单独的整数值(即,这是
rgb()
功能:
un_rgb = function (x) {
x = unlist(str_split(x, ''))
r = paste0(x[2], x[3])
g = paste0(x[4], x[5])
b = paste0(x[6], x[7])
strtoi(c(r,g,b), 16)
}
使用此函数,我们将Rastermap矩阵转换为三段光栅砖:
library(raster)
m = as.matrix(houston)
l=lapply(m[], un_rgb)
r=g=b=matrix(, dim(m)[1], dim(m)[2])
r[] = sapply(l, function(i) i[1])
g[] = sapply(l, function(i) i[2])
b[] = sapply(l, function(i) i[3])
rgb.brick = brick(raster(r), raster(g), raster(b))
并将新光栅的范围设置为原始Rastermap的范围。
extent(rgb.brick) = extent(matrix(unlist(attributes(houston)$bb), nrow=2))
既然我们有了一个更常见的光栅对象的形式,我们可以用它做各种各样的事情。例如,我们可以使用
library(RStoolbox)
:
ggRGB(rgb.brick, r=1, g=2, b=3)
或者我们可以将其保存为图像以用作ggplot中的注释背景:
png('test.png', dim(rgb.brick)[2], dim(rgb.brick)[1])
plotRGB(rgb.brick, 1, 2, 3)
dev.off()
img <- png::readPNG("test.png")
gr <- grid::rasterGrob(img, interpolate=TRUE)
ggplot() + annotation_custom(gr, -Inf, Inf, -Inf, Inf)