如何为terra中南极SpatRaster添加5°纬度10°经度的经纬网?
在Terra中为南极IBCSO地图添加定制经纬网
核心思路
IBCSO采用**WGS 84 / IBCSO Polar Stereographic(EPSG:9354)**极地投影,直接生成该坐标系下的经纬网较繁琐,建议先在WGS84经纬度坐标系(EPSG:4326)下生成规则经纬线,再投影匹配到IBCSO坐标系,最后叠加到地图上。
具体实现步骤
1. 加载基础数据
library(terra) # 加载IBCSO地形影像 ibcso <- rast("IBCSO.tif") # 加载已投影匹配的样本点(若未投影,需先执行:sample_points <- project(sample_points, crs(ibcso))) sample_points <- vect("your_sample_points.shp")
2. 生成WGS84坐标系下的经纬线
按需求生成间隔5度纬度、10度经度的经纬线:
# 定义经纬间隔与范围(南极常用纬度范围为-90°至-60°,可按需调整) lat_intervals <- seq(-90, -60, by = 5) lon_intervals <- seq(0, 360, by = 10) # 生成纬度线(东西向平行线) lat_lines <- lapply(lat_intervals, function(lat) { vect(paste0("LINESTRING(-180 ", lat, ", 180 ", lat, ")"), crs = "EPSG:4326") }) lat_lines <- do.call(rbind, lat_lines) # 生成经度线(南北向经线,从南极点延伸至-60°纬度) lon_lines <- lapply(lon_intervals, function(lon) { vect(paste0("LINESTRING(", lon, " -90, ", lon, " -60)"), crs = "EPSG:4326") }) lon_lines <- do.call(rbind, lon_lines) # 合并经纬线为一个矢量对象 graticule <- rbind(lat_lines, lon_lines)
3. 投影经纬线到IBCSO坐标系
graticule_proj <- project(graticule, crs(ibcso))
4. 绘制地图并叠加经纬网
# 绘制IBCSO地形影像 plot(ibcso, col = terrain.colors(100), legend = FALSE) # 叠加投影后的经纬网(可调整颜色、线宽) lines(graticule_proj, col = "gray50", lwd = 0.8) # 叠加样本点 points(sample_points, col = "red", pch = 19, cex = 0.8) # 可选:添加经纬标签(适配极地投影的位置逻辑) # 纬度标签:取每条纬度线的中点 lat_labels <- centroids(lat_lines) lat_labels_proj <- project(lat_labels, crs(ibcso)) text(lat_labels_proj, labels = paste0(abs(lat_intervals), "°S"), pos = 3, cex = 0.7) # 经度标签:取每条经度线的上端点(-60°纬度处) lon_labels <- vect(paste0(lon_intervals, " -60"), type = "points", crs = "EPSG:4326") lon_labels_proj <- project(lon_labels, crs(ibcso)) text(lon_labels_proj, labels = paste0(lon_intervals, "°"), pos = 1, cex = 0.7)
注意事项
- 若IBCSO影像覆盖范围更北(如至-50°纬度),需同步调整
lat_intervals和经度线的终点纬度。 - 经纬网的颜色、线宽可根据地形配色调整,比如用
col = "white"在深色地形上更醒目。 - 极地投影下部分经度标签可能重叠,可通过筛选更大间隔的经度(如20°)或调整标签位置参数(
pos)优化显示。
内容的提问来源于stack exchange,提问作者aaltenburger
相关产品推荐
相关产品推荐

