2016-01-11 20 views
0

我是新於r,所以我還是搞清楚基本裁剪光柵堆棧。我正在嘗試獲取多個shapefile的列表並使用它們來裁剪多個柵格堆棧。然後使用裁剪的光柵堆棧並從中創建直方圖。 我知道我必須製作我已經想出如何做的shapefile列表。我也想出瞭如何單獨裁剪柵格並製作直方圖。不幸的是,循環引發了我的循環。有沒有人有什麼建議?如何使用多個形狀文件中的R

這是我到目前爲止有:

library('rgdal') 
library('raster') 
library('landsat') 
library('ggplot2') 
library('rasterVis') 
library('spatial.tools') 
library('plyr') 
library('reshape') 
library('reshape2') 
library('GGally') 
library('lattice') 
library('sp') 
library('maptools') 
library('rgeos') 
library('gdata') 

    #Create folder for shapefiles located and rasters 
foldershp <- paste0("F:/2926/Hayes/crp/hnw/") 
setwd("F:/2926/Hayes/crp/hnw/") 
fileName<-list.files(path= ".", pattern = ".shp$") 

folderout<- paste0("F:/Indices/Histograms/") 

#list for Rasters 
ras.root<- paste0("F:/2926/July/") 
ras.list <- c("mtvi", "ndsvi", "ndvi", "ndwi", "satvi", "swir32") 

#Loop 
for (i in ras.list) { 
    s <- stack() 
    setwd(paste(ras.root,i,sep="")) 
    files <- list.files(path = getwd(), pattern = "*.tif$") 
    s <- stack(files) 
    for (fileName in fileNames){ 
    setwd(foldershp) 
    data <- readOGR(dsn=".",substr(fileName,1,nchar(fileName)-4)) 
    names(data) <- substr(fileName,1,nchar(fileName)-4) 
    m <- mask(s,data) 
    setwd(folderout) 
    png(paste(i,"_",names(data),"_hist_plot",sep="")) 
    hist(m) 
    dev.off() 
    png(paste(i,"_clipped_",names(data),sep="")) 
    plot(m) 
    dev.off() 
    } 
    } 
+0

我會把它分成兩個問題,如何裁剪柵格以及如何直方圖柵格。但看到?作爲一個開始。也不要使用分配,會盡量回答只是代碼審查 – mdsumner

回答

1

我給這個一杆,但我敢肯定,有更優雅的方式....

集的環境中,在讀shape文件作爲名稱的列表,通過光柵文件夾矢量創建的,其中的光柵保持一個特徵向量(在你的情況,「mtvi」,「NDVI」等)

require(raster) 
require(gdata) 
require(rgdal) 

setwd("/home/st/R/shapes") 
fileNames <- list.files(path = ".", pattern = "*.shp$") 

ras.fols <- c("one","two","three") 
setwd("/home/st/R/rasters") 

現在迴路,設置工作目錄Ť o該文件夾並在其中製作一疊光柵。

然後嵌套循環會打電話給你的shape文件的列表,並一個接一個,由shape文件掩蓋了第一rasterstack並保存掩蓋的數據的直方圖和情節圖像。

然後,它返回到原來的循環,移到下一個光柵文件夾,並執行相同的動作。

for (i in ras.fols) { 
    s <- stack() 
    setwd(paste("/home/st/R/rasters/",i,sep="")) 
    files <- list.files(path = getwd(), pattern = "*.tif$") 
    s <- stack(files) 
    for (fileName in fileNames){ 
     setwd("/home/st/R/shapes") 
     data <- readOGR(dsn=".",substr(fileName,1,nchar(fileName)-4)) 
     names(data) <- substr(fileName,1,nchar(fileName)-4) 
     m <- mask(s,data) 
     setwd("/home/st/R/write") 
     png(paste(i,"_",names(data),"_hist_plot",sep="")) 
     hist(m) 
     dev.off() 
     png(paste(i,"_clipped_",names(data),sep="")) 
     plot(m) 
     dev.off() 
    } 
} 

希望有一些可以幫助。你可以整理它,把shapefile文件夾和光柵文件夾的字符矢量放在最上面,用一些整潔的東西來代替一些'setwd9(「adfad/asdad/asdasd」)''

+0

@Specks,所以對於柵格是指您的根文件夾似乎是「F:/ 2926/7 /」,把那作爲一個變量稱爲ras.root (例如)。現在,像你一樣創建ras.list。 – Sam

+0

@Specks,當你循環訪問每個光柵文件夾(堆疊它並裁剪等)時,你想使用ras.list動態設置光柵文件夾,以便調用ras.list'i'的元素。對(我在ras.fols)將通過一個接一個的文件夾名環,你需要再設置工作目錄爲ras.root與ras.list [I] – Sam

+0

@Specks連接在一起,在此行中「setwd(粘貼( listmtvi,我,sep =「」))「,listmtvi需要是根(」F:/ 2926/July /「),我需要來自ras.list(在你粘貼的代碼中仍然是ras.fols) – Sam

相關問題