为什么不写writeRaster保存4390x4390光栅?

时间:2017-10-19 05:02:36

标签: r r-raster

我正在尝试在R中保存一个光栅,该光栅是从GLC2000裁剪的。由此产生的栅格有4390行和4390列,覆盖巴西和南美洲的部分地区。保存它的命令(作为GeoTIFF)是

writeRaster(r1,'Raster1.tif')

writeRaster(r1,'Raster1.tif','GTiff')

两者都在尝试将文件保存几个小时,但它们甚至都没有创建文件,更不用说完成写入过程了。

我怀疑这是因为文件的大小(我认为文件至少应该开始保存,临时文件出现,可见或隐藏 - 不存在)。另外两个类似的TIFF文件(几乎相同的区域,尽管除巴西以外的所有南美洲都是黑色)都有2.7 MB(索引,在Gimp上打开时出错:“遇到标记33550(0x830e)的未知字段”,以及其他标签)和19.3 MB(也是索引,在Gimp上没有错误)。

我认为这不是因为目录权限,因为R可以将脚本保存在同一目录中(权限是drwxr-xr-x,我是所有者和组所有者)。

指定的文件系统中有11.6 GB可用。

我正在使用Debian Jessie 64位与Gnome 3.14.1,以及R 3.3.3与RStudio 1.0.136。

我的处理器是英特尔®酷睿™i3-6100 CPU @ 3.70GHz×4,内存为7.8 GiB。

writeRaster应该花这么长时间来保存一个甚至不是那么大的光栅吗?可能出现什么问题?

修改

所以我正在尝试更小的尺寸。

ext <- extent(-67,-65,-1,1)
r1 <- crop(r,ext)
dim(r1) # 224 224   1
writeRaster(r1,'Raster1','GTiff') # works

ext <- extent(-68,-64,-2,2)
r1 <- crop(r,ext)
dim(r1) # 448 448   1
writeRaster(r1,'Raster2','GTiff') # works

ext <- extent(-69,-63,-3,3)
r1 <- crop(r,ext)
#Warning message:
#In .getRat(x, ratvalues, ratnames, rattypes) : NAs introduced by coercion
dim(r1) # 672 672   1
writeRaster(r1,'Raster3','GTiff') # takes forever

看起来错误是强制引入的NA,这可以防止文件被保存。我试过了

r1[is.na(r1)] <- 0

但是文件仍然无法保存。如果我在光栅的范围内进行裁剪,为什么世界会将NAs引入常见的栅格?

extent(r)
# class       : Extent
# xmin        : -180.0045
# xmax        : 179.9955
# ymin        : -56.01339
# ymax        : 89.99554

编辑2

> levels(r)
[[1]]
   ID     COUNT                                               CLASSNAMES
1   1  12875179                       Tree Cover, broadleaved, evergreen
2   2   8688097               Tree Cover, broadleaved, deciduous, closed
3   3   4099003                 Tree Cover, broadleaved, deciduous, open
4   4  15080165                     Tree Cover, needle-leaved, evergreen
5   5   8054159                     Tree Cover, needle-leaved, deciduous
6   6   5606446                              Tree Cover, mixed leaf type
7   7    579763               Tree Cover, regularly flooded, fresh water
8   8    115705              Tree Cover, regularly flooded, saline water
9   9   4269938            Mosaic: Tree Cover / Other natural vegetation
10 10    587270                                        Tree Cover, burnt
11 11   3195387                      Shrub Cover, closed-open, evergreen
12 12  15605651                      Shrub Cover, closed-open, deciduous
13 13  17560702                            Herbaceous Cover, closed-open
14 14  23573022                  Sparse herbaceous or sparse shrub cover
15 15   3089962          Regularly flooded shrub and/or herbaceous cover
16 16  21692769                             Cultivated and managed areas
17 17   4025653 Mosaic: Cropland / Tree Cover / Other natural vegetation
18 18   3921904              Mosaic: Cropland / Shrub and/or grass cover
19 19  24629888                                               Bare Areas
20 20 471034157                                             Water Bodies
21 21  10660085                                             Snow and Ice
22 22    378999                 Artificial surfaces and associated areas
23 23     29056                                                  No Data

另见this related question

1 个答案:

答案 0 :(得分:1)

通过评论中的讨论,错误消息表明栅格属性表发生了错误。问题可能与特殊字符或标签长度有关。只要一个“违规标签”被子集引入,就会出现问题。

使用

简化类名
levels(r)[[1]]$CLASSNAMES <- letters[1:23]

解决了这个问题。

查看这个相关的问题Why is crop introducing NAs to my raster?表明问题在于在类的名称中有半个数组(:),这会导致在裁剪时“拆分”类名。