2016-01-11 5 views
0

Я новичок в r, поэтому я все еще разбираюсь в основах. Я пытаюсь взять список нескольких шейп-файлов и использовать их для обрезки нескольких стеков растеров. Затем используйте обрезанные растровые стеки и создайте из них гистограммы. Я знаю, что мне нужно составить списки шейп-файлов, которые я уже выяснил, как это сделать. Я также выяснил, как индивидуально обрезать растры и делать гистограммы. К сожалению, цикл забрасывает меня для цикла. У кого-нибудь есть предложения?Как обрезать растровый стек с использованием нескольких шейп-файлов в 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

Я дам этот выстрел, хотя я уверен, что есть более элегантные способы ....

набор условий, читайте в шейп в виде списка имен, создать символьный вектор, где растры хранятся (в вашем случае, «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") 

теперь петлю через вектор растровых папок, настройки рабочего каталога T o эту папку и сделать стек растров внутри.

Затем вложенный цикл вызовет ваш список шейп-файлов и, один за другим, замаскирует первый растровый стоп шейп-файлами и сохранит гистограмму и построит изображение замаскированных данных.

Затем он возвращается к исходному циклу, перемещается в следующую растровую папку и выполняет одно и то же действие.

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

Надеюсь, что-то может помочь. Вы можете привести его в порядок, поместить папку шейп-файла и символьный вектор растровых папок вверх, заменить некоторые «setwd9 (« adfad/asdad/asdasd ») на некоторые более аккуратные вещи и т. Д.

+0

@Specks, поэтому ваша корневая папка, для которой растры выглядят как «F:/2926/July /», помещает это как переменную ras.root (например). Теперь создайте ras.list, как и вы. – Sam

+0

@Specks, когда вы переходите через каждую растровую папку (для ее укладки и обрезания и т. Д.), Вы хотите динамически устанавливать растровую папку с помощью ras.list, поэтому вы вызываете элементы ras.list 'i'. для (i в ras.fols) будут прокручивать один за другим эти имена папок, тогда вам нужно установить рабочий каталог, как ras.root, связанный с ras.list [i] – Sam

+0

@Specks, в этой строке «setwd (paste (вставить) listmtvi, i, sep = "")) ", listmtvi должен быть корнем (" F:/2926/July/"), и мне нужно перейти из ras.list (в введенном вами коде все еще ras.fols) – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^