2

私は分析の準備をするために空間データを扱っていました - 私は全国規模 (米国) で約 39 の他のレイヤーを持っていますが、私の研究地域の望ましい範囲で DEM を持っています。これらの 39 レイヤーすべてを一度に DEM と同じ程度にトリミングする方法はありますか?

また、出力を別の投影法で他のレイヤーと重ねます。出力レイヤーの投影とピクセル サイズを調整することは可能ですか?

データ操作にはできるだけフリーウェアを使用しようとしています...

4

1 に答える 1

3

上記の問題がありましたが、Rで関数を作成して、これらすべてをバッチで実行しました-以下を参照してください。米国本土の規模で 39 の気候データ レイヤーがあり (PRISM Climate Data group; http://www.prism.oregonstate.edu/から)、それらを南カリフォルニアの DEM の範囲にクリップしたいと考えました。それらを再投影し、エクスポートして簡単にインポートし、SAGA GIS の他のレイヤーで使用できます。以下はコードで、実行方法の例を示しています。作業ディレクトリを、トリミングするレイヤーとそれらのレイヤーのみを含むフォルダーに設定します。

処理中はすべてのデータがメモリに保存されるため、巨大なデータセットではメモリ不足でハングアップする可能性があります.これはおそらく改善するのに良いことです.

また、R フォーラムでの回答でも、より簡潔で洗練された方法が提供されました

誰かがそれを役に立つと思うことを願っています!

#########################################
#BatchCrop Function ###
#by Mike Treglia, mtreglia@gmail.com ###
###Tested in R Version 3.0.0 (64-bit), using 'raster' version 2.1-48 and 'rgdal' version 0.8-10
########################################
#This function crops .asc raster files in working directory to extent of another layer (referred to here as 'reference' layer), converts to desired projection, and saves as new .asc files in the working directory. It is important that the original raster files and the reference layer are all in the same projection, though different pixel sizes are OK. The function can easily be modified to use other raster formats as well
#Note, Requires package 'raster'
#Function Arguments:
#'Reference'  refers to name of the layer with the desired extent; 'OutName' represents the intended prefix for output files; 'OutPrj' represents the desired output projection; and 'OutRes' represents the desired Output Resolution
BatchCrop<-function(Reference,OutName,OutPrj,OutRes){
        filenames <- list.files(pattern="*.asc", full.names=TRUE)   #Extract list of  file names from working directory
        library(raster) #Calls 'raster' library
        #Function 'f1' imports data listed in 'filenames' and assigns projection
            f1<-function(x,z) {
            y <- raster(x)
            projection(y) <- CRS(z)
            return(y)
            }
            import <- lapply(filenames,f1,projection(Reference))
        cropped <- lapply(import,crop,Reference)    #Crop imported layers to reference layer, argument 'x'
        #Function 'f2' changes projectection of cropped layers
            f2<-function(x,y) {
            x<-projectRaster(x, crs=OutPrj, res=OutRes)
            return(x)
            }
            output <- lapply(cropped,f2,OutPrj)
        #Use a 'for' loop to iterate writeRaster function for all cropped layers
        for(i in (1:max(length(filenames)))){           #
            writeRaster(output[[i]],paste(deparse(substitute(OutName)), i), format='ascii')
            }
            }
#############################################
###Example Code using function 'BatchCrop'###
#############################################
#Data layers to be cropped downloaded from: http://www.prism.oregonstate.edu/products/matrix.phtml?vartype=tmax&view=maps [testing was done using 1981-2010 monthly and annual normals; can use any .asc layer within the bounds of the PRISM data, with projection as lat/long and GRS80]
#Set Working Directory where data to be cropped are stored
setwd("D:/GIS/PRISM/1981-2010/TMin")
#Import Reference Layer
reference<-raster("D:/GIS/California/Hab Suitability Files/10m_DEM/10m DEM asc/DEM_10m.asc")
#Set Projection for Reference Layer
projection(reference) <- CRS("+proj=longlat +ellps=GRS80")
#Run Function [desired projection is UTM, zone 11, WGS84; desired output resolution is 800m]
BatchCrop(Reference=reference,OutName=TMinCrop,OutPrj="+proj=utm +zone=11 +datum=WGS84",OutRes=800)
于 2013-07-13T22:06:39.540 に答える