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

NOAA API与marmap包疑问:离岸站点水深为何大于0?

关于marmap获取水深数据的问题解答

一、为什么会出现正值的“水深”?

  • 这不是数据故障,是对NOAA水深数据定义的理解偏差:NOAA提供的地形数据中,正值代表陆地海拔(高于平均海平面),负值才代表海水深度(低于平均海平面)。
  • 你的代码逻辑会放大这个问题:每个站点取了0.5×0.5度的矩形范围,再在范围内取一条对角transect求平均。如果站点靠近海岸线,这个范围很容易包含陆地区域,当transect里的陆地海拔数据(正值)被纳入平均计算后,最终结果就可能变成正值。
  • 验证方法:把返回正值的站点坐标放到地图上查看,大概率是位于近岸、潮间带甚至陆地区域。

二、计算海面到海底的海水深度需要陆地海拔吗?

  • 对于纯海域的位置:不需要。NOAA的水深数据本身就是以**平均海平面(MSL)**为基准的,负值的绝对值就是海面到海底的垂直距离。
  • 对于近岸/可能包含陆地的区域:需要过滤掉陆地数据。你需要在计算平均时,只保留depth小于0的数值(即真正的海水深度数据),避免陆地海拔干扰结果。

代码改进建议

针对你的函数,修改平均计算部分,只统计海水深度数据:

library(marmap)
retrieve_average_sea_depth <- function(longitude, latitude)
{
  # 获取地形数据
  longitude1 = longitude - 0.25
  longitude2 = longitude + 0.25
  latitude1 = latitude - 0.25
  latitude2 = latitude + 0.25
  bath_data = marmap::getNOAA.bathy(lon1 = longitude1, lon2 = longitude2, lat1 = latitude1, lat2 = latitude2)
  # 获取断面数据
  transect_to_keep = get.transect(bath_data, x1 = longitude1+0.05, y1 = latitude1+0.05, x2 = longitude2-0.05, y2 = latitude2-0.05)
  # 仅计算负的水深值的平均值,排除陆地数据并忽略NA
  average_depth = mean(transect_to_keep$depth[transect_to_keep$depth < 0], na.rm = TRUE)
  return(average_depth)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:55:10