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

SRTM数据高程基准疑问及elevation库输出格式技术咨询

关于SRTM高程基准与Python elevation库的问题解答

疑问1:WGS84为何被指南称为“大地水准面”?

SRTM指南里的表述是简化写法,实际指WGS84参考椭球/EGM96大地水准面,并非说WGS84是大地水准面。WGS84确实是近似大地水准面的参考椭球,而EGM96是正式的大地水准面模型。指南这么写是因为SRTM数据存在两种基准版本:原始数据基于EGM96大地水准面,部分分发版本被转换为WGS84椭球高,用“/”涵盖这两种基准情况。

疑问2:elevation库仅输出WGS84基准TIFF,如何生成EGM96基准文件?

首先纠正笔误:你提到的EPSG4236应为EPSG:4326(WGS84地理坐标系)。elevation库默认拉取的是已转换为WGS84椭球高的SRTM分发版本,所以输出TIFF采用该基准。要得到EGM96基准的TIFF,有两种可行方式:

  • 直接从USGS原始数据源下载基于EGM96的SRTM原始数据,再用GDAL、rasterio等工具自行裁剪,跳过elevation库;
  • 若已有elevation库输出的WGS84椭球高TIFF,可通过基准转换得到EGM96大地水准面高:利用EGM96大地水准面差距模型,通过公式大地水准面高 = 椭球高 - 大地水准面差距计算转换。Python实现示例如下:
import rasterio
from pyproj import Transformer, CRS
import numpy as np

# 加载WGS84椭球高影像
with rasterio.open("wgs84_elevation.tif") as src:
    elev_data = src.read(1)
    profile = src.profile
    # 获取影像的地理坐标网格
    x_coords, y_coords = np.meshgrid(np.linspace(src.bounds.left, src.bounds.right, src.width),
                                    np.linspace(src.bounds.top, src.bounds.bottom, src.height))
    # 定义基准转换:WGS84椭球高 -> EGM96大地水准面高
    transformer = Transformer.from_crs(
        CRS.from_epsg(4326, ellps="WGS84"),
        CRS.from_epsg(4326, geoidgrids="egm96_15.gtx"),
        always_xy=True
    )
    # 计算大地水准面差距,再转换为EGM96高程
    _, _, geoid_offset = transformer.transform(x_coords, y_coords)
    egm96_data = elev_data - geoid_offset
    # 保存EGM96基准影像
    with rasterio.open("egm96_elevation.tif", "w", **profile) as dst:
        dst.write(egm96_data.astype(elev_data.dtype), 1)

注:需提前下载EGM96大地水准面格网文件(如egm96_15.gtx),pyproj会自动识别加载。

关于SRTM是否提供两种基准的数据?

并非两套独立数据,而是同一原始数据的不同基准转换版本:SRTM原始采集数据的高程基准是EGM96大地水准面,后续部分机构将其转换为WGS84椭球高进行分发,elevation库默认获取的就是这个转换后的版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:05:19