【问题标题】:R: Crop GeoTiff Raster using packages "rgdal" and "raster"R:使用包“rgdal”和“raster”裁剪GeoTiff Raster
【发布时间】:2015-05-08 14:11:55
【问题描述】:

我想使用提到的两个包“rgdal”和“raster”来裁剪 GeoTiff 光栅文件。一切正常,除了生成的输出 tif 的质量非常差并且是灰度而不是彩色。原始数据是来自瑞士联邦地形局的高质量栅格地图,示例文件可以下载here

这是我的代码:

## install.packages("rgdal")
## install.packages("raster")
library("rgdal")
library("raster")

tobecroped <- raster("C:/files/krel_1129_2012_254dpi_LZW.tif")
ex  <- raster(xmn=648000, xmx=649000, ymn=224000, ymx=225000)
projection(ex) <- proj4string(tobecroped)
output <- "c:/files/output.tif"

crop(x = tobecroped, y = ex, filename = output)

为了重现此示例,请下载 the sample data 并将其解压缩到文件夹“c:/files/”。奇怪的是,使用样本数据,裁剪图像的质量还不错,但仍然是灰度。

我尝试使用“数据类型”、“格式”选项,但没有得到任何结果。有人可以指出解决方案吗?我应该提供输入数据的更多信息吗?

编辑: Josh 的示例与样本数据 2 配合得非常好。不幸的是,我拥有的数据似乎更旧并且有些不同。如果您阅读以下 GDALinfo,您能告诉我我选择了什么选项吗:

# packages same as above
OldInFile = "C:/files/krel1111.tif"
dataType(raster(OldInFile)
[1] "INT1U"

GDALinfo(OldInFile)

rows        4800 
columns     7000 
bands       1 
lower left origin.x        672500 
lower left origin.y        230000 
res.x       2.5 
res.y       2.5 
ysign       -1 
oblique.x   0 
oblique.y   0 
driver      GTiff 
projection  +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333+k_0=1 +x_0=600000+y_0=200000 +ellps=bessel +units=m+no_defs 
file        C:/files/krel1111.tif 
apparent band summary:
  GDType hasNoDataValue NoDataValue blockSize1 blockSize2
1   Byte          FALSE           0          1       7000
apparent band statistics:
  Bmin Bmax Bmean Bsd
1    0  255    NA  NA
Metadata:
AREA_OR_POINT=Area 
TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) 
TIFFTAG_XRESOLUTION=254 
TIFFTAG_YRESOLUTION=254 
Warning message:
statistics not supported by this driver

【问题讨论】:

  • package(rgdal,raster) 给出错误。完全不清楚我们应该在链接站点的哪个位置找到crop.tiff,也不清楚在哪里可以找到krel1152.tiff。请让您的示例真正可重现!我的猜测是,当您写出裁剪结果时,您正在丢失颜色表。 ([参见此处]((stackoverflow.com/questions/19186050/r-slot-unreachable)) 以获取涉及光栅对象颜色表的示例)。也许没有crop() 直接将其输出写入文件。相反,请检查输出并确保在将其写入磁盘之前保留颜色表。
  • 对不起,这个例子真的很糟糕。我重写了它..你仍然坚持你的假设吗?

标签: r crop raster rgdal r-raster


【解决方案1】:

编辑(2015-03-10):

如果只想裁剪现有 GeoTIFF 的子集并将裁剪的部分保存到新的 *.tif 文件中,使用 gdalUtils::gdal_translate() 可能是最直接的解决方案:

library(raster)    # For extent(), xmin(), ymax(), et al.
library(gdalUtils) # For gdal_translate()

inFile <- "C:/files/krel_1129_2012_254dpi_LZW.tif"
outFile <- "subset.tif"
ex <- extent(c(686040.1, 689715.9, 238156.3, 241774.2))

gdal_translate(inFile, outFile,
               projwin=c(xmin(ex), ymax(ex), xmax(ex), ymin(ex)))

看起来您需要更改两个细节。

首先,您正在读取的*.tif 文件包含三个波段,因此应使用stack() 读取。 (在它上面使用raster() 只会读取一个波段(默认情况下是第一个波段),产生单色或“灰度”输出)。

第二个 (for reasons mentioned here) writeRaster() 默认将值写为实数(在我的机器上为Float64)。要明确告诉它您想使用字节,请给它参数datatype='INT1U'

library("rgdal")
library("raster")
inFile <- "C:/files/krel_1129_2012_254dpi_LZW.tif"
outFile <- "out.tif"

## Have a look at the format of your input file to:
## (1) Learn that it contains three bands (so should be read in as a RasterStack)
## (2) Contains values written as Bytes (so you should write output with datatype='INT1U')
GDALinfo(inFile)

## Read in as three separate layers (red, green, blue)
s <- stack(inFile)

## Crop the RasterStack to the desired extent
ex  <- raster(xmn=648000, xmx=649000, ymn=224000, ymx=225000)
projection(ex) <- proj4string(s)
s2 <- crop(s, ex)

## Write it out as a GTiff, using Bytes
writeRaster(s2, outFile, format="GTiff", datatype='INT1U', overwrite=TRUE)

全部输出以下tiff文件:

【讨论】:

  • @Josh:你真是个混蛋……但不幸的是,我的数据似乎与样本数据略有不同。我已经更新了我的帖子,你能给我提示吗?
  • @Ratnanil -- 谢谢 ;) 不幸的是,没有看到数据并玩弄了一下,我无法判断您的实际数据有什么问题。你知道它是如何用一个单一的波段和没有一个颜色表来表示全光谱的吗? (我对如何在光栅文件中表示颜色的理解类似于 what's shown here。)
  • raster() 不会折叠波段,它默认只读取第一个波段 - 使用 band = 2 等来获取其他波段,使用 brick() 读取所有波段(或 stack() )
  • 也不需要建立一个光栅来裁剪,你可以使用范围对象
  • @mdsumner -- 感谢您提供更好的信息/提醒raster() 对 3 波段文件的作用。刚刚修复了答案以反映这一点。我保留了 OP 使用第二个光栅来裁剪,因为在他们的实际用例(或至少他们最初的预编辑问题)中,他们实际上使用了另一个光栅,从文件中读取作为他们的裁剪模板。在您看来,如果 OP 确实有一个单带 *.tif 文件来生成全色地形图像,那么您是否也认为某个地方必须涉及颜色表?
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 2022-12-27
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多