You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提取高程栅格时遇磁盘空间不足错误的技术咨询

问题:下载大区域高程栅格时磁盘空间不足的解决办法

我正尝试生成高程栅格,为一组14630个观测值的点数据计算地形起伏指数(TRI),这些点覆盖美国西南部大部分区域。示例代码如下:

#load packages
library(geodata)
library(elevatr)
library(raster)

#simulate point data
longitude<-runif(n=14630, min=-115.4333, max=-108.6997)
latitude<-runif(n=14630, min=32.45918, max=37.20805)
pts<-data.frame(longitude,latitude)

#change dataframe to a spatial points object
coordinates(pts) = c("longitude", "latitude") # specify column names
class(pts)

#definining the lonlat projection
prj_dd <- "+proj=longlat +datum=NAD83"

#download a raster layer using the spatialpoints object as input
#zoom specifies the resolution
elevation <- get_elev_raster(pts, z = 13,prj=prj_dd,override_size_check=TRUE) 

运行代码时,使用elevatr包的get_elev_raster函数持续出现以下错误:

Error in sf::gdal_utils(util = "warp", source = files, destination = destfile, :
gdal_utils warp: an error occured

附带警告信息:

In addition: Warning message:

In CPL_gdalwarp(source, destination, options, oo, doo, quiet, "-overwrite" %in% :
GDAL Error 3: C:\Users\name\AppData\Local\Temp\Rtmps3PYwn\file32b8e4c79d6.tif: Free disk space available is 8839901184 bytes, whereas 21476933632 are at least necessary. You can disable this check by defining the CHECK_DISK_FREE_SPACE configuration option to FALSE.

我的判断是要下载的栅格过大导致磁盘空间不足,请问这个判断是否正确?如果正确,有没有办法在保留所需高程数据(包含点数据所在单元格及其8个相邻单元格的高程)的前提下减小栅格大小,或者有什么释放磁盘空间的方法?


解答

  1. 判断正确性:是的,你的判断完全准确。错误信息清晰表明磁盘可用空间(约8.8GB)远小于生成目标栅格所需的最小空间(约21.5GB),这是报错的直接原因。z=13的分辨率对于美国西南部这样大的区域来说,生成的栅格文件体积会非常庞大,超出了当前磁盘的承载能力。

  2. 保留必要数据前提下缩减栅格体积的方案:

    • 降低分辨率:如果业务场景允许,将get_elev_raster中的z参数调小(例如z=10或z=11)。低分辨率栅格的文件体积会显著降低,同时仍能满足TRI计算中获取目标点8邻域高程的需求。
    • 裁剪至点的邻域范围:不下载整个区域的栅格,而是仅下载覆盖所有点及其8邻域的最小范围:
      1. 将点转换为sf对象,为每个点创建覆盖自身及8邻域的缓冲(缓冲距离需匹配z=13的栅格分辨率,z=13在WGS84下的单元格宽度约为0.0002度,可设置缓冲为0.0003度确保覆盖邻域);
      2. 合并所有缓冲区域得到最小边界;
      3. 基于这个合并后的边界下载栅格。示例代码如下:
        library(sf)
        # 转换为sf对象
        pts_sf <- st_as_sf(pts, crs = prj_dd)
        # 创建覆盖点及邻域的缓冲
        pts_buffer <- st_buffer(pts_sf, dist = 0.0003)
        # 合并所有缓冲
        merged_extent <- st_union(pts_buffer)
        # 下载合并范围内的栅格
        elevation <- get_elev_raster(merged_extent, z=13, prj=prj_dd, override_size_check=TRUE)
        
    • 分块处理:将点数据按地理区域划分成若干子集,分别下载对应区域的栅格,计算每个子集的TRI后再合并结果,避免一次性加载超大栅格。
  3. 临时释放磁盘空间的方法:

    • 清理系统临时文件夹:手动删除C:\Users\name\AppData\Local\Temp\下的过期临时文件,释放被临时文件占用的空间;
    • 关闭占用磁盘的后台程序:暂停大型文件下载、视频渲染等占用大量磁盘IO的任务,释放更多可用空间;
    • 临时禁用GDAL磁盘检查:在代码开头添加Sys.setenv(CHECK_DISK_FREE_SPACE=FALSE),但仅在确认磁盘后续能容纳文件或可接受风险时使用,强制写入可能导致磁盘耗尽后程序崩溃或系统异常。

内容的提问来源于stack exchange,提问作者Jason Edelkind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:47:07