2015-11-04 60 views
3

我正在研究空間多邊形數據框(spdf)數據集。此數據集包含每月氣候數據的時間序列。我想要實現的是將spdf轉換爲1000米分辨率的光柵堆棧以進行進一步的統計分析。我已經寫了一個R代碼,但速度很慢,需要很長時間才能轉換成一列。我希望你們中的任何一位能提供提示,讓它更快。如何在將大空間多邊形數據框轉換爲柵格堆棧時提高速度

hru<-readOGR("E:\\Tade\\HRU\\ubn_merge.shp",layer="ubn_merge") # spatial polygon 
spdf<-merge(hru,spdf.2000,by.x="HRU",by.y="HRU",all.x=T,sort=F) # spdf nrow=565 ncol=375 
# convert sp to raster 
hru.ras<-raster(hru,resolution=1000) # raster hru shape to 1km 
for (i in 1:length(spdf){ 
    et.ras<-rasterize(spdf,hru.ras,field=paste("m",1,sep="")) # rasterize 
    et.stack<-stack(et.stack,et.ras) 
} 

感謝

+1

以我的經驗,你正在使用R和'rasterize()'函數來完成這個任務。從我的測試中,直接使用'gdal_rasterize'實用程序時,從矢量到柵格的轉換更易於管理。我使用系統調用來調用它,例如'系統(paste0(「gdal_rasterize -burn 1 -l census_buffer」,census_buffer_path,「/tmp/census_mask.tif」))等等,這明顯認爲'gdal'實用程序在你的路徑中。 –

+0

@ ForrestR.Stevens謝謝你。 – Tade

回答

3

正如福雷斯特說(和你經歷過),rasterize是慢了一點,但你可以做的比你現在有什麼要好得多。您根本不需要使用循環:

r <- raster(spdf, resolution=1000) 
et.ras <-rasterize(spdf, r, field=paste0("m",1:ncol(spdf))) 

這將創建一個具有柵格屬性表的單獨柵格圖層。要創建RasterStack,做到:

​​

如果你使用一個迴路,使用rasterize只有一次,得到多邊形ID,然後用subs感興趣的實際變量。

當然,這可以爲您節省外部依賴的痛苦。

+0

謝謝。速度顯着提高(幾小時到幾分鐘)。 – Tade

+0

一如既往的羅伯特,你提供了許多思想(以這樣一種好的方式)。我沒有想到你所描述的方法,實際上我認爲這會提高我的一些使用情況下對'gdal_rasterize'發出多個調用的性能。謝謝! –

相關問題