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

为何terra对同一栅格输出不同数值范围?

关于terra包读取/统计GRIP道路密度栅格时数值范围不一致的问题

我用R语言的terra包读取、保存全球栅格数据集时,发现同一数据因查看或操作方式不同,数值范围差异极大,无法正常开展分析,特此请教原因。

以GRIP全类型总道路密度ASCII栅格为例,导入代码如下:

roadDir <- c("downloads/GRIP4_density_total/")
tmp <- paste0(roadDir, "grip4_total_dens_m_km2.asc")
roadDensity <- terra::rast(tmp)

查看roadDensity对象时,显示数值范围为0至99445(米/平方公里):

> roadDensity
class       : SpatRaster 
dimensions  : 2160, 4320, 1  (nrow, ncol, nlyr)
resolution  : 0.08333333, 0.08333333  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 
source      : grip4_total_dens_m_km2.asc 
name        : grip4_total_dens_m_km2 
min value   :                      0 
max value   :                  99445 

将原始数据导入QGIS后,像元大小、维度及数值范围与上述结果一致,我认为这是数据的真实值。但出现两个异常问题:

a) 数据统计结果异常

使用terra::global函数统计时,最大值变为330306:

terra::global(roadDensity, c( "min", "max"), na.rm=TRUE)
                       min    max
grip4_total_dens_m_km2   0 330306

b) 导出TIFF后数值范围异常

使用writeRaster导出为datatype="INT4U"的TIFF后,重新读取该文件的数值范围同样是0至330306:

x <- writeRaster(roadDensity,"test.tif", datatype="INT4U", overwrite=TRUE)
x
class       : SpatRaster 
dimensions  : 2160, 4320, 1  (nrow, ncol, nlyr)
resolution  : 0.08333333, 0.08333333  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source      : test.tif 
name        : grip4_total_dens_m_km2 
min value   :                      0 
max value   :                 330306 

我理解writeRaster的datatype参数会受数据结构最大取值限制影响,但无法理解INT4U为何会大幅扩大原始数值范围;同时datatype不应影响global函数的统计结果,恳请解惑以助后续分析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:47:22