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

Terra处理多分类栅格异常:绘图提示未知分类求解决方案

Terra绘制分类栅格报错:unknown categories in raster values 解决思路

问题描述

使用Terra包处理基岩类型分类栅格,该栅格的SpatRaster属性信息如下:

class       : SpatRaster 
dimensions  : 4346, 5235, 1  (nrow, ncol, nlyr)
resolution  : 0.008333333, 0.008333333  (x, y)
extent      : -10.62514, 32.99986, 34.99986, 71.21653  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source      : lithology.tif 
categories  : xx 
name        : xx 
min value   : sc 
max value   : ig 

执行plot(x)命令绘制栅格时触发报错:

plot(x)
#[plot] unknown categories in raster values

该问题导致后续依赖此栅格的模型均无法正常运行。

R会话及Terra相关版本信息:

R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.6 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3 
LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3;  LAPACK version 3.9.0

locale:
 [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C               LC_TIME=fr_FR.UTF-8       
 [4] LC_COLLATE=fr_FR.UTF-8     LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8   
 [7] LC_PAPER=fr_FR.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C        

time zone: Europe/Paris
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] terra_1.7-71 sf_1.0-15    abind_1.4-5 

loaded via a namespace (and not attached):
 [1] vctrs_0.6.5        cli_3.6.2          rlang_1.1.3        DBI_1.2.1          processx_3.8.3    
 [6] KernSmooth_2.23-22 generics_0.1.3     glue_1.7.0         e1071_1.7-14       pkgbuild_1.4.3    
[11] ps_1.7.6           fansi_1.0.6        grid_4.3.2         tibble_3.2.1       classInt_0.4-10   
[16] lifecycle_1.0.4    compiler_4.3.2     dplyr_1.1.4        codetools_0.2-19   pkgconfig_2.0.3   
[21] Rcpp_1.0.12        rstudioapi_0.15.0  R6_2.5.1           tidyselect_1.2.0   utf8_1.2.4        
[26] class_7.3-22       parallel_4.3.2     pillar_1.9.0       curl_5.2.0         callr_3.7.3       
[31] magrittr_2.0.3     tools_4.3.2        proxy_0.4-27       units_0.8-5        remotes_2.4.2.1   
[36] desc_1.4.3     

terra::gdal(lib="")
    gdal     proj     geos 
 "3.4.3"  "8.2.0" "3.10.2" 

解决思路

1. 检查分类映射一致性

  • 执行unique(x)获取栅格中的所有唯一值,再用cats(x)查看已定义的分类映射,确认两者是否完全匹配。如果unique(x)中存在cats(x)未包含的值,就会触发该报错。
  • 若发现缺失分类,手动补充:通过cats(x)[[1]]获取分类数据框,添加缺失的行后用cats(x) <- new_cats更新分类映射。

2. 修复损坏的分类信息

  • 若分类信息损坏,尝试重新构建分类:
# 提取唯一值并创建分类映射
unique_vals <- unique(x)
new_cats <- data.frame(value = unique_vals, category = as.character(unique_vals))
# 重新设置分类
x <- as.factor(x)
cats(x) <- new_cats

3. 验证栅格文件完整性

  • 用x <- rast("lithology.tif")重新加载栅格文件,再次检查属性和分类信息,确认文件未损坏。
  • 若文件本身存在问题,可尝试用GDAL命令行工具修复:gdal_translate lithology.tif fixed_lithology.tif,再读取修复后的文件。

4. 版本兼容性排查

  • 执行install.packages("terra")升级Terra到最新版本,新版本可能修复了分类栅格的绘图bug。
  • 若升级Terra后仍有问题,Ubuntu环境下可通过sudo apt-get update && sudo apt-get install libgdal-dev更新GDAL库,验证版本兼容性。

5. 临时绕过分类绘图

  • 若需紧急绘图,可先将栅格转为普通数值型:plot(as.numeric(x)),但这只是临时方案,仍需修复分类信息以解决后续模型依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:44:53