7

我有一个三层栅格,其中包含红色、绿色和蓝色通道值。我可以用 绘制图像raster::plotRGB,但我需要添加带有 UTM 坐标的轴。可以使用 来添加坐标axes=TRUE,但它们在空间中浮动并且看起来很糟糕。我想获得坐标,因为它们显示在使用该raster plot方法创建的图中,或者更好的是它们在使用rasterVis::levelplot.

最终,我需要创建一个带有 UTM 坐标、比例尺和指北针的光栅图像。这需要使用 R 包中的plotRGB函数raster或具有类似功能的函数来完成,因为我需要手动分配每个像素的颜色(无色带)。

4

1 回答 1

3

这是一个古老的帖子,但这是一个很好的问题,所以我会给它一个答案。

我将举例说明如何rasterVis::levelplot使用 . 附带的 3 通道 R 徽标光栅数据来完成此操作raster

library(rasterVis)
b <- brick(system.file("external/rlogo.grd", package="raster"))

使用 levelplot 绘制三通道 RGB 栅格

raster创建一个与砖具有相同尺寸和范围的空。

r <- raster(b)

计算对应 RGB 通道值的十六进制颜色,并强制转换为factor.

cols <- factor(rgb(b[], maxColorValue=255))

将这些因子值分配给栅格像元。

r[] <- cols

用 绘制levelplot,从 的级别中提取十六进制颜色cols并将它们传递给col.regions

levelplot(r, col.regions=as.character(levels(cols)), colorkey=FALSE)

在此处输入图像描述

添加指北针和比例尺

对于指北针和比例尺,我们将查看@OscarPerpiñán 的文档

levelplot(r, col.regions=as.character(levels(cols)), colorkey=FALSE) +
  layer(SpatialPolygonsRescale(layout.north.arrow(), offset = c(5, 10), scale = 10)) +
  layer({
    xs <- seq(5, 25, by=5)
    grid.rect(x=xs, y=5,
              width=5, height=2,
              gp=gpar(fill=rep(c('transparent', 'black'), 2)),
              default.units='native')
    grid.text(x=xs-2.5, y=8, seq(0, 400, by=100),
              gp=gpar(cex=0.7),
              default.units='native')
  })

grid.text我将由您来计算与矩形的宽度(以地图单位为单位)相关的真实距离(传递给)。

在此处输入图像描述

于 2016-01-06T06:43:28.547 回答