如何在r中使用多个shapefile裁剪光栅堆栈

时间:2016-01-11 04:36:46

标签: r histogram crop raster shapefile

我是新来的,所以我仍在搞清楚基础知识。我试图获取多个shapefile的列表,并使用它们来裁剪几个栅格堆栈。然后使用裁剪的栅格堆栈并从中创建直方图。 我知道我必须制作一些形状文件列表,我已经知道该怎么做了。我还想出了如何单独裁剪栅格并制作直方图。不幸的是,循环让我陷入了循环。有没有人有任何建议?

这是我到目前为止所拥有的:

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()
  }
    }

1 个答案:

答案 0 :(得分:1)

我会给出一个机会,但我确信有更优雅的方式....

设置环境,在shapefile中读取名称列表,创建一个保存栅格的角色向量(在您的情况下,&#34; mtvi&#34;,&#34; ndvi&#34;等)

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")

现在遍历光栅文件夹向量,将工作目录设置为该文件夹并在其中创建一堆栅格。

然后嵌套循环将调用您的shapefile列表,并逐个屏蔽shapefile中的第一个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文件夹和光栅文件夹的字符向量放到顶部,替换一些&#39; setwd9(&#34; adfad / asdad / asdasd&#34;)&#39;一些更整洁的东西等