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

如何在R中将SpatRaster格式的KUD叠加至ggmap底图?

解决KUD图层与ggmap底图叠加问题

核心问题定位

叠加失败的常见原因是坐标系统不匹配(ggmap默认使用WGS84/EPSG:4326,而你的KUD图层可能是投影坐标系),或是SpatRaster未转换为ggplot兼容的数据格式。以下是分步解决方案:


1. 数据预处理:对齐坐标与转换格式

首先确保KUD图层与ggmap的坐标系统一致,并转换为ggplot可识别的数据框:

# 加载依赖包
library(terra)
library(ggplot2)
library(ggmap)

# 读取掩膜后的KUD栅格
kud_rast <- rast("你的KUD文件路径")

# 转换坐标到WGS84(与ggmap匹配)
kud_rast_4326 <- project(kud_rast, "EPSG:4326")

# 转换为ggplot兼容的data.frame(保留XY坐标与KUD值)
kud_df <- as.data.frame(kud_rast_4326, xy = TRUE)
# 假设KUD值列名为"kud",可根据实际修改
colnames(kud_df)[3] <- "kud_value"

2. 获取匹配范围的ggmap底图

从转换后的KUD图层提取边界,获取对应区域的底图:

# 提取KUD图层的地理范围
kud_ext <- ext(kud_rast_4326)
# 定义底图边界(left, bottom, right, top)
map_bounds <- c(left = kud_ext[1], bottom = kud_ext[3], right = kud_ext[2], top = kud_ext[4])

# 获取底图(需提前注册Google API密钥:ggmap::register_google(key = "你的密钥"))
basemap <- get_map(location = map_bounds, maptype = "terrain", source = "google")
# 转换为ggplot对象
gg_basemap <- ggmap(basemap)

3. 叠加95% KUD图层

筛选密度最高的95%区域,叠加到底图上:

# 筛选95% KUD区域(保留第5百分位数及以上的密度值)
kud_95_df <- subset(kud_df, kud_value >= quantile(kud_df$kud_value, 0.05, na.rm = TRUE))

# 绘制叠加图
gg_basemap +
  geom_raster(data = kud_95_df, aes(x = x, y = y, fill = kud_value), alpha = 0.5) +
  scale_fill_viridis_c(option = "plasma", name = "KUD Density") +
  labs(x = "经度", y = "纬度", title = "95% KUD 叠加底图") +
  theme_minimal()

4. 批量生成5%间隔的KUD叠加图

通过循环自动生成并保存所有间隔的KUD图:

# 定义5%间隔的分位数序列(从5%到95%)
quantile_seq <- seq(0.05, 0.95, by = 0.05)

# 循环生成并保存
for(q in quantile_seq){
  # 筛选对应百分比的KUD区域
  kud_q_df <- subset(kud_df, kud_value >= quantile(kud_df$kud_value, 1 - q, na.rm = TRUE))
  # 绘制图形
  plot <- gg_basemap +
    geom_raster(data = kud_q_df, aes(x = x, y = y, fill = kud_value), alpha = 0.5) +
    scale_fill_viridis_c(name = "KUD Density") +
    labs(title = paste0(q * 100, "% KUD 叠加图"))
  # 保存到本地
  ggsave(paste0(q * 100, "_kud_map.png"), plot, width = 8, height = 6, dpi = 300)
}

关键注意事项

  • API密钥问题:新版ggmap需要Google Maps API密钥才能调用get_map(),需提前在Google Cloud平台申请并通过ggmap::register_google()注册。
  • 透明度调整:alpha参数可根据需求修改,平衡底图可见性与KUD图层的清晰度。
  • NA值处理:如果KUD图层存在NA值,需在quantile()中添加na.rm = TRUE避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:00:10