R:栅格列表中的栅格马赛克?

时间:2014-03-01 03:37:35

标签: r

我在这里的帖子中工作:How can I create raster mosaic using list of rasters?使用栅格列表创建栅格马赛克。 fmark给出的答案中的示例工作得很好但是当我使用自己的数据执行步骤时出现错误。不知道我哪里出错了,非常感谢任何帮助!

R version 2.15.3 (2013-03-01)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] C
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
other attached packages:
[1] raster_2.2-12 rgdal_0.8-10  sp_1.0-14
loaded via a namespace (and not attached):
[1] grid_2.15.3     lattice_0.20-15 tools_2.15.3

我使用How to iterate over a list preserving the format of the results?中的函数生成我的栅格列表。

ListRasters <- function(list_names) {
  raster_list <- list() # initialise the list of rasters
   for (i in 1:(length(list_names))){ 
    grd_name <- list_names[i] # list_names contains all the names of the images in .grd format
    raster_file <- raster(grd_name)
   }
  raster_list <- append(raster_list, raster_file) # update raster_list at each iteration
}

然后我生成列表名称并从中创建我的栅格列表。

wgs84.tif.list <- list.files(path=mod.dir, pattern=glob2rx("*_wgs84.tif"), full.names=T,recursive=F)

list_names <- NULL
for (i in 1:length(wgs84.tif.list)) {
  list_names <- c(list_names, wgs84.tif.list[i])
}

raster.list <-sapply(list_names, FUN = ListRasters)

raster.list$fun <- mean
mos <- do.call(mosaic, raster.list)

这是我得到的错误:

  

函数错误(classes,fdef,mtable):无法找到   用于签名'“缺失”的函数'mosaic'的继承方法,   “缺失”'

我的raster.list就像这样开始(它包含11个栅格):

 $`/import/c/w/kbennett/MODSCAG/snow-dav.jpl.nasa.gov/modscag-historic/2002/091/MOD09GA.A2002091.h08v03.005.2007124035032snow_fraction_wgs84.tif`
class       : RasterLayer
dimensions  : 2400, 2400, 5760000  (nrow, ncol, ncell)
resolution  : 463.3127, 463.3127  (x, y)
extent      : -11119737, -10007786, 5559984, 6671935  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : /import/c/w/kbennett/MODSCAG/snow-dav.jpl.nasa.gov/modscag-historic/2002/091/MOD09GA.A2002091.h08v03.005.2007124035032snow_fraction_wgs84.tif
names       : MOD09GA.A2002091.h08v03.005.2007124035032snow_fraction_wgs84
values      : 0, 255  (min, max)

3 个答案:

答案 0 :(得分:8)

我的栅格没有正确命名。为了纠正这个问题,在调用它之前:

names(rasters.list) <- NULL

然后:

raster.list$fun <- mean
mos <- do.call(mosaic, raster.list)

答案 1 :(得分:3)

扩大foo的答案。您可以使用sapply创建RasterLayer对象列表。

rlist <- sapply(list_names)

然后添加其他参数的名称。第一个是&#39; x&#39;并且&#39; y&#39; (见?马赛克)。但是如果它们是NULL(因为它们的位置将被使用)它也将起作用。

names(rlist)[1:2] <- c('x', 'y')
rlist$fun <- mean
rlist$na.rm <- TRUE

现在拨打do.call

x <- do.call(mosaic, rlist) 

答案 2 :(得分:0)

那呢?我是R的菜鸟。

lista = list of rasters
mosaicar = function(lista){
  raster = lista[[1]]
  for (i in 2:length(lista)){
    raster1 = mosaic(raster, lista[[i]], fun = max)
    raster = raster1
  }
  return(raster)
}