【问题标题】:r Terra issue with multicategorical raster. How to properly extract the categories and their values into layers without losing data?r 多类别栅格的 Terra 问题。如何在不丢失数据的情况下正确地将类别及其值提取到图层中?
【发布时间】: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、树冠覆盖等,我没有遇到过这个问题。只有这些栅格具有多个类别(或属性表中的列)

编辑 这是休息图片

【问题讨论】:

    标签: r terra


    【解决方案1】:

    失败是因为 (ESRI) 增值税 ID 不在预期的(对于 GDAL 类别)0..255 范围内。现在已修复此问题,我得到:

    library(terra)
    #terra version 1.4.6
    r <- rast("LC16_HDst_200.tif")
    activeCat(r) <- 4
    r <- crop(r, ext(-93345, -57075, 1693125, 1716735))
    plot(r)
    

    【讨论】:

    • 所以我复制了你的代码并且它可以工作,但是,由于某种原因,当我在美国西部进行作物时,它会中断,我的界限在美国的北部和南部,所以我想知道是否这就是造成它的原因。当我裁剪到我的状态时,它可以工作。当我绘制完整的数据时,它可以工作。我还注意到重新投影会导致类似的问题。 Catalyze 正在做同样的问题,似乎只取属性表的第一行。绘图肯定效果更好,但催化效果不佳,这使得我需要做的事情变得更加棘手。
    • 这是有用的反馈。 “它坏了”不是很具有描述性,如果你展示你的所作所为会非常有用;以及您收到的信息,也许是在一个新问题中。一次问一个问题也更好。例如。催化是另一回事。
    • 所以当我做r &lt;- rast("LC16_HDst_200.tif") r &lt;- crop(r, ext(-3213000,583010, 764000,3947040)) activeCat(r) &lt;- 4 plot(r) 时,我得到了在主帖编辑中添加的图像。 (我无法快速找到如何将图像放入 cmets)。我得到了相同类型的图像,但如果我重新投影,对我们整个人来说。稍后我会在单独的帖子中进行催化
    • 好的,我现在明白了。这是因为它是一个很大的区域,并且必须将值写入(临时)文件。我需要添加编写 ESRI VAT 的功能。
    • 我认为这是一个大面积问题。我很高兴它现在得到了澄清,我可以继续处理催化问题,顺便说一句,非常感谢您的帮助!
    猜你喜欢
    • 2021-11-30
    • 2021-09-08
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多