osgearth加载mapbox在线高程数据

article/2025/7/26 14:34:18

先看一下效果:

osgearth加载在线地图这里就不介绍了,比如osm、mapbox、天地图等,如果有哪位同学需要,我可以下次介绍一下~~~

众所周知,高程数据一直是比较珍贵的,之前是加载谷歌地球的高程,但是近期由于谷歌地址均无法访问,所以考虑加载mapbox的在线高程数据,说到这里,不得不感谢一下mapbox,不仅提供了丰富的可编辑的在线地图数据,还提供了高程数据~~~  Maps, geocoding, and navigation APIs & SDKs | Mapbox

首先先看一张mapbox的高程图:

可以看到,mapbox的高程数据数据是rgba四通道的png格式栅格图像数据,而一般的高程数据HeightField是单通道的,

因此,在请求到源数据之后只需要做一次osg::Image -> osg::HeightField 的转换即可。

转换公式官网就有,很贴心:

height = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1)

通过继承 TileSource 重写 createImage 和 createHeightField 即可实现功能,继承了QObject是想后续完善功能,将数据保存至数据库中,便于后续离线读取,QObject可有可无,详细可参考 Plugin osgearth_tileindex:

using namespace osgEarth;
using namespace osgEarth::Drivers;class XYZExSource : public QObject, public TileSource
{Q_OBJECTpublic:XYZExSource(const TileSourceOptions& options);Status initialize(const osgDB::Options* dbOptions);osg::Image* createImage(const TileKey& key, ProgressCallback*  progress);virtual std::string getExtension() const{return _format;}osg::HeightField* createHeightField(const TileKey& key, ProgressCallback* progress);
private:const XYZExOptions       _options;std::string            _format;std::string            _template;std::string            _rotateChoices;std::string            _rotateString;std::string::size_type _rotateStart, _rotateEnd;OpenThreads::Atomic    _rotate_iter;osg::ref_ptr<osgDB::Options> _dbOptions;
};

createImage函数与xyz驱动基本一致,照抄即可,这里介绍createHeightField函数:

osg::HeightField* XYZExSource::createHeightField(const TileKey& key, ProgressCallback* progress)
{// MapBox encoded elevation PNG.// https://www.mapbox.com/blog/terrain-rgb/if (1/*_options.elevationEncoding().value() == "mapbox"*/){if (getStatus().isError())return 0L;osg::HeightField *hf = 0;osg::ref_ptr<osg::Image> image = createImage(key, progress);if (image.valid()){// Allocate the heightfield.hf = new osg::HeightField();hf->allocate(image->s(), image->t());ImageUtils::PixelReader reader(image.get());for (unsigned int c = 0; c < image->s(); c++){for (unsigned int r = 0; r < image->t(); r++){osg::Vec4 pixel = reader(c, r);pixel.r() *= 255.0;pixel.g() *= 255.0;pixel.b() *= 255.0;float h = -10000.0f + ((pixel.r() * 256.0f * 256.0f + pixel.g() * 256.0f + pixel.b()) * 0.1f);hf->setHeight(c, r, h);}}}return hf;}else{return TileSource::createHeightField(key, progress);}
}

使用:

osgEarth::Drivers::XYZExOptions exyz;
exyz.url() = "http://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token=pk.eyJ1IjoicnpvbGxlciIsImEiOiIzQ1V3clI4In0.2TF5_QTXSR3T7F_dyPd1rg";
exyz.profile()->namedProfile() = "spherical-mercator";
XYZExSource* etileSource = new XYZExSource(exyz);
auto eStatus = etileSource->open();
ElevationLayerOptions eoptions("mapboxEle");
map->addLayer(new ElevationLayer(eoptions, etileSource));

access_token可在mapbox官网自行申请~~~


http://chatgpt.dhexx.cn/article/OAdRa08c.shtml

相关文章

GEE:快速下载数字高程DEM数据

