2017-09-14 14 views
0

저는 R Studio 0.99.902와 함께 작업하고 있습니다.같은 날짜의 래스터 목록에있는 모자이크 래스터

나는 래스터 (특정 타일의 S2 밴드 5의 시계열) 목록을 가지고있다. 일부 날짜의 수집은 모자이크 (두 타일은 같은 타일의 두 영역)에 필요한 두 개의 파일로 나뉩니다. 이렇게하면 나중에 시계열 스택을 만들 수 있습니다. R이 복제 된 래스터 쌍마다 모자이크 함수를 작성하지 않고 동일한 날짜에 얻은 파일을 자동으로 검색하고 모자이크 처리하려고합니다. 당신이 볼 수 있듯이

lst_B5 
[1] "09/05/S2A_20160905T104245Z_31UFS_TOC_V100/S2A_20160905T104245Z_31UFS_TOC-B05_20M_V100.tif" 
[2] "09/08/S2A_20160908T105416Z_31UFS_TOC_V100/S2A_20160908T105416Z_31UFS_TOC-B05_20M_V100.tif" 
[3] "09/18/S2A_20160918T105022Z_31UFS_TOC_V100/S2A_20160918T105022Z_31UFS_TOC-B05_20M_V100.tif" 
[4] "09/18/S2A_20160918T105641Z_31UFS_TOC_V100/S2A_20160918T105641Z_31UFS_TOC-B05_20M_V100.tif" 
[5] "09/25/S2A_20160925T104115Z_31UFS_TOC_V100/S2A_20160925T104115Z_31UFS_TOC-B05_20M_V100.tif" 
[6] "09/28/S2A_20160928T105022Z_31UFS_TOC_V100/S2A_20160928T105022Z_31UFS_TOC-B05_20M_V100.tif" 
[7] "09/28/S2A_20160928T105637Z_31UFS_TOC_V100/S2A_20160928T105637Z_31UFS_TOC-B05_20M_V100.tif" 
[8] "10/05/S2A_20161005T104018Z_31UFS_TOC_V100/S2A_20161005T104018Z_31UFS_TOC-B05_20M_V100.tif" 
[9] "10/08/S2A_20161008T105022Z_31UFS_TOC_V100/S2A_20161008T105022Z_31UFS_TOC-B05_20M_V100.tif" 
[10] "10/15/S2A_20161015T104513Z_31UFS_TOC_V100/S2A_20161015T104513Z_31UFS_TOC-B05_20M_V100.tif" 
[11] "10/18/S2A_20161018T105035Z_31UFS_TOC_V100/S2A_20161018T105035Z_31UFS_TOC-B05_20M_V100.tif" 
[12] "10/25/S2A_20161025T104118Z_31UFS_TOC_V100/S2A_20161025T104118Z_31UFS_TOC-B05_20M_V100.tif" 
[13] "10/28/S2A_20161028T105615Z_31UFS_TOC_V100/S2A_20161028T105615Z_31UFS_TOC-B05_20M_V100.tif" 
[14] "11/04/S2A_20161104T104250Z_31UFS_TOC_V100/S2A_20161104T104250Z_31UFS_TOC-B05_20M_V100.tif" 
[15] "11/07/S2A_20161107T105238Z_31UFS_TOC_V100/S2A_20161107T105238Z_31UFS_TOC-B05_20M_V100.tif" 
[16] "11/14/S2A_20161114T104309Z_31UFS_TOC_V100/S2A_20161114T104309Z_31UFS_TOC-B05_20M_V100.tif" 
[17] "11/17/S2A_20161117T105325Z_31UFS_TOC_V100/S2A_20161117T105325Z_31UFS_TOC-B05_20M_V100.tif" 
[18] "11/24/S2A_20161124T104349Z_31UFS_TOC_V100/S2A_20161124T104349Z_31UFS_TOC-B05_20M_V100.tif" 
[19] "11/27/S2A_20161127T105404Z_31UFS_TOC_V100/S2A_20161127T105404Z_31UFS_TOC-B05_20M_V100.tif" 

