如何在R的terra包中为SpatRaster设置坐标系并映射采样点到IBCSO地图
解决Terra包绘制IBCSO地图时坐标点聚集问题
你的问题核心是坐标系不匹配:采样点是WGS84经纬度(EPSG:4326),而IBCSO地图采用的是WGS 84 / IBCSO极地投影(EPSG:9354),直接绘制会因为两种坐标系的数值范围差异过大,导致经纬度点聚集在地图中心。以下是具体解决步骤:
1. 将采样点转换为地图匹配的坐标系
首先把经纬度格式的采样点转换为IBCSO地图的投影坐标系:
假设你的采样点数据框为points_df,包含lon(经度)和lat(纬度)列:
library(terra) # 读取IBCSO地图 ibcso <- rast("IBCSO.tif") # 创建经纬度格式的矢量对象,指定坐标系为WGS84(EPSG:4326) points_vec <- vect(points_df, geom = c("lon", "lat"), crs = "EPSG:4326") # 转换到IBCSO地图的坐标系(EPSG:9354) points_proj <- project(points_vec, crs(ibcso))
2. 绘制地图与转换后的点
无需手动调整范围,直接用Terra的绘图函数叠加即可:
# 绘制IBCSO彩色地图 plot(ibcso, rgb = 1:3, main = "物种分布点与采样站") # 叠加转换后的采样点(红色圆点,可根据需求调整样式) plot(points_proj, add = TRUE, col = "red", pch = 16, cex = 1.2)
3. 验证转换结果
可以检查转换后点的范围是否在地图范围内,确保没有异常:
# 查看转换后点的范围 ext(points_proj) # 对比IBCSO地图的范围 ext(ibcso)
关键说明
经纬度的数值范围是经度-180180、纬度-9090,而IBCSO投影的范围是米制的-4800000~4800000,直接绘制经纬度点会因为数值过小,被缩放到地图中心区域。通过坐标系转换,就能让点匹配到地图的正确位置,避免扭曲或聚集。
内容的提问来源于stack exchange,提问作者aaltenburger
相关产品推荐
相关产品推荐

