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

使用R的geodata包worldclim_tile获取坐标数据时出现NA值求助

解决geodata包worldclim_tile获取多坐标数据返回NA的问题

问题原因

你当前的代码仅传入第一个坐标的经纬度给worldclim_tile,该函数只会下载单个30x30度的瓦片,只有落在这个瓦片区内的坐标能提取到数据,其他不在该区域的坐标自然返回NA。而旧版raster::getData会自动识别所有坐标对应的瓦片并下载合并,这是两者的核心差异。

你的前3个坐标位于东亚西部的瓦片(tile 22),但第4个坐标(137.6081, 36.5616)在东亚东部瓦片、第5个(18.8167, 68.35)在北欧瓦片、第6个(-50.3333, 67.1133)在北美北部瓦片,都不在tile 22范围内,所以提取结果为NA。

解决方案

根据需求选择以下两种方法:

方法1:下载全球范围数据(适合低分辨率场景)

如果不需要最高精度(30s),可以直接下载全球分辨率的WorldClim数据,一次性覆盖所有坐标:

library(geodata)
library(terra)

df1 <- data.frame(x = c(92.892780,104.016700, 104.166700, 137.608100, 18.816670, -50.333330), # 经度
                  y = c(34.728610, 32.983330, 33.033330, 36.561600, 68.350000, 67.113330)) # 纬度

# 下载10分钟分辨率的全球平均温度数据(res可选0.5,2.5,5,10,单位为分钟)
tavg_global <- worldclim_global(var = "tavg", res = 10, version = "2.1", path = "WorldClimData")
points <- vect(df1, geom = c("x", "y"), crs = "EPSG:4326")
values_global <- extract(tavg_global, points)

print(values_global)

注意:30s分辨率的全球数据文件体积很大(单变量约1GB),如果需要高精度建议用方法2。

方法2:循环下载对应瓦片并合并

针对每个坐标下载其所在的瓦片,合并后再提取数据,兼顾精度和存储空间:

library(geodata)
library(terra)

df1 <- data.frame(x = c(92.892780,104.016700, 104.166700, 137.608100, 18.816670, -50.333330), # 经度
                  y = c(34.728610, 32.983330, 33.033330, 36.561600, 68.350000, 67.113330)) # 纬度

# 循环下载每个坐标对应的瓦片
tiles_list <- list()
for(i in 1:nrow(df1)){
  tile <- worldclim_tile("tavg", df1$x[i], df1$y[i], version = "2.1", path = "WorldClimData")
  tiles_list[[i]] <- tile
}

# 合并所有瓦片(terra自动处理重叠区域)
merged_tiles <- merge(tiles_list)
points <- vect(df1, geom = c("x", "y"), crs = "EPSG:4326")
values_merged <- extract(merged_tiles, points)

print(values_merged)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:23:22