【发布时间】:2021-11-21 22:10:41
【问题描述】:
我正在与 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() 的函数声称可以获取您的类别并将它们全部转换为数字层
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 对应“名称”names: DIST_TYPE min values: 8 max values: 8 的最小值和最大值。其他类别显示出类似的模式。所以它似乎只取每个类别的第一行值并制作整个层。
总之,很明显,如果将数据集引入 arcgis,则 terra 存储了属性表中很容易看到的所有值。但是,每当我尝试绘制它或使用它时,即使在任何真正的操作之前,它也只会访问该属性表的第一行,而当我催化时,它似乎只会让一切变得更加混乱。我知道这在 arcgis pro 中很容易解决,但从文档一致性的角度来看,我想将所有内容都保留在 r 中。任何 terra 高手知道该怎么做吗?我认为它必须非常简单,但我真的不知道还有什么可以尝试的。也许这也是一些重大问题。我对 LANDFIRE evt 数据有同样的问题。对于简单的栅格,例如 dem、树冠覆盖等,我没有遇到过这个问题。只有这些栅格具有多个类别(或属性表中的列)
【问题讨论】: