门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
精品文章(Qter团队原创教程)
›
基础教程
›
离线获取任意经纬度海拔高度?一个100行代码的跨平台方 ...
发布主题
返回列表
离线获取任意经纬度海拔高度?一个100行代码的跨平台方案
0
回复
451
查看
[复制链接]
liudianwu
当前离线
积分
2978
liudianwu
累计签到:7 天
连续签到:1 天
来源: Qt文章
2025-12-23 11:05:46
显示全部楼层
|
阅读模式
绝对高程(或称海拔),是指地面点沿垂线方向至大地水准面的距离。我国采用的“1985年国家高程基准”,是以1952年至1979年青岛验潮站观测资料确定的黄海平均海水面,作为绝对高程基准面。并在青岛市观象山建立了国家水准原点,其高程为72.260米,作为我国高程测量的依据。
绝对高程与相对高度相对,计算绝对高程的参考基点是确认一个共同认可的海平面进行测算。这个海平面相当于标尺中的0刻度。因此,绝对高程又称之为绝对高度或者海拔。而相对高度是两点之间相比较产生的海拔高度之差。但海面潮起潮落,大浪小浪不停,可以说没有一刻风平浪静的时候,而且每月大地水准面每日涨潮与落潮的海面高度也是有明显差别的。因此,人们就想到只能用一个确定的平均海水面来作为海拔的起算面。海拔也就定义为高出或者低于平均海水面的高度。这就是通常人们所说的高程或绝对高程。由于地球内部质量的不均一,地球表面各点的重力线方向并非都指向球心一点。这样就使处处和重力线方向相垂直的大地水准面,形成一个不规则的曲面。因而世界各国有各自确立的平均海平面,即大地水准面。
做地图开发会遇到一个常规需求,就是获取当前经纬度对应的海拔高度,也叫做高程值,很遗憾各大地图厂商都未提供接口获取,可能是有明文规定,不能地图中提供对应的海拔高度值,于是需要另想他法,尽管谷歌地图在线的api接口是提供了海拔高度值,但是懂得都懂,国内哪里还能用谷歌地图?完全用不了啊,就算你开发者能用,99.99%的用户也是用不了,而且必须是在线,没有离线也不行。
通过查阅资料得知有个gdal的开源库,支持读取tif文件获取高程值,使用过了是可以,但是编译复杂,尝试过很多次直接集成源码的方式,终归失败,源码数量太多了,两千多个,也有不少的依赖,比如依赖zip和sqlite啥的,所以最终放弃这个方案,后面又找了一些类似tinytiff的开源库,都是用来读取tif文件的,但是没有看到获取高程值接口,而且只支持普通的tif文件。
在折腾的快要放弃的时候,往往就是离成功最近的时候,思索着有没有更简便的方式,而且跨平台,毕竟只是想获取个高程值,引入个这么大的库完全没有必要,有点杀鸡用牛刀的感觉。在经过使用gdal函数接口的过程中,规则都是从图片的像素坐标获取灰度值,然后这个灰度值对应的就是海拔,网上很少有人提到这点,其实这点极其重要,没搞过的人一直云里雾里的折腾编译gdal等开源库。后面还发现对应tif的还有个txt的文本文件,打开内容看到最前面写着左上角的经纬度坐标和水平和垂直比例尺等参数值,然后就是逐行的每个像素点的海拔值,这就非常美妙了,要的就是这种文件呢,自己写个算法去处理也是分分分钟的事情。一气呵成打完收工,自此不仅离线使用,速度纳秒级别,还支持所有平台,就一个类文件100行左右,不要太完美啊。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
x
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了