查看原文
其他

R语言栅格数据并行计算,HDF批量转TIFF

走天涯徐小洋 走天涯徐小洋地理数据科学 2022-07-17

R语言栅格数据并行计算

昨天讲了GLASS数据的处理:全球陆表特征参量数据产品GLASS数据批量下载、裁剪、格式转换

多波段HDF数据读取和Geotiff转换方法

今天我发现GLASS数据有的HDF里面有两个波段,例如净辐射数据

  • http://www.glass.umd.edu/NR/2015/
    • 有两个波段,NR和QA
    • 这个时候使用terra包读取和裁剪数据会失败

经试验发现:

  • 可以使用gdalUtilsget_subdatasets获取子数据集名称
  • gdal_translate可以将HDF转换为GEOTIFF
  • for循环是单核处理,速度慢
for (i in 1:length(gldir)) {
  sds = get_subdatasets(gldir[i])
  gdal_translate(sds[1], dst_dataset = paste0("./NR/", gldate[i], ".tif"))  #gldate是时间序列
}

for循环并行计算

  • 使用foreach包可以对for循环执行并行计算
  • 使用doPrarllel包启动多核心
  • 具体数据处理执行速度不仅仅是并行计算决定的,对于HDF数据处理来说更多限制于硬盘
    • 在这里我使用了8个核心,没有使用全部的
    • 使用foreach函数改写for循环,注意需要声明for循环中引用的程序包
library(foreach)
library(doParallel)
cl = makeCluster(8)   #指定核心数
registerDoParallel(cl)

foreach(i=1:length(gldir), .packages = 'gdalUtils')%dopar%{
  sds = get_subdatasets(gldir[i])
  gdal_translate(sds[1], dst_dataset = paste0("./NR/", gldate[i], ".tif"))
}
stopCluster(cl)   #执行完关闭多核

转换完成后,就可以随便想用啥用啥裁剪了。

GDAL无法找到怎么办

gdalUtils有时无法识别GDAL按照目录

GDAL无法识别警告

这个时候怎么办呢?需要使用gdal_setInstallation人工指定一下GDAL安装目录

  • QGIS安装目录下有GDAL,具体可以搜索一下gdalinfo.exe
GDAL就是gdalinfo.exe的所在目录

运行下面的代码即可给gdalUtils指定GDAL目录,上面的代码即可成功运行。

gdal_setInstallation(search_path = "F:/Program Files/QGIS 3.16/bin")


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存