2016-01-11 21 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

相关问题