如何使用UTM坐标获取RGB光栅图像

时间:2013-04-18 21:56:30

标签: r spatial raster utm rastervis

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

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

1 个答案:

答案 0 :(得分:2)

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

我将使用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)

enter image description here

添加北向箭头和比例尺

对于北箭头和比例尺,我们将查看@OscarPerpiñán的docs

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