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

WGS84转UTM投影后geom_contour()无法生成等高线报错问题

问题原因及解决方法

核心问题:投影参数顺序错误

你使用terra::project时参数顺序搞反了,导致生成的UTM坐标无效(大概率是NA值),所以geom_contour找不到有效数据生成等高线。

terra::project的正确语法逻辑是:先指定要转换的坐标数据,再明确目标投影,最后补充原数据的投影(如果数据自带CRS信息可省略,但这里用矩阵输入必须指定)。你的代码把原投影参数放在了目标投影的位置,直接导致投影失败。

修正后的代码

require(marmap)
bathy <- getNOAA.bathy(lon1 = -156.4 , lon2 = -156.95, lat1 = 20.55, lat2 = 21.05 , resolution = 1)
bathy.df <- fortify(bathy)

# 修正投影参数,明确原投影和目标投影
utm_coords <- terra::project(
  as.matrix(bathy.df[,c(1,2)]),
  to = "+proj=utm +zone=4 +north +units=km",
  from = "+proj=longlat +datum=WGS84"
)

bathy.df <- cbind(bathy.df, as.data.frame(utm_coords))
colnames(bathy.df) <- c("x", "y", "z", "x.utm", "y.utm")

require(ggplot2)
# 经纬度版本(正常输出)
ggplot(data=bathy.df, aes(x=x, y=y, z=z)) +
  geom_contour(binwidth=100)

# UTM版本(现在可正常生成等高线)
ggplot(data=bathy.df, aes(x=x.utm, y=y.utm, z=z)) +
  geom_contour(binwidth=100)

额外说明

  • 你的研究区域属于北纬,UTM投影里加上+north能避免歧义(不加默认也是北纬,但明确标注更稳妥)。
  • 修正后可以先用head(bathy.df)检查x.utm和y.utm列是否有有效值,确认无NA再执行绘图代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:47:19