使用terra
,我试图用SpatVector屏蔽一个SpatRaster。由于某种原因,屏蔽结果masked
没有按预期工作,它错误地将栅格像元对角地保留在东南方向。
此外,我用随机数据运行了terra::mask
,它运行得很好,那么在我的具体情况下,问题会是什么呢?
下面是我的问题的一个可视化:黑色单元格表示SpatRaster masked
,绿色多边形表示SpatVector areamask
。masked
应完全被areamask
隐藏,但结果未对齐。
下面我还附上了代码,以达到图中所示的结论。重新创建是我的原始光栅和矢量数据的一小块,使用相同的几何图形,属性值和crs。
我在Windows的R 4.2.2上使用terra_1.7-3。
library(terra)
library(dplyr)
# values for SpatRaster to be masked
cityraster_geom <- data.frame(
x = c(381625, 381875, 381625, 381875, 381625, 381875, 382125, 382375, 381625, 381875, 382125, 382375),
y = c(6672875, 6672875, 6672625, 6672625, 6672375, 6672375, 6672375, 6672375, 6672125, 6672125, 6672125, 6672125))
cityraster_vals <- c(381, 157, NaN, NaN, 595, 186, NaN, NaN, 1117, 330, 70, 70, 1849, 679, 411, 496)
# values for SpatVector to be used as the mask
areamask_geom <- data.frame(
geom = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7),
x = c(381500, 381500, 381401, 381401, 381500, 381500, 381500, 381401, 381401, 381500, 381500, 381500, 381401, 381401, 381500, 381500, 381750, 381750, 381500, 381500, 382250, 382401, 382401, 382250, 382250, 381500, 381500, 381401, 381401, 381500, 381500, 381401, 381401, 381500, 381500),
y = c(6672000, 6671900, 6671900, 6672000, 6672000, 6672250, 6672000, 6672000, 6672250, 6672250, 6672500, 6672250, 6672250, 6672500, 6672500, 6672750, 6672750, 6672500, 6672500, 6672750, 6672000, 6672000, 6671900, 6671900, 6672000, 6672750, 6672500, 6672500, 6672750, 6672750, 6672750, 6672750, 6673000, 6673000, 6672750)) %>%
as.matrix()
areamask_vals <- data.frame(
x = c(381375, 381375, 381375, 381625, 382375, 381375, 381375),
y = c(6671875, 6672125, 6672375, 6672625, 6671875, 6672625, 6672875),
xyind = c(1, 2, 3, 4, 5, 6, 7))
# Create SpatRaster and SpatVector used for the masking
cityraster <- terra::rast(
cityraster_geom,
crs = "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs")
cityraster[["focal"]] <- cityraster_vals
areamask <- terra::vect(
areamask_geom,
"polygons",
atts = areamask_vals,
crs = "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs")
masked <- terra::mask(cityraster, mask = areamask)
1条答案
按热度按时间qco9c6ql1#
您的示例按预期工作:
如果这不是你所追求的,那么也许你可以编辑你的问题,解释你希望发生什么。