【问题标题】:R: Convert a single banded rasterLayer with a colour table to a 3-band RGB rasterStackR:将带有颜色表的单波段 rasterLayer 转换为 3 波段 RGB rasterStack
【发布时间】:2015-05-22 21:31:40
【问题描述】:

R: Crop GeoTiff Raster using packages "rgdal" and "raster" 中提出的问题类似,我正在尝试使用“rgdal”和“raster”包从瑞士联邦地形局裁剪地图,同时保留原始颜色表。对于单个带状 *.tif 文件,裁剪后的图像会丢失颜色表信息,因此无法正确显示(生成的图像几乎是黑色的)。

输入文件可以在here 下载,应该解压到文件夹“C:/files”中。这是代码:

## install.packages("rgdal")
## install.packages("raster")
library("rgdal")
library("raster")
input <- "C:/files/PK25_KOMB_20L_2004_1_1.tif"
output <- "C:/files/cropped.tif"
r <- raster(input)
ex  <- extent(c(600500, 601500, 196500, 197500))
cropped <- crop(r, ex)
writeRaster(cropped, output, format="GTiff", datatype='INT1U', overwrite=TRUE)

前面提到的post 中提出的解决方案仅适用于 3 波段 *.tif,但不适用于 1 波段 *.tif(例如示例文件)。

一个可行的解决方案是将包含颜色表的单波段 rasterLayer 转换为 3 波段 RGB rasterStack(如前面提到的 post 中的评论中所述),这显然可以保留颜色表。

但是,我不知道如何在保留颜色表的同时将单波段 *.tif 转换为 3 波段 RGB rasterStack。有谁知道如何进行这种转换,或者有没有人有更好的想法来解决这个问题?

【问题讨论】:

    标签: r crop raster geotiff rgdal


    【解决方案1】:

    您可以为此使用gdalUtils::gdalwarp

    library(raster)
    library(gdalUtils)
    

    下载数据:

    download.file(file.path('http://www.swisstopo.admin.ch/internet/swisstopo/de',
                            'home/products/maps/national/digital/national',
                            'pk_25.parsys.89625.downloadList.82162.DownloadFile.tmp',
                            'pk25komblzw.zip'), f <- tempfile())
    unzip(f, exdir=tempdir())
    

    使用gdalwarp进行裁剪:

    cropped <- gdalwarp(
      file.path(tempdir(), 'PK25_KOMB_20L_2004_1_1.tif'), 
      'cropped.tif', te=c(600500, 196500, 601500, 197500), output_Raster = TRUE)
    

    请注意,范围必须以c(xmin, ymin, xmax, ymax) 的形式给出,这与raster::extent 使用的顺序不同。

    确认它有效:

    plot(raster('cropped.tif'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-18
      • 2016-05-30
      • 1970-01-01
      • 2016-08-05
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多