R:将带有颜色表的单个带状rasterLayer转换为3波段RGB rasterStack

时间:2015-03-19 16:36:31

标签: r crop raster geotiff rgdal

类似于R: Crop GeoTiff Raster using packages "rgdal" and "raster"中提出的问题,我正试图从瑞士联邦地形办公室裁剪地图,包括" rgdal"和"光栅"同时保留原始颜色表。对于单个带状* .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。有谁知道如何进行这种转换,或者有没有人有更好的想法来解决问题?

1 个答案:

答案 0 :(得分: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'))

enter image description here