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

如何叠加三个Shapefile制作地图及解决新西兰地图显示问题

解决Shapefile图层叠加与新西兰地图显示问题

(i) 分层叠加三个Shapefile图层

用ggplot2配合sf包就能实现图层叠加,核心是按顺序调用geom_sf()添加每个图层,同时通过样式参数区分不同图层。示例代码如下:

library(ggplot2)
library(sf)

# 二次确认所有图层坐标参考系一致(你已转成EPSG:2193)
qmasp <- st_transform(qmasp, crs = 2193)
statShp <- st_transform(statShp, crs = 2193)
NE_countries <- st_transform(NE_countries, crs = 2193)

# 绘制叠加地图
ggplot() +
  # 底层:全球国家(后续可优化为仅新西兰)
  geom_sf(data = NE_countries, fill = "lightgray", color = "black") +
  # 中层:岩龙虾统计区域
  geom_sf(data = statShp, fill = "transparent", color = "blue", linetype = 2) +
  # 上层:岩龙虾QMA区域
  geom_sf(data = qmasp, fill = "orange", alpha = 0.3, color = "darkorange") +
  labs(title = "新西兰岩龙虾相关区域叠加图") +
  theme_minimal()
  • 图层顺序:先添加的图层在底层,后添加的在上层,可根据需求调整顺序
  • 样式参数:通过fill(填充色)、color(边界色)、alpha(透明度)、linetype(线型)区分图层,避免遮挡

(ii) 解决新西兰地图过小及保留查塔姆岛的问题

原因

你使用的ne_110m_admin_0_countries是全球国家数据集,默认绘图范围会包含全球所有区域,导致新西兰(含查塔姆岛)被压缩得极小。

解决方法

方法1:筛选新西兰子集

直接从全球数据中提取新西兰的几何对象,绘图时仅使用这个子集,系统会自动聚焦新西兰区域,同时包含查塔姆岛:

# 筛选新西兰区域
nz <- NE_countries[NE_countries$NAME == "New Zealand", ]
# 后续绘图用nz代替NE_countries即可

方法2:手动设置绘图范围

如果需要保留其他区域但聚焦新西兰,可通过coord_sf()手动指定坐标范围,确保包含查塔姆岛(查塔姆岛对应EPSG:2193的大致坐标为x≈1700000,y≈500000)。示例:

# 获取所有目标图层的边界框,扩展10%确保覆盖查塔姆岛
target_bbox <- st_bbox(c(qmasp, statShp, nz))
x_range <- c(target_bbox["xmin"] * 0.9, target_bbox["xmax"] * 1.1)
y_range <- c(target_bbox["ymin"] * 0.9, target_bbox["ymax"] * 1.1)

# 在绘图代码中添加范围限制
ggplot() +
  geom_sf(data = nz, fill = "lightgray", color = "black") +
  geom_sf(data = statShp, fill = "transparent", color = "blue", linetype = 2) +
  geom_sf(data = qmasp, fill = "orange", alpha = 0.3, color = "darkorange") +
  coord_sf(xlim = x_range, ylim = y_range) +
  labs(title = "新西兰岩龙虾相关区域叠加图(含查塔姆岛)") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:51:21