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

R ggplot绘制曲面投影栅格地图:如何移除投影区域外数据?

解决非WGS84投影下栅格数据的地球外遮罩问题

核心方案

通过生成目标投影对应的地球轮廓多边形,自动裁剪栅格中超出地球范围的部分,完全适配批量绘图需求,无需手动调整。

具体实现步骤

1. 创建目标投影的地球边界

先构建WGS84坐标系的全球圆形边界,再转换到目标投影,得到该投影下的地球轮廓:

library(terra)
library(tidyterra)
library(ggplot2)
library(sf)

# 生成WGS84全球圆形多边形(地球半径取近似值6371000米)
world_wgs84 <- st_sfc(st_point(c(0,0)), crs = 4326) %>% 
  st_buffer(dist = 6371000) %>% 
  st_sf()

# 转换到目标投影(示例为Hatano投影)
target_crs <- st_crs("+proj=hatano")
world_target_proj <- st_transform(world_wgs84, target_crs)

2. 自动裁剪栅格数据

用转换后的地球边界对栅格进行遮罩,移除地球外的冗余数据:

# 读取并预处理原始栅格
r <- rast('Beck_KG_V1_present_0p5.tif')
r[r == 0] <- NA

# 将栅格转换到目标投影(若原始栅格已为目标投影可跳过此步)
r_proj <- project(r, target_crs)

# 执行遮罩裁剪
r_clipped <- mask(r_proj, vect(world_target_proj))

3. 绘图验证

绘制裁剪后的栅格,此时地球外的数据已被自动移除:

ggplot() +
  geom_spatraster(data = r_clipped) +
  scale_fill_viridis_c(na.value = 'transparent') +
  coord_sf(crs = target_crs, expand = FALSE)

多投影适配与批量处理

该方法完全支持切换任意非WGS84投影,只需修改target_crs参数即可。结合循环或purrr包可轻松批量处理100+地图:

  • 替换target_crs为目标投影字符串(如"+proj=moll"墨卡托、"+proj=laea"兰伯特等)
  • 用list.files()遍历所有栅格文件,循环执行裁剪与绘图流程

关键细节

  • 地球半径取近似值6371000米足以满足绘图精度需求
  • mask()函数会自动处理栅格与多边形的空间匹配,无需手动对齐
  • 若原始栅格已为目标投影,可直接跳过project()步骤

裁剪前的冗余数据示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:40:45