惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
量子位
T
Tailwind CSS Blog
Vercel News
Vercel News
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
U
Unit 42
Engineering at Meta
Engineering at Meta
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
D
Docker
博客园_首页
P
Proofpoint News Feed
月光博客
月光博客
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Martin Fowler
Martin Fowler
腾讯CDC
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 飞扬青云

AI编程道心崩塌/十几年Qt开发经验一文不值 就说逆不逆天/支持高达500路监控画面/多个屏幕同时显示/轻松实现跨屏实时监控 高程海拔离线实时查询显示终极版/体验友好/全网首创极精简版本/可输入地址或者经纬度查询 Qt实现很好玩的滤镜效果/高斯模糊径向模糊/底片锐化暗角鱼眼/多点矫正几何矫正边缘融合/扭曲网格调整 震惊都6202年了/地图控件居然支持Qt4这个老古董/支持国产军工低配Qt环境 Qt代码实现地图瓦片电子放大/无极缩放/可将层级拓展到22级别/精确到0.03米 纯QWidget绘制打造地图组件/极速加载瓦片地图/放大缩小地图过渡效果 这才是地图控件该有的样子/不依赖js和qml/纯古法原创自研/纯代码绘制/最新版含泪发布 效果拉满/纯Qt实现海图地图展示/矢量底图+海图+路网标记任意多层叠加/完美支持海图叠加与多投影系 GB28181视频监控推流服务/点播预览推流/录像回放推流/指令预览推流/指令回放推流/自动预览推流 Qt电子地图叠加海图/全世界海图叠加到天地图图层/1-18级海图实时查看 超级屌的动态测距交互功能/耗时几万个脑细胞/自研原创地图控件 Qt纯原创代码实现GB28181组件/自动点播拉流并推流/支持录像回放和下载/性能凶残 全网原创再次熬夜升级/支持云台预置位的onvif设备模拟器/虚拟监控摄像头/可设置主码流子码流 使用ffmpeg播放不同节目/实时切换节目并推流/推流不同的节目流 新版监控GB28181调试神器V2026发布/对标wvp/绿色版开箱即用 对标国际Onvif工具odm/新版视频监控onvif调试助手V2026发布/简单好用开箱即用 全网唯一/不依赖浏览器和qlocation/纯代码绘制实现的地图组件/短小精悍 监控设备模拟神器V2026全新含泪发布/支持onvif和gb28181/支持云台控制和预置位 将地图组件运行在浏览器上/qtlocation都做不到/轻巧好用/自研原创 不依赖任何AI代码/纯qpainter实现的航线规划/飞行轨迹规划和模拟/无人机轨迹 如何快速搭建一套支持ONVIF的安防监控系统 没有想不到只有做不到/万能地图标注点marker设计/各种参数需求场景/你要的都有 呕心沥血/历时半年/古法编程/纯QPainter实现的地图控件/性能爆表 绘制1000个无人机只需7ms/优化到极致/地图组件海量标注点/纯QPainter绘制的威力 实时轨迹/轨迹回放/多条轨迹同时回放/轨迹平滑移动/移动速度和间隔/自动旋转角度 记一个优化改良的实施过程/纯QPainter实现的地图组件/支持天地图谷歌地图等 性能提升百倍/Qt地图组件纯QWidget绘制/缓存瓦片技术/多线程加载绘制 纯QWidget绘制实现电子地图控件/非qml非web/多线程下载和加载瓦片/支持各种图形 Qt实现离线地图下载/瓦片地图下载/划区域下载离线地图/多线程批量下载
离线获取任意经纬度海拔高度?一个100行代码的跨平台方案
飞扬青云 · 2025-12-23 · via 博客园 - 飞扬青云

在地图开发中,有一个看似简单却常常令人头疼的需求:如何获取指定经纬度位置的海拔高度(即绝对高程)?

我们知道,绝对高程(又称海拔)是指地面某点沿重力方向到大地水准面(通常以平均海平面为基准)的垂直距离。我国采用的是“1985国家高程基准”,以青岛验潮站1952–1979年的黄海平均海水面为基准,并在青岛观象山设立了国家水准原点,其高程为 72.260 米

然而,尽管这个需求很常见,主流地图厂商(如高德、百度、腾讯地图等)并未开放获取海拔高度的 API 接口。原因可能是出于数据安全或政策限制。虽然 Google Maps 的 Elevation API 能提供高程数据,但在国内基本不可用——开发者或许能FQ调试,但用户几乎 100% 无法访问,且必须依赖在线网络,离线场景完全无解。

于是,我们不得不另辟蹊径。

曾经的尝试:GDAL 太重,TinyTIFF 不够

最初想到的是使用开源地理空间库 GDAL。它确实支持读取 .tif 格式的数字高程模型(DEM)文件,并从中提取高程值。实测可行,但问题也很明显:

  • 源码庞大(2000+ 文件),编译极其复杂;
  • 依赖众多(如 libtiff、zlib、SQLite 等);
  • 集成到移动端或嵌入式项目中成本过高。

后来又尝试了 TinyTIFF 等轻量级 TIFF 解析库,却发现它们仅支持普通图像 TIFF,不支持地理编码信息(GeoTIFF),更无法直接解析高程数据。

几经折腾,几乎要放弃。

转机:原来高程数据可以这么简单!

就在快要放弃时,一次深入 GDAL 使用过程中的观察带来了关键突破:

高程 TIFF 文件中的每个像素灰度值,其实就对应着该位置的海拔高度!

更重要的是,这类 DEM 数据通常还会附带一个 .txt.hdr 的元数据文件。打开一看,内容清晰明了:

ncols         3601
nrows         3601
xllcorner     116.0
yllcorner     39.0
cellsize      0.00027777777777778
NODATA_value  -9999

其中:

  • xllcorner / yllcorner 是左下角(或左上角,视格式而定)的经纬度;
  • cellsize 是每个像素代表的经纬度跨度;
  • 后续数据就是按行排列的高程值(单位:米)。

这意味着:根本不需要复杂的图像解析库!

只要读取这个文本格式的高程数据(或将其转为二进制/内存数组),再根据目标经纬度计算出对应的行列索引,就能在 纳秒级时间 内查到海拔值。

最终方案:100 行代码,全平台通用

基于上述发现,我写了一个极简的高程查询类:

  • 仅需加载一次高程数据文件(可为文本或二进制);
  • 支持任意经纬度快速定位;
  • 纯 C++ / Java / Python 实现,无任何第三方依赖
  • 完全离线,适用于 Android、iOS、嵌入式设备甚至 Web(通过 WASM);
  • 代码不到 100 行,维护成本极低。

从此,再也不用为“杀鸡用牛刀”而烦恼。一个轻量、高效、跨平台的离线高程查询方案就此诞生。


map900

小结

有时候,最复杂的不是问题本身,而是我们一开始选错了工具。
当你发现高程数据本质就是“带坐标的二维数组”时,一切就变得异常简单。

如果你也在做地图、无人机、户外导航或 AR 应用,不妨试试这种轻量级方案——离线、快速、自由可控,何乐而不为?

注:公开的 DEM 数据源包括 NASA 的 SRTM、ASTER GDEM,以及国内部分测绘部门发布的栅格高程数据(需注意合规使用)。


如需示例代码或数据格式解析细节,欢迎留言交流!

四、相关地址

  1. 国内站点:https://gitee.com/feiyangqingyun
  2. 国际站点:https://github.com/feiyangqingyun
  3. 个人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 文件地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip