如何设置SpatVector范围?解决栅格裁剪边缘点NA问题
解决SpatVector裁剪栅格后边缘点提取NA值的问题
问题背景
创建点类型SpatVector,使用PaleoClim(2.5弧分分辨率)的bio_1.tif作为栅格数据,代码如下:
library(terra) # records数据示例 # species longitude latitude # species -62.076 -16.737 # species -60.630 -19.290 species_M <- vect(records, geom=c("longitude", "latitude"), crs=crs(shapes))
使用nichevol包的stats_eval函数处理时,边缘点提取的栅格值为NA,函数内核心代码:
mvar <- terra::crop(Annual_M_Temp, species_M) VAL <- terra::extract(mvar, as.matrix(records[,c("longitude", "latitude")]))[, 1] # 输出VAL为 [1] NA 24.5
原因是裁剪栅格时,边缘点所在的顶部像素被截断,导致提取值为NA。
解决方法
- 方法1:给矢量添加缓冲后再裁剪
给点矢量添加对应栅格分辨率一半的缓冲,确保点所在像素被包含在裁剪范围内:
# 2.5弧分转换为度:2.5/60 ≈ 0.0416666度,取一半作为缓冲宽度 species_M_buf <- buffer(species_M, width = 0.0208333) mvar <- terra::crop(Annual_M_Temp, species_M_buf) VAL <- terra::extract(mvar, as.matrix(records[,c("longitude", "latitude")]))[, 1]
- 方法2:直接用原始栅格提取值
跳过裁剪步骤,直接从原始栅格提取点值,避免裁剪带来的边缘丢失:
VAL <- terra::extract(Annual_M_Temp, as.matrix(records[,c("longitude", "latitude")]))[, 1]
- 方法3:调整crop函数的extend参数
通过extend参数扩展裁剪范围,确保边缘点被覆盖:
# 向外扩展0.05度(可根据实际分辨率调整) mvar <- terra::crop(Annual_M_Temp, species_M, extend = 0.05) VAL <- terra::extract(mvar, as.matrix(records[,c("longitude", "latitude")]))[, 1]
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

