为什么作物有时会在分类栅格上引入NAs?

问题描述:

library(raster) 
r <- raster('glc2000_v1_1') # http://forobs.jrc.ec.europa.eu/products/glc2000/products/glc2000_v1_1_Grid.zip 
extent(r) 
# class  : Extent 
# xmin  : -180.0045 
# xmax  : 179.9955 
# ymin  : -56.01339 
# ymax  : 89.99554 
ext <- extent(-69,-63,-3,3) 
r1 <- crop(r,ext) 
#Warning message: 
#In .getRat(x, ratvalues, ratnames, rattypes) : NAs introduced by coercion 

如果我尝试裁剪一个较小的区域,它工作正常。为什么作物有时会在分类栅格上引入NAs?

ext <- extent(-68,-64,-2,2) 
r1 <- crop(r,ext) # works fine 

这个错误阻止了我用writeRaster保存文件,但我不知道发生了什么。

另一位用户在related question中发现此问题。 RAT(光栅属性表)被破坏,取决于原始光栅的哪一部分被裁剪。不知道为什么会发生这种情况。

> ext <- extent(-68,-64,-2,2) # The RAT is copied from the original 
> r1 <- crop(r,ext) 
> levels(r1) 
[[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 

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

'sum(is.na(r1 []))'虽然返回0 ...您是否可视化地检查了第一个'crop'的结果? – loki

+0

@loki是的,它返回0.并且'r1 [is.na(r1)]'返回NULL。第一批作物通常情况下。 – Rodrigo

+0

因此,警告没有任何意义? – loki

该错误消息指出了栅格属性表中出现了错误。问题与标签上的特殊字符有关。

特别是,半角(:)似乎导致裁剪栅格中的类名“分裂”。因此,只要两个

“马赛克:树木覆盖/其它自然植被”

“马赛克:耕地/树木覆盖/其它自然植被”

像素被包括在裁剪范围内,RAT由于多个标签而被损坏,从而防止了更改等文件的保存。

“整理” 之类的使用示例名称:

levels(r)[[1]]$CLASSNAMES <- stringr::str_replace(levels(r)[[1]]$CLASSNAMES , ":", "-") 

解决了这个问题。

+0

这是由冒号在临时文件(仅为大数据集创建)中用作分隔符引起的错误。我已经在'raster' 2.6-1版(即将发布) – RobertH