在大型光栅图像中使用extract()解决内存不足的解决方案

时间:2018-11-20 17:09:45

标签: r gis raster geotiff

我有一个Core i5 CPU和8GB RAM计算机,但是我想在一个像素块中使用R和光栅包(extract()函数)来进行像素计算(缓冲区的单位半径内的SD,偏度和峰度)。 geoTiff栅格,但是我的原始geoTiff图像的尺寸为6244(行),8721(ncol)和54453924(ncell)。此图像大小会导致内存不足,例如在下面的代码中:

### <code r>
#Packages
library(raster)
library(rgdal)
library(moments) #Measures of Skewness and Kurtosis

memory.limit(size=50000)#Increase memory

## Create artificial raster for my geoTiff simulation - dimensions  of my original geoTiff: 6244, 8721, 54453924  (nrow, ncol, ncell)
r <- raster(nc=8721, nr=6244) 
r <- setValues(r, round(runif(ncell(r))* 255))

##Create geoTiff
writeRaster(r, "r.tif", drivername="GTiff")

##Open geoTiff
r2<-raster("r.tif") 

#Extract all pixel coordinates in raster
coord_r<-coordinates(r2)

#Extract standard deviation, skewness and kurtosis
Buffer<-1
SD<-function (x, na.rm = TRUE)
{
if (is.matrix(x))
    apply(x, 2, sd, na.rm = na.rm)
else if (is.vector(x))
    sqrt(var(x, na.rm = na.rm))
else if (is.data.frame(x))
    sapply(x, sd, na.rm = na.rm)
else sqrt(var(as.vector(x), na.rm = na.rm))
}
desv_pad_R<-extract(r2, coord_r, buffer = Buffer, fun = SD)
str(desv_pad_R)
sk_R <-extract(r2,coord_r,buffer=Buffer, fun=skewness, na.rm = TRUE)
str(sk_R)
k_R <-extract(r2,coord_r,buffer=Buffer, fun=kurtosis, na.rm = TRUE)
str(k_R)
# <END code> 

使用同一台计算机并在R中工作可以解决我的问题的不同方法(例如,与SAGA GIS或GRASS集成,使用RQGIS,将图像转换为ASCII)。

非常感谢

0 个答案:

没有答案