You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:33:21