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

求助:如何提取SpatRaster对象CLASS_NAME类别中的特定作物子集?

提取USDA作物覆盖SpatRaster中CLASS_NAME特定类别

问题描述

我有一个来自USDA的作物覆盖SpatRaster对象,该栅格为单图层分类栅格,附带RED、GREEN、BLUE、CLASS_NAME、OPACITY五类属性信息。尝试提取CLASS_NAME中的特定作物(如"CORN")时失败,原栅格对象信息如下:

> usda
class       : SpatRaster 
dimensions  : 15133, 24345, 1  (nrow, ncol, nlyr)
resolution  : 30, 30  (x, y)
extent      : 1204695, 1935045, 1829055, 2283045  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs 
source      : CDL_2023_clip_20240401121659_1498934739.tif 
color table : 1 
categories  : RED, GREEN, BLUE, CLASS_NAME, OPACITY 
name        : RED 
min value   :  NA 
max value   :  NA 

尝试使用terra::subset时出现以下问题:

  • 执行usda_sub <- subset(usda, "RED"),输出与原对象无变化;
  • 执行usda_sub <- subset(usda, "CLASS_NAME")或usda_sub <- subset(usda, "Corn")均报错:
> usda_sub <- subset(usda, "CLASS_NAME")
Error: [subset] invalid name(s)

> usda_sub <- subset(usda, "Corn")
Error: [subset] invalid name(s)

我理解如何按name元素子集化SpatRaster图层,但不清楚如何基于CLASS_NAME这类分类属性提取特定作物。

解决方案

你的核心误区是混淆了SpatRaster的图层(name)和分类属性(categories):该对象是单图层栅格,name显示为"RED"是因为该图层关联了颜色属性,而categories是该图层像元数值对应的分类标签集合,并非独立图层。因此不能用subset提取分类属性,需通过以下步骤操作:

  1. 查看分类数值与标签的对应关系
    使用terra::cats()函数获取栅格的分类映射表:
cat_table <- cats(usda)[[1]]
print(cat_table)

输出会是一个数据框,包含ID(像元数值)、RED、GREEN、BLUE、CLASS_NAME、OPACITY列,你可以从中找到目标作物(如"CORN")对应的ID值。

  1. 提取目标作物的像元
    找到目标作物的ID值后,通过逻辑运算提取对应像元:
# 假设CORN对应的ID是1(替换为实际ID)
corn_mask <- usda == 1
# 若需要保留原栅格的分类属性,可使用classify函数
usda_corn <- classify(usda, matrix(c(1, 1, NA, NA), ncol=2, byrow=TRUE))
  • corn_mask会生成一个二值栅格(1表示CORN,0表示其他);
  • classify方法会保留CORN的像元值,将其他像元设为NA,同时保留原分类属性。
  1. 批量提取多个作物(如CORN和CRANBERRIES)
    如果需要提取多个作物,先找到它们对应的ID列表,再用%in%运算:
# 假设CORN对应ID=1,CRANBERRIES对应ID=2
target_ids <- c(1, 2)
multi_crop_mask <- usda %in% target_ids

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:13:26