模拟flt格式的栅格或网格

时间:2019-03-07 15:52:19

标签: r raster

我正在使用下面的代码模拟一系列填充有从现场获取的环境数据的空间网格。由于这些空间网格并未模拟空间中的实际点,因此我尚未定义任何因素(例如坐标系等)。但是,我现在需要将这些空间网格馈送到gdmEngine::TransformGrids()函数中,该函数要求它们位于in中。 flt格式。我完全不熟悉这种格式类型,尽管从我的搜索来看,它似乎是标准的ESRI文件类型。但是,通过我的搜索,我一直无法弄清楚如何将栅格定义为.flt格式,对此将不胜感激。

我用来模拟空间网格的代码是:

install.packages("devtools")
library(devtools)

install_github("cwarecsiro/gdmEngine/gdmEngine")
library(gdmEngine)

library(dplyr)
library(raster)
library(gdm)

## Create some example data
lt_list <- sample(c(1, 2, 3), 100, TRUE)
lt_map <- raster(matrix(lt_list, 10, 10))
lt_map[lt_map==3] <- "F"
lt_map[lt_map==2] <- "R"
lt_map[lt_map==1] <- "O"

ID <- c("F", "R", "O", "O", "R", "F", "F", "O", "R", "R")
A <- runif(10,0,10)
B <- runif(10,0,5)
C <- runif(10,0,15)

df <- data.frame(cbind(ID, A, B, C))

## My actual function
Create_Rasters <- function(variable_name, lt_map. = lt_map, df. = df){
  ## Make an empty dataframe with the same dimensions as the ltmap
  df_var_mat <- matrix(NA, nrow = NROW(lt_map.), ncol = NCOL(lt_map.))

  ## Select appropriate environmental values based on land use
  for (x in 1:NROW(df_var_mat)){
    for (y in 1:NCOL(df_var_mat)){
      land_use = as.matrix(lt_map.)[x,y]

      values_list <- df. %>%
        dplyr::filter(., ID == land_use) %>%
        dplyr::select(., variable_name)

      ## Choose a random value from the list
      df_var_mat[x,y] <- values_list[runif(1, 1, NROW(values_list)),]
    }
  }

  df_var_raster <- raster(df_var_mat)

  return(df_var_raster)
}

env_grids_list <- map(c("A", "B", "C"), 
                  Create_Rasters, lt_map. = lt_map, df. = df)

env_stack <- stack(env_grids_list)

1 个答案:

答案 0 :(得分:1)

在软件包的源代码中,它检查用于创建env_stack的磁盘上文件的格式。由于生成了堆栈,因此仅将其存储在内存中。您将必须将env_stack的内容写入磁盘,然后将其读回。

writeRaster(env_stack, 'env_stack.flt', format='EHdr')
env_stack <- stack('env_stack.flt')
#You may need to set the layer names in the stack to match the predictors in your model
names(env_stack) <- c('A', 'B', 'C')
TransformGrids(gdm.model = birds_gdm, env.grids.stk = env_rstack, extrap.method = "Conservative", output.folder = "Outputs")