使用R只读取一部分tif

时间:2018-03-29 08:34:25

标签: r raster tiff

我有一个大的tif文件,不适合内存。我想知道我是否可以根据范围读取此tif文件的一部分。

我使用R并且到目前为止还没有找到解决方案。我知道它可以使用C#完成,所以我想在R中应该有一种方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果你正在使用R中的栅格,你可能会使用raster包。

以下是如何做到的:

library(raster)

# testraster

r <- raster(system.file("external/test.grd", package="raster"))

# not in memory

inMemory(r)
# [1] FALSE

如果我们查看栅格对象,我们可以看到栅格有115行和80列:

r
# class       : RasterLayer 
# dimensions  : 115, 80, 9200  (nrow, ncol, ncell)
# resolution  : 40, 40  (x, y)
# extent      : 178400, 181600, 329400, 334000  (xmin, xmax, ymin, ymax)
# coord. ref. : +init=epsg:28992 +towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812 +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs 
# data source : /usr/local/lib/R/site-library/raster/external/test.grd 
# names       : test 
# values      : 128.434, 1805.78  (min, max)

所以让我们从中心加载10 x 10块:

arr <- getValuesBlock(r,row=58,nrows=10,col=40, ncols=10,format='matrix')

这将返回一个矩阵,您可以进一步处理,绘图,等等。

plot(raster(arr))

enter image description here

答案 1 :(得分:0)

查看rtiff包。 readTiff功能可以减小图像尺寸。