DEM数据下载&#xff0c;使用SRTM Digital Elevation Data Version 4&#xff0c;一个2000年 的全球高程数据 。下载以后的DEM不用再做裁剪&#xff0c;可以直接使用。 也可以导入下面这个分辨率30米的DEM数据&#xff0c;搜索一下就可以了。 NASADEM: NASA NASADEM Digital El…

按方位提取高程数据的方法

1. 问题的描述 根据经过Lambert变换后显示的地图设置方位&#xff0c;以正北方向为零度&#xff0c;顺时针旋转的角度为相应的方位角。以站址为中心&#xff0c;沿相应的方位提取高程数据&#xff0c;形成某指定方位的随距离变化的高程数据。所获得的高程数据尚未考虑地球曲率…

DEM高程数据的获取和应用(全国DEM数据可直接下载)

DEM是数字高程模型的英文简称(Digital Elevation Model)&#xff0c;是研究分析地形、流域、地物识别的重要原始资料。由于DEM 数据能够反映一定分辨率的局部地形特征&#xff0c;因此通过DEM 可提取大量的地表形态信息&#xff0c;可用于绘制等高线、高程图、坡度图、坡向图、…

获取高程数据并生成等高线

从地理空间数据云下载高程数据非常方便&#xff0c;码一波下载方法。 高级检索 选择数据集 选择数据集为DEM高程数据&#xff0c;你想下载的数据产品。 搜索&#xff0c;下载 选择地区&#xff0c;地区选择主要有行政区域击搜索&#xff0c;点击如箭头所示图标即可下载。可…

裁剪DEM高程数据

裁剪DEM高程数据方法 对DEM高程数据&#xff08;tif文件&#xff09;方法较多&#xff0c;现将使用的方法进行总结&#xff0c;内容主要包括三个方面&#xff1a; 使用ARCGIS裁剪使用globalmapper裁剪使用MATLAB裁剪 1、使用ARCGIS裁剪 Arcgis将一幅影像裁剪成一幅或多幅&a…

12.5m高程数据DEM,导入大疆精灵4RTK,M300仿地飞行

点赞及加关注&#xff0c;即可获得——12.5m高程数据DEM&#xff0c;记得私信我——回复 “12.5m高程数据DEM” 领取哦。 文末有视频教程连接。 下面进入教程正文。 全国12.5米高程数据&#xff0c;是ALOS卫星的测绘成果&#xff0c;ALOS卫星于2006年1月24日发射&#xff0c;同…

GlobalMapper20使用控制点对地形数据(高程数据)进行高程纠正(高程拟合/纠偏/配准)

序&#xff1a;为什么要对高程数据进行控制点纠正 1.经常因为拿到的地形数据非当前坐标系&#xff0c;高程基准也不一样&#xff0c;需要进行投影转换调整高程基准 此情况一般一个控制点就够了&#xff0c;对地形进行整体的抬升或者下降。 2.实测数据和基于卫星、航测等生成…

高精度数字高程数据1m的dem

最近一直在做一个三维场景的项目&#xff0c;老板一直让我下载高精度的数据&#xff0c;从而构建三维场景&#xff0c;一开始在各种网站上下载如中国科学院镜像站点下载&#xff0c;德国航天局的DLR数字高程数据&#xff0c;美国航天局NASA网站上等一些地方下载&#xff0c;基本…

地理高程数据SRTM3简介

1. SRTM简介 SRTM&#xff08;Shuttle Radar Topography Mission&#xff0c;航天飞机雷达地形测绘使命)是美国太空总署&#xff08;NASA&#xff09;和国防部国家测绘局&#xff08;NIMA&#xff09;以及德国与意大利航天机构共同合作完成联合测量&#xff0c;由美国发射的“…

国内外高程数据介绍

目前网上有多种全球高程数据&#xff0c;国内在这方面也进步喜人&#xff0c;资源三号目前已放出来的卫片给了不少惊喜&#xff0c;其高程数值得期待。但资源三号的高程数据放出来还需等待&#xff0c;过去两三年全球高程数据发展相当迅猛&#xff0c;DLR放出了相当高精度的数据…

DEM高程数据下载方法

