为何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
相关产品推荐
相关产品推荐

