我在 R 中有一个栅格作为
stars
对象,其属性是一个因子。当我使用 write_stars
将栅格保存到 tif 文件时,因子级别会丢失,并且仅存储整数。我在某处读到我需要的是创建一个栅格属性表。这可以使用 stars
来完成吗?
这是一个表示:
library(stars)
#> Loading required package: abind
#> Loading required package: sf
#> Linking to GEOS 3.11.2, GDAL 3.6.2, PROJ 9.2.0; sf_use_s2() is TRUE
m <- matrix(letters[1:9], nrow = 3, ncol = 3)
dim(m) <- c(x = 3, y = 3) # named dim
s <- st_as_stars(m)
s[["A1"]] <- factor(s[["A1"]])
plot(s)
write_stars(s, "reprex.tif")
创建于 2024-01-31,使用 reprex v2.1.0
这就是 TIF 图例在 QGIS 中的样子:
我假设您在与同事分享之前已经
QGIS
测试一下这对他们来说效果如何,但我认为我在评论中让事情看起来比需要的更复杂。您想查看 ?terra::coltab
的“颜色表”,
我绕道而过
s_rast = rast(s)
plot(s_rast)
coltb = data.frame(values=1:9, col = rainbow(9, end = .9))
coltb
values col
1 1 #FF0000
2 2 #FFAC00
3 3 #A6FF00
4 4 #00FF06
5 5 #00FFB3
6 6 #009FFF
7 7 #0D00FF
8 8 #B900FF
9 9 #FF0099
has.colors(s_rast)
[1] FALSE
coltab(s_rast) <- coltb
plot(s_rast)
writeRaster(s_rast, 'sof77912406.tif') # this SO ? #
s_rast2 = rast('sof77912406.tif')
has.colors(s_rast2)
[1] TRUE
plot(s_rast2)
s_rast2_stars <- st_as_stars(s_rast2)
plot(s_rast2_stars)
s_rast2_stars
stars object with 2 dimensions and 1 attribute
attribute(s):
sof77912406.tif
a :1
b :1
c :1
d :1
e :1
f :1
(Other):3
dimension(s):
from to offset delta refsys x/y
x 1 3 0 1 WGS 84 (CRS84) [x]
y 1 3 3 -1 WGS 84 (CRS84) [y]
s_rast2
class : SpatRaster
dimensions : 3, 3, 1 (nrow, ncol, nlyr)
resolution : 1, 1 (x, y)
extent : 0, 3, 0, 3 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84)
source : sof77912406.tif
color table : 1
categories : A1
name : A1
min value : a
max value : i
write_stars(s_rast2_stars, 'sof77912406_stars.tif')
s_rast2_stars_2 = read_stars('sof77912406_stars.tif')
plot(s_rast2_stars_2)
对于您的目的来说,这并不令人满意,因为我已经丢失了与星星对象中的绘图颜色相关的因子值...因此,更深入地挖掘星星,但也许允许您测试
中出现的颜色QGIS
。