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

裁剪SpatRaster后原始栅格负值丢失问题求助

栅格裁剪后负值丢失问题解决

问题

使用terra包的crop工具从全球气候SpatRaster中提取美国和加拿大区域数据时,裁剪后的栅格丢失了原始数据中的负值,不符合预期。原代码及问题现象如下:

require(countrycode)
ISO <- countrycode(c("US", "Canada"), origin = 'country.name', destination = 'iso3c')
[1] "USA" "CAN"
# shapefile
require(geodata)
shp <- gadm(country=ISO, level=0, 
                  path = ("North_Am", "Shapefile", sep="/"),
                  version="latest")

shp <- crop(shp, ext(-170, -50, 25, 90))

# 气候栅格
r <- "Bio6_1981-2010.tif" %>% rast(.)

datatype(r)
"INT2U"

require(terra)
cshp <- crop(r, shp, mask=TRUE)
cshp
class       : SpatRaster 
dimensions  : 6973, 14086, 1  (nrow, ncol, nlyr)
resolution  : 0.008333333, 0.008333333  (x, y)
extent      : -170.0001, -52.61681, 24.99986, 83.10819  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source      : memory
name        : Bio6_1981-2010 
min value   :              0 # 此处不应丢失负值,但实际丢失了
max value   :             20

plot(cshp)

裁剪后的栅格可视化

原因

问题出在原始栅格的数据类型上:datatype(r)返回"INT2U",即无符号16位整数,这种数据类型的取值范围是0到65535,无法存储负值。原始数据中的负值会被自动转换为0,导致裁剪后结果丢失负值信息。

解决方案

先将栅格转换为支持负值的数据类型(比如有符号16位整数INT2S或浮点型FLT4S),再执行裁剪和掩膜操作。修改后的代码如下:

# 加载依赖包
library(countrycode)
library(geodata)
library(terra)
library(magrittr)

# 获取美加两国ISO3代码
ISO <- countrycode(c("US", "Canada"), origin = 'country.name', destination = 'iso3c')

# 获取行政区划矢量并裁剪范围
shp <- gadm(country=ISO, level=0, 
            path = file.path("North_Am", "Shapefile"),
            version="latest")
shp <- crop(shp, ext(-170, -50, 25, 90))

# 读取气候栅格并转换数据类型
r <- rast("Bio6_1981-2010.tif")
# 转换为有符号16位整数(支持负值)
r <- rast(r, datatype = "INT2S")

# 执行裁剪+掩膜
cshp <- crop(r, shp, mask=TRUE)

# 查看结果
cshp

补充说明

  • INT2S是有符号16位整数,取值范围为-32768到32767,足以存储多数气候数据的负值;如果需要更高精度,可选择FLT4S(32位浮点型)。
  • 若直接转换类型无效,可先将栅格写入本地再重新读取:
    writeRaster(r, "Bio6_signed.tif", datatype="INT2S", overwrite=TRUE)
    r <- rast("Bio6_signed.tif")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:33:18