如何获取带有UTM坐标的RGB栅格图像

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

最终,我需要使用R中的raster包中的plotRGB函数或具有类似功能的函数创建具有UTM坐标、比例尺和北箭头的光栅图像,因为我需要手动分配每个像素的颜色(没有颜色渐变)。


4
请提供一个小例子和可复现的数据,展示你目前所拥有的内容以及你对它不满意的地方是什么? - Josh O'Brien
您能否提供更多关于数据来源和文件格式的详细信息? - Paulo E. Cardoso
@klar,这篇帖子可能对你有用。 - Paulo E. Cardoso
1个回答

4
这是一篇古老的帖子,但问题很好,所以我会给出答案。 我将用 rasterVis::levelplotraster 附带的三通道 R 徽标光栅数据举例说明如何完成此操作。
library(rasterVis)
b <- brick(system.file("external/rlogo.grd", package="raster"))

使用levelplot绘制三通道RGB光栅图像

创建一个与brick相同尺寸和范围的空白。

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)

enter image description here

添加指北针和比例尺

关于指北针和比例尺,我们将参考 @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),以地图单位为单位。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接