如何用R查询WorldClim并提取全球范围仅陆地表面数据集?
分离WorldClim数据中的纯陆地区域(移除海洋、湖泊、冰川)
要高效从WorldClim全球数据中提取纯陆地(排除海洋、大型湖泊、河流及冰川),可以结合矢量边界数据和terra包的栅格处理能力实现,步骤如下:
1. 加载依赖包
确保安装并加载所需工具包:
library(geodata) library(terra) library(rnaturalearth) # 首次使用rnaturalearth需先安装:install.packages("rnaturalearth")
2. 获取WorldClim原始数据
读取你需要的生物气候数据:
# 用临时目录存储数据,也可指定自己的路径 wc_data <- worldclim_global(var = "bio", res = 2.5, path = tempdir())
3. 构建纯陆地掩膜
我们使用权威的自然地球(Natural Earth)矢量数据,先获取排除大型湖泊的陆地边界,再移除冰川区域:
# 获取1:1000万比例尺的陆地矢量(已排除大型湖泊/河流) land_boundary <- ne_download( scale = 10, type = "land", category = "physical", returnclass = "sf" ) # 转换为terra支持的SpatVector格式 land_vect <- vect(land_boundary) # 获取冰川区域矢量并从陆地中移除 glacier_boundary <- ne_download( scale = 10, type = "glaciated_areas", category = "physical", returnclass = "sf" ) glacier_vect <- vect(glacier_boundary) # 移除冰川后的纯陆地矢量 pure_land <- erase(land_vect, glacier_vect)
4. 应用掩膜提取纯陆地数据
用处理好的纯陆地矢量作为掩膜,裁剪WorldClim数据:
# 保留掩膜范围内的栅格数据,其余设为NA wc_pure_land <- mask(wc_data, pure_land)
关键说明
- 自然地球的1:1000万矢量数据已经预排除了大型湖泊和河流,无需额外处理这类水体;
terra包的mask和erase操作基于高效的栅格-矢量计算,适合全球尺度数据处理;- 如果需要更高精度的水体排除(比如小型河流),可以改用1:100万比例尺的自然地球数据(将
scale参数改为1),但数据量会更大。
内容的提问来源于stack exchange,提问作者Eron Raines
相关产品推荐
相关产品推荐

