r 多类别栅格的 Terra 问题。如何在不丢失数据的情况下正确地将类别及其值提取到图层中?
r Terra issue with multicategorical raster. How to properly extract the categories and their values into layers without losing data?
我正在使用 rTerra 并在此处找到来自 LANDFIRE 的 CONUS 历史扰动数据集有问题:https://landfire.gov/version_download.php(HDist 是名称)。总结一下我想做的事情,我想在我的范围内使用这个数据集、裁剪和投影,然后获取单元格的值并将它们分离为图层。所以我想要一层表示严重性,一层表示扰动类型等。历史扰动数据将这些都包含在一个属性中 table。在 terra 中,这个属性 table 是在类别下设置的,这会带来很多问题。我没有遇到裁剪问题,也没有重新投影,它正在进入价值并将类别分成几层。我有以下代码
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。 None 其他人。有一个名为 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 会存储很容易在属性 table 中看到的所有值。然而,每当我尝试绘制或使用它时,即使在任何真正的操作之前,它也只会访问该属性的第一行 table,而当我催化时,它似乎只会把一切搞得更糟。我知道这在 arcgis pro 中很容易解决,但我想从文档一致性的角度保留 r 中的所有内容。任何 terra whizzes 知道该怎么做?我认为它必须非常简单,但我真的不知道还能尝试什么。也许这也是一些重大问题。我对 LANDFIRE evt 数据有同样的问题。我没有遇到简单栅格的问题,例如 dem、树冠覆盖等。只有这些栅格具有多个类别(或属性中的列 table)
编辑
这是中断图像
失败,因为 (ESRI) VAT 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)
我正在使用 rTerra 并在此处找到来自 LANDFIRE 的 CONUS 历史扰动数据集有问题:https://landfire.gov/version_download.php(HDist 是名称)。总结一下我想做的事情,我想在我的范围内使用这个数据集、裁剪和投影,然后获取单元格的值并将它们分离为图层。所以我想要一层表示严重性,一层表示扰动类型等。历史扰动数据将这些都包含在一个属性中 table。在 terra 中,这个属性 table 是在类别下设置的,这会带来很多问题。我没有遇到裁剪问题,也没有重新投影,它正在进入价值并将类别分成几层。我有以下代码
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。 None 其他人。有一个名为 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 会存储很容易在属性 table 中看到的所有值。然而,每当我尝试绘制或使用它时,即使在任何真正的操作之前,它也只会访问该属性的第一行 table,而当我催化时,它似乎只会把一切搞得更糟。我知道这在 arcgis pro 中很容易解决,但我想从文档一致性的角度保留 r 中的所有内容。任何 terra whizzes 知道该怎么做?我认为它必须非常简单,但我真的不知道还能尝试什么。也许这也是一些重大问题。我对 LANDFIRE evt 数据有同样的问题。我没有遇到简单栅格的问题,例如 dem、树冠覆盖等。只有这些栅格具有多个类别(或属性中的列 table)
编辑
这是中断图像
失败,因为 (ESRI) VAT 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)