가 일부 래스터는 같은 날짜를 가지고 있지만, 정확히 같은 이름 :

이 내 래스터 목록입니다. 중복을 찾으려면 이름에서 각 파일의 날짜를 추출하고 목록에있는 개체의 이름으로 날짜를 할당했습니다. 이름 (lst_B5) < -

dates_2 
[1] "20160905" "20160908" "20160918" "20160918" "20160925" "20160928" "20160928" "20161005" "20161008" "20161015" 
[11] "20161018" "20161025" "20161028" "20161104" "20161107" "20161114" "20161117" "20161124" "20161127" 

이 날 목록 내에서 중복을 찾을 수 있습니다 dates_2 :

duplicated(names(lst_B5)) 
[1] FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

하지만 여전히 자동으로 중복을 모자이크하는 방법을 모르겠어요. 힌트있어?

답변

0

루프 안에서 수행 할 수 있습니다. 재현 예를 사용 :

set.seed(123) 

rlist <- list() # store all rasters 

rlist[[1]] <- raster(nrows=90, ncols=180, xmn=-180, xmx=0, ymn=-90, ymx=90,vals=rnorm(16200)) 
rlist[[2]] <- raster(nrows=90, ncols=180, xmn=0, xmx=180, ymn=-90, ymx=90,vals=rnorm(16200)) 
rlist[[3]] <- raster(nrows=90, ncols=180, xmn=-180, xmx=0, ymn=-90, ymx=90,vals=rnorm(16200)) 
rlist[[4]] <- raster(nrows=90, ncols=180, xmn=0, xmx=180, ymn=-90, ymx=90,vals=rnorm(16200)) 

dates_2 <- c("20160908","20160918","20160918","20160925") # you dates 

dates_2u <- unique(dates_2) # create a vector with unique dates 

rlist2 <- list() # a second list to store processed rasters 

for(i in seq_along(dates_2u)){ 
    idx <- which(dates_2 %in% dates_2u[i]) #some index 
    if(length(idx) > 1){ 
    rlisttemp <- rlist[idx] # to create a temporal list 
    rlisttemp$fun <- mean # set function to make mosaic 
    rlist2[[i]] <- do.call(mosaic,rlisttemp) 
    }else{ 
    rlist2[[i]] <- rlist[[idx]] # for non-mosaicking images 
    } 
} 

을 그리고 확인 결과 :

plot(rlist2[[1]]);plot(rlist2[[2]]);plot(rlist2[[3]]) 
당신에

enter image description here

enter image description here

enter image description here

경우

rlist <- lapply(list.files('/your/path/to/rasters', 
          pattern = '.tif$',full.names = T, 
          recursive = T),FUN=raster) 

또는 : 당신은 같은과 (예의 코드를 유지하기 위해) 목록 내에서 모든 래스터를로드 할 수 있습니다

rlist <- lapply(lst_B5, FUN=raster) 
+0

친애하는 알도, 답장을 보내 주셔서 감사합니다. 당신이 제안한 스크립트를 실행했는데 다음과 같은 오류가 발생했습니다 : '오류 ((function, classes, fdef, mtable) : 서명'누락 ','누락 '에 대해'mosaic '함수의 상속 된 메소드를 찾을 수 없습니다. –

+0

@LauraPaladini는'rlist'를 제대로로드하지 않았다는 것을 의미합니다'rlist'를 확인 했습니까? 어떤 종류의 객체가 목록 안에 있습니까? –

+0

나는 이미 모자이크로 래스터를 찾지 못했습니까? 확인하고 분명히 모든 것이 잘 돌아갔습니다. 설명 (nrows, ncols, ncells 등)이있는 19 개의 래스터 목록을 얻었 기 때문에 –