先看一下效果:

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官网自行申请~~~

osgearth加载mapbox在线高程数据相关推荐

  1. ArcGIS API for JavaScript 4.x加载Mapbox在线矢量瓦片服务(weixin公众号【图说GIS】)

    前言 大家都知道,Mapbox在矢量瓦片这个领域做的很好.那么如何使用ArcGIS API 4.x加载,经过研究,将解决方案总结如下. 分析问题 查询ArcGIS JS API // Typical ...

  2. Cesium 实战 - 最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层

    Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层 遇到问题 初始化底图 初始化高程(监听载入完成事件,开启关闭高程) 初始化 3dtile 在线示例 Cesiu ...

  3. 星图地球数据云,便捷加载各类在线地图服务的又一神器

    星图地球目前发布了一系列的产品,对我来说比较感兴趣的是星图地球数据云(GEOVIS Earth Datacloud)这款地球大数据产品.今天,我就带大家以来深入在线体验一下这款产品. 01 在线体验 ...

  4. OsgEarth加载DEM高程切片

    DEM数据下载 登录地理空间数据云,导航到高级检索,选择数据集(SRTMDEM 90M 分辨率原始高程数据),并设置好行政区进行检索. DEM数据拼接 下载的SRTM数据为分块的*.img栅格数据,使 ...

  5. osgEarth加载谷歌卫星地图的源码案例

    一.准备工作 安装水经注万能地图下载器,如果没有安装本软件,可以百度" 水经注软件 "到官方网站下载. 编译OSG.OSGEarth和第三方插件等,这里有一个已经编译好的vs201 ...

  6. MUI 上滑加载(没有更多数据)页面回弹 - 效果

    MUI 上滑加载(没有更多数据)页面回弹 - 效果 效果图 · 略 查看官方文档对应的 demo效果 即可 参考代码如下: <!DOCTYPE html> <html>< ...

  7. leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...

  8. Smart3D系列教程7之 《手动配置S3C索引加载全部的瓦片数据》

    一.前言 迄今为止,Wish3D已经出品推出了6篇系列教程,从倾斜摄影的原理方法.采集照片的技巧.Smart3D各模块的功能应用.小物件的照片重建.大区域的地形重建到DSM及正射影像的处理生产,立足于 ...

  9. osgearth加载本地离线影像瓦片地图

    osgearth加载本地离线影像瓦片地图案例 说明 本实例演示重新编译bing驱动直接加载本地离线影像瓦片地图. 本实例使用软件版本:osg3.3.1和osgEarth2.5 VC10编译环境(参考o ...

  10. Vue+OpenLayers入门(加载高德在线地图)

    开发环境的搭建在上一篇教程中已有描述,如果不知道怎么搭建,请移步Vue+OpenLayers入门(加载OSM在线地图) 此代码为加载高德在线地图以及清除地图上的默认控件: <template&g ...

最新文章

  1. pyhton列表习题
  2. Spring Cloud Stream消费失败后的处理策略(一):自动重试
  3. py-rfcn算法caffe配置,训练及应用到自己的数据集
  4. 2018Alibaba数学竞赛-决赛试题
  5. java web开发之上机指导(2)
  6. 六个 Linux性能监控命令行工具
  7. 【华为云技术分享】如何度量前端项目研发效率与质量(上)
  8. SQL SERVER 自定义函数参数数量对调用时参数数量的影响
  9. java除法运算符号怎么打_Java实用教程:运算符
  10. k3 审核流程图_3 金蝶K3操作流程图详解
  11. 39个让你得到设计灵感的站点
  12. Pytorch入门+实战系列五:Pytorch情感分类
  13. win7系统计算机怎么排列图标,Win7系统桌面图标的三种排序方式
  14. elasticsearch 生产级别深度优化
  15. QMC5883L说明文档
  16. 超简单!为图片和 PDF 上去掉水印
  17. LeetCode 1823. 找出游戏的获胜者
  18. 我有一哥们,老牛逼了……
  19. 阿里云物联网平台添加网关设备和子设备
  20. 【论文翻译】(UAI 2018)使用感知预测网络进行潜在物理属性的无监督学习

热门文章

  1. 10.【Axure 10 】菜单-文件-导入RP文件
  2. 计算机 映射网络驱动器,win7电脑映射网络驱动器的方法?
  3. 常见的Markdownpad2运行破解以及This view has crashed!报错和Awesomium1.6.6SDK安装使用
  4. bodymovin导出没有html5,AE脚本-导出json格式的Web动画工具 Bodymovin v5.7.1 + 使用教程...
  5. CCAI2018 | 韩家炜:大规模文本数据挖掘的新方向
  6. CAESAR II 5.00 USB加密锁运行稳定完整功能版/
  7. 在线JSON转Excel
  8. linux关掉终端快捷键,linux终端快捷键汇总
  9. HTML和CSS面试题—整理过的48题,关注收藏,持续更新
  10. CAD插件学习系列教程(四) 一款轻量级的CAD里程标注插件