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

在R Terra中将SpatRaster转为BNG米制并解决重采样NaN问题

问题:WorldClim数据裁剪至英格兰范围并转换为BNG米制栅格时出现全NaN值

我正在使用WorldClim数据(例如BIO6),希望将其裁剪至英格兰矢量范围,并得到以BNG(英国国家格网,EPSG:27700)米制单位表示的栅格。但操作顺序不确定,执行重采样或投影后得到全NaN值。


现有数据与操作过程

已投影为BNG的WorldClim原始数据

BIO6.WORLD 
#class       : SpatRaster 
#dimensions  : 21600, 43200, 1  (nrow, ncol, nlyr)
#resolution  : 0.008333333, 0.008333333  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : OSGB36 / British National Grid (EPSG:27700) 
#source      : wc2.0_bio_30s_06.tif 
#name        : wc2.0_bio_30s_06 
#min value   :            -71.9 
#max value   :             26.5 

第一步:裁剪至英国范围

我先创建了英国范围的裁剪框并裁剪数据:

UK.CROP.EXTENT <- rast(xmin=-9, xmax=3, ymin=48, ymax=60, res=1, crs="EPSG:27700") 

# 裁剪至该范围 
BIO6.UK <- crop(BIO6.WORLD, UK.CROP.EXTENT) 

# 查看裁剪后的数据
BIO6.UK 
#class       : SpatRaster 
#dimensions  : 1440, 1440, 1  (nrow, ncol, nlyr)
#resolution  : 0.008333333, 0.008333333  (x, y)
#extent      : -9, 3, 48, 60  (xmin, xmax, ymin, ymax)
#coord. ref. : OSGB36 / British National Grid (EPSG:27700) 
#source(s)   : memory
#varname     : wc2.0_bio_30s_06 
#name        : wc2.0_bio_30s_06 
#min value   :             -4.8 
#max value   :              7.4 

# 可视化结果
plot(BIO6.UK)

BIO6.UK可视化

目标英格兰栅格(米制单位)

我想要将数据匹配到这个英格兰栅格的分辨率和范围:

ENGLAND.SPATRASTER

#class       : SpatRaster 
#dimensions  : 6506, 5698, 1  (nrow, ncol, nlyr)
#resolution  : 100, 100  (x, y)
#extent      : 85720, 655520, 7020, 657620  (xmin, xmax, ymin, ymax)
#coord. ref. : OSGB36 / British National Grid (EPSG:27700) 
#source      : ENGLAND.tif 
#name        : ENGLAND 
#min value   :       0 
#max value   :      49 

ENGLAND.tif可视化

错误操作及结果

执行以下重采样和投影操作后,得到全NaN值:

# 重采样操作
BIO6.RESAMPLE<-terra::resample(BIO6.ENGLAND, ENGLAND.SPATRASTER, method = "near") 

BIO6.RESAMPLE
#class       : SpatRaster 
#dimensions  : 6506, 5698, 1  (nrow, ncol, nlyr)
#resolution  : 100, 100  (x, y)
#extent      : 85720, 655520, 7020, 657620  (xmin, xmax, ymin, ymax)
#coord. ref. : OSGB36 / British National Grid (EPSG:27700) 
#source(s)   : memory
#varname     : ENGLAND 
#name        : wc2.0_bio_30s_06 
#min value   :              NaN 
#max value   :              NaN 

# 投影操作
BIO6.REPROJECT <- terra::project(BIO6.ENGLAND, (ENGLAND.SPATRASTER)) 

BIO6.REPROJECT
#class       : SpatRaster 
#dimensions  : 6506, 5698, 1  (nrow, ncol, nlyr)
#resolution  : 100, 100  (x, y)
#extent      : 85720, 655520, 7020, 657620  (xmin, xmax, ymin, ymax)
#coord. ref. : OSGB36 / British National Grid (EPSG:27700) 
#source(s)   : memory
#varname     : ENGLAND 
#name        : wc2.0_bio_30s_06 
#min value   :              NaN 
#max value   :              NaN 

问题原因及解决方案

核心问题

  1. 变量名错误:重采样和投影时使用了未定义的BIO6.ENGLAND变量,实际只有裁剪后的BIO6.UK。
  2. 坐标系统不匹配:BIO6.UK的坐标数值是经纬度格式,但被错误赋予了BNG的CRS,导致与目标栅格的米制坐标范围完全脱节。

正确操作步骤

步骤1:重新导入原生数据并确认CRS

WorldClim原生数据的CRS是WGS84(EPSG:4326),不要直接在ArcGIS中错误投影:

# 重新导入原生数据
BIO6.WORLD <- rast("wc2.0_bio_30s_06.tif")
# 确认原生CRS为EPSG:4326
crs(BIO6.WORLD)

步骤2:裁剪至英国经纬度范围

# 创建WGS84坐标系的英国裁剪框
UK.CROP.EXTENT <- rast(xmin=-9, xmax=3, ymin=48, ymax=60, res=0.008333333, crs="EPSG:4326")
# 裁剪数据
BIO6.UK <- crop(BIO6.WORLD, UK.CROP.EXTENT)

步骤3:投影到BNG米制坐标并匹配目标栅格

直接用project函数将经纬度数据转换为BNG,同时对齐目标栅格的分辨率和范围:

# 投影并匹配目标栅格参数,采用双线性插值更适合气候数据
BIO6.ENGLAND <- terra::project(BIO6.UK, ENGLAND.SPATRASTER, method = "bilinear")

步骤4:用英格兰矢量边界裁剪(可选)

如果有英格兰矢量边界,可进一步裁剪出精确范围:

# 导入英格兰矢量边界
england_boundary <- vect("england_boundary.shp")
# 裁剪到矢量范围
BIO6.ENGLAND_FINAL <- mask(BIO6.ENGLAND, england_boundary)

验证结果

执行后查看结果:

BIO6.ENGLAND_FINAL
plot(BIO6.ENGLAND_FINAL)

此时应得到非NaN的有效数据,且范围、分辨率与目标栅格一致。


内容的提问来源于stack exchange,提问作者CARLOS_BEDSON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:07:33