我正在与 rTerra 合作,并且在此处发现了来自 LANDFIRE 的 CONUS 历史干扰数据集的问题:https ://landfire.gov/version_download.php (HDist 是名称)。总结一下我想做的事情,我想把这个数据集,裁剪和投影到我的范围内,然后取单元格的值并将它们分离为层。所以我想要一个严重性层,一个用于干扰类型等。历史干扰数据将这些东西都放在一个属性表中。在 terra 中,此属性表是在类别下设置的,这带来了很多问题。我没有遇到裁剪或重新投影的问题,它正在进入值并将类别分成层。我有以下代码
library(terra)
setwd("your pathway to historical disturbance tif here")
h1 <- terra::rast("LC16_HDst_200.tif") #read in the Hdist tif
h2 <- terra::project(h1, "EPSG:5070", method = "near") #project it using nearest neighbor
h3 <- crop(h2, ext([xmin,xmax,ymin,ymax]) #crop to the extent
h3
然后,这给出了我想要的范围和投影的输出,但主要关注的是类别
categories : Count, HDIST_ID, DISTCODE_V, DIST_TYPE, TYPE_CONFI, SEVERITY, SEV_CONFID, HDIST_CAT, FDIST, R, G, B
所以我了解到,对于这些类型的数据集,值存储在这些类别下。如果我用我绘图,plot(h3)
我只会得到计数类别的第一行。为了切换该类别,我可以使用
activeCat(h3) <- 4
h3
我会得到
name : DIST_TYPE
min value : Clearcut
max value : Wildland Fire Use
默认的活动类别是计数,但现在它的 DIST_TYPE,第四个类别,没什么太疯狂的。我尝试绘图
plot(h3)
我只绘制了 NoData。其他都没有。有一个名为catalyze()
That 声称可以获取您的类别并将它们全部转换为数字层的功能
h4 <- catalyze(h3)
这给了我一个 13 层的数据集,这是有道理的,因为有 13 个类别,它需要它们并将它们转换为数字层。我试着绘图
plot(h4, 4) #plot h4 layer 4, which would correspond to DIST_TYPE category
它只绘制 8 的值,并且看起来只显示可能的 noData 值。该地图大部分为绿色,与 HDist 中的 NoData 内联。每当我尝试直接访问值时,它都会崩溃。当我查看最小值和最大值时,我得到 8 和 8 的 min 和 max 的“名称” names: DIST_TYPE min values: 8 max values: 8
。其他类别显示类似的模式。所以它似乎只取每个类别的第一行值并使其成为整个层。
总之,很明显,如果将数据集引入 arcgis,则 terra 存储了属性表中很容易看到的所有值。但是,每当我尝试绘制它或使用它时,即使在任何真正的操作之前,它也只会访问该属性表的第一行,而当我催化时,它似乎只会让一切变得更加混乱。我知道这在 arcgis pro 中很容易解决,但是从文档一致性的角度来看,我想将所有内容都保留在 r 中。任何 terra 高手知道该怎么做吗?我认为它必须非常简单,但我真的不知道还有什么可以尝试的。也许这也是一些重大问题。我对 LANDFIRE evt 数据有同样的问题。对于简单的栅格,例如 dem、树冠盖等,我没有遇到过这个问题。