我使用的是Terra版本1.7-29(以前在1.6-17中也有同样的问题)。
我的数据
我有一个双层栅格数据集(download it here):
prediction <- terra::rast('path/to/raster.tif')
names(prediction) <- c('prediction', 'validation')
它看起来像这样:
class : SpatRaster
dimensions : 202, 294, 2 (nrow, ncol, nlyr)
resolution : 2, 2 (x, y)
extent : 1978598, 1979186, 889666, 890070 (xmin, xmax, ymin, ymax)
coord. ref. : WGS 84 / NSIDC Sea Ice Polar Stereographic North (EPSG:3413)
source : 000.tif
names : prediction, validation
问题
我想从第二层“验证”创建一个矢量多边形数据集,但as.polygons()
似乎从第一层“预测”开始工作。
val_poly <- as.polygons(subset(prediction, 'validation'))
plot(val_poly)
我尝试过的其他事情
我还尝试先将验证层设为子集,然后将其提供给as.polygons()
(允许我检查子集是否按预期工作),但它对多边形输出没有影响。
val_layer <- subset(prediction, 'validation')
val_poly <- as.polygons(val_layer)
subset(prediction, 'validation')
plot(subset(prediction, 'validation'))
class : SpatRaster
dimensions : 202, 294, 1 (nrow, ncol, nlyr)
resolution : 2, 2 (x, y)
extent : 1978598, 1979186, 889666, 890070 (xmin, xmax, ymin, ymax)
coord. ref. : WGS 84 / NSIDC Sea Ice Polar Stereographic North (EPSG:3413)
source : 000.tif
name : validation
不可复制
- (至少使用手工SpatRaster)*
当我手工制作一个2层SpatRaster并将第2层转换为多边形时,它可以按预期工作。这让我考虑了两个选择:
1.我的数据集可能有问题,或者
1.有一些与terra如何处理磁盘上的文件有关的错误(但这超出了我的编码知识舒适区)。
r1 <- rast(ncol=4, nrow=4)
names(r1) <- c('r1')
r2 <- deepcopy(r1)
names(r2) <- c('r2')
set.seed(0)
values(r1) <- c(0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0)
set.seed(1)
values(r2) <- c(0, 0, 0, 1,
0, 0, 1, 1,
0, 0, 1, 1,
0, 0, 0, 0)
r <- c(r1, r2)
plot(r)
test <- as.polygons(r[['r2']])
plot(test)
1条答案
按热度按时间n9vozmp41#
下面的工作与terra 1.7-32(目前的开发版本);但是对于当前的CRAN版本,存在需要简单解决的问题。
x1c 0d1x您可能希望为值为1的单元格创建多边形,但不希望为零的单元格创建多边形。那样的话,你可以做
该问题与此文件具有特定数据类型有关。这就是为什么您无法使用在内存中具有值的SpatRaster来复制它的原因。谢谢你揭露这个bug!
开发版本可从