2017-10-19 24 views
2
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 (Raster Attribute Table)가 손상됩니다. 왜 이런 일이 일어나는 지 아직 모르겠다.

> 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을 반환합니다 ... 시각적으로 첫 번째 '자르기'의 결과를 확인 했습니까? – loki

+0

@loki 네, 0을 반환합니다. 그리고'r1 [is.na (r1)]'은 NULL을 반환합니다. 첫 번째 작물이 정상적으로 그려집니다. – Rodrigo

+0

경고는 아무 의미없이 발생합니까? – loki

답변

2

오류 메시지가 래스터 특성 테이블에 문제가 있음을 나타냅니다. 문제는 라벨의 특수 문자와 관련이 있습니다.

특히, 세미콜럼 (:)은 자른 래스터의 클래스 이름을 어떻게 든 "분할"하는 것으로 나타납니다. 따라서, 즉시 모두

으로 "모자이크 : 나무 커버/기타 천연 식물"

"모자이크 : 농경지/나무 커버/기타 천연 식물"

픽셀이 자르기 범위에 포함되어 있고 Mosaic 개의 레이블로 인해 RAT가 손상되어 corr 파일 저장. 예를 들어, 사용

"정리"클래스 이름 :

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

문제를 해결합니다.

+0

이것은 대용량 데이터 집합에 대해서만 만들어지는 임시 파일에서 구분 기호로 사용되는 콜론 때문에 발생하는 버그입니다. 나는 래스터 (wrapper) 버전 2.6-1 (앞으로 나올 예정) – RobertH