在R中使用gdal_calc.py的包装函数

时间:2018-12-08 15:39:40

标签: r geospatial gdal rgdal

R通过gdalUtils软件包为gdal库提供包装。我想将gdal_calc.py函数用于栅格计算,但是,我没有在包中找到有关此特定功能的信息。我创建了自己的包装函数,该函数可以工作,但是通常不是100%完美,仅在Linux上有效。它也没有原始的灵活(如果感兴趣,请参阅下文)。 R中还有其他实现吗?

f.gdal.calc<-function(path.in.r.1,
                      #r1.band=1,
                      path.in.r.2,
                      # r2.band=1,
                      path.out.r,
                      my.fun="A*B",#defaults to multiplication
                      r.datatype="Float32",
                      cachemax=2000, 
                      overwrite=FALSE, # caution, can destroy data
                      printcommand=FALSE,# should the commad be printed prior to execution? Can help debugging 
                      bigtiff=F,
                      compression=F) 
{gdalcommand<-paste("gdal_calc.py ",
                    "-A ",path.in.r.1,
                    # " --allBands A ",
                    #"--A_band=",r1.band,
                    " -B ",path.in.r.2,
                    #"--b_band=",r2.band,
                    " --outfile=",path.out.r,
                    " --calc=",shQuote(my.fun,type = "cmd"),# supply function as character like "A+B"
                    " --type ",r.datatype,
                    ifelse(overwrite==TRUE,paste(" --overwrite"),paste("")),
                    ifelse(compression==TRUE,paste(" --co COMPRESS=LZW"),paste("")), #should not be enabled when creating bigtiffs
                    ifelse(bigtiff==TRUE,paste(" --co BIGTIFF=YES"),paste("")),
                    sep=""
                     ) 
if(printcommand==T){print(gdalcommand)}
system(gdalcommand)
}

2 个答案:

答案 0 :(得分:0)

根据开发人员的说法,elapsed到目前为止尚未实现基于python的gdal函数。因此,如果您想使用gdal_Utils进行R中的栅格计算,则需要创建自己的包装函数,类似于上面的函数。

答案 1 :(得分:0)

现在您可以在“agroEcoTradeoff”R 包中使用“rast_math”和“gdal_calc”函数:

https://rdrr.io/github/marcusspiegel/agroEcoTradeoff/src/R/rast_math.R

希望有用!