网页下载 网站上下载免费的DEM数据 地形高程数据几个比较好的下载地点: (1)http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp&#xff0c;从这里可以下载SRTM 90m数据&#xff0c;支持逐个Tile选取&#xff0c;或者拖拽鼠标一次选取多个&#xff0c;或者输入经纬度坐标选…

全球高精度5米 12.5米 30米地形(DEM)高程数据(tif格式)下载

高程数据在地形分析、坡度坡向分析、等高线分析等多个场景都需要用到&#xff0c;而最常见的高程数据便是数字高程模型&#xff0c;即DEM了。 下面便给大家罗列下几个常见的高程数据&#xff08;即DEM&#xff09;的下载渠道。 下载位置&#xff1a;图新地球 免费下载&#x…

DEM高程数据

DEM高程数据 ** DEM高程数据包括两个部分&#xff1a;ASTER GDEM30米分辨率高程数据和SRTM90米分辨率高程数据。ASTER GDEM数据来源于NASA&#xff0c;数据覆盖范围为北纬83到南纬83之间的所有陆地区域&#xff0c;时间范围为2000年前后&#xff1b;SRTM数据来源于CIAT&#x…

gis 数据框裁剪_GIS中DEM高程数据的获取/处理/等高线生成

1.高程数据的下载地址和下载方式 下载地址:地理空间数据云 点击“高级检索”——选择“GDEMDEM 30M 分辨率数字高程数据”——“地图选择”——画出自己想要的高程数据所在地我们以鹤岗为例,通过检索我们发现一共是10块,我们依次下载。 下载完成后解压是这样的

全球数字高程数据(DEM)详解,还有地形晕渲、等高线等干货

1 基本概念 DEM是数字高程模型的英文简称(Digital Elevation Model)&#xff0c;是研究分析地形、流域、地物识别的重要原始资料。由于DEM 数据能够反映一定分辨率的局部地形特征&#xff0c;因此通过DEM 可提取大量的地表形态信息&#xff0c;可用于绘制等高线、坡度图、坡向…

python isupper_Python中用于检查英文字母大写的isupper()方法

Python中用于检查英文字母大写的isupper()方法 isupper()方法检查字符串的所有基于大小写的字符(字母)是否是大写。 语法 以下是isupper()方法的语法&#xff1a; str.isupper() 参数 NA 返回值 如果字符串中的所有字符是大写字母并且至少有一个可大小写字符此方法返回…

isupper

原型&#xff1a;extern int isupper(int c);用法&#xff1a;#include 功能&#xff1a;判断字符c是否为大写英文字母说明&#xff1a;当c为大写英文字母(A-Z)时&#xff0c;返回非零值&#xff0c;否则返回零。举例&#xff1a;// isupper.c#include #include main(){int c;c…

Python字符串:isspace、istitle、isupper、islower

str.isspace() 如果字符串中只有空白字符且至少有一个字符则返回 True &#xff0c;否则返回 False 。 空白 字符是指在 Unicode 字符数据库 (参见 unicodedata) 中主要类别为 Zs (“Separator, space”) 或所属双向类为 WS, B 或 S 的字符。 str.istitle() 如果字符串中至…

python中的 isdigit( ), islower( ), isupper( ), isalpha( ) , isspace( ) 的用法

isdigit( ), islower( ), isupper( ), isalpha( ) , isspace( )这几个函数在算法题里面还是很有用处的。 isdigit( ) 检测字符串是否只由数字组成。 和 isnumeric( )函数类似 islower( ) 检测字符串是否由小写字母组组成 isupper( ) 检测字符串中所有的字母是否都为大写…

c语言中isupper用法,C 库函数 - isupper()

描述 C 库函数 int isupper(int c) 检查所传的字符是否是大写字母。 声明 下面是 isupper() 函数的声明。 int isupper(int c); 参数 c -- 这是要检查的字符。 返回值 如果 c 是一个大写字母&#xff0c;则该函数返回非零值(true)&#xff0c;否则返回 0(false)。 实例 下面的实…