当前位置: 首页 > news >正文

[osgearth]通过API创建一个earth模型

通过API的方式大体需要以下几个步骤:

 

创建map对象——

创建影像数据层——

创建高程数据层——

将影像数据层以及高程数据层加入到map对象——

根据前面创建的map对象创建mapNode节点——

将mapNode节点加入到场景;

 

 

我们可以对地形进行修改操作,如添加新的影像、高程数据,移除特定的影像、高程数据,重新制定影像、高程数据的顺序等;

 

 

赶紧进入正题,程序加载各种数据,首先介绍一下总体的方式

 

 

/*这里XXXOptions 是根据不同的数据类型选择不同驱动,比如加载本地数据可以使用GDALOptions ,加 载TMS数据可以使用TMSOptions(注意TMSOptions可以加载本地也可以加载网上数据),WMSOptions可以加载网上数据(注意这个options主要加载影像和图片数据),ArcGISOptions加载ArcGIS Server发布数据。*/

osgEarth::Drivers::XXXOptions XXXLayer;

 

/*这里就是加载的数据路径,如果加载的本地数据就是本地数据的路径,如果加载是网 上数据就是相应的网址*/

XXXLayer.url()=osgEarth::URI(".................................");

 

/*加载的数据是分层管理,每加载进来一个数据在earth上就是一个数据层,这里给数据层付个名字。*/

std::string LayerName="earth";

 

/*osgearth里layer主要有三种类型 ImageLayer、ElevationLayer和ModleLayer ,前两个大家从字面就可以知道第一个是加载影像和第二个是加载高程数据的,第三个是主要用来加载shp数据,至少我是这样用的,不知道还能否加载其他数据类型。确定加载用的驱动、数据源位置(路径)、数据层名和初始化了数据层,接下来就是把数据层加到地球中如下所示。*/

 osg::ref_ptr<osgEarth::XXXLayer> layer =new   osgEarth::XXXLayer(osgEarth::XXXLayerOptions(LayerName,XXXLayer));

 m_pMap->addImageLayer(layer.get());

(1)加载本地数据

a  本地影像数据,数据类型为tif

 osgEarth::Drivers::GDALOptions imagelayerOpt;//选择GDALOptions
 imagelayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\world.tif");//影像数据路径

 std::string imagelayerName = "worldimage"; //影像数据层名
 osg::ref_ptr<osgEarth::ImageLayer> imageLayer = new  osgEarth::ImageLayer(osgEarth::ImageLayerOptions(imagelayerName ,imagelayerOpt));

//初始数据层

 m_pMap->addImageLayer(imageLayer .get());

b 本地高程数据,数据类型为tif

 osgEarth::Drivers::GDALOptions demlayerOpt; //使用还是GDALOptions

 demlayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\worlddem.tif");//高程数据路径

 std::string demlayerName = "worlddem";//高程数据层名
 osg::ref_ptr<osgEarth::ImageLayer> demLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(demlayerName,demlayerOpt));//初始数据层

 m_pMap->addImageLayer(demLayer.get());


加载本地经过package 切片的数据还可以用TMSOptions,

osgEarth::Drivers::TMSOptions tmsOpt;选择TMSOptions 驱动
tmsOpt.url()=osgEarth::URI("//Edvis_-1/Layer_0/tms.xml");//package 切片生成金字塔文件下的 xml

std::stringDemtmslayerName="TmsDem";//图层名

osgEarth::ElevationLayerOptionstmslayerOpt(DemtmslayerName,tmsOpt);

osg::ref_ptr<osgEarth::ElevationLayer> TmsDemLayer = new osgEarth::ElevationLayer(tmslayerOpt);

m_pMap->addElevationLayer(TmsDemLayer.get());//初始化图层并加入到地球中

 

(2)加载网上数据

a 加载ArcGIS Server 发布的数据 加载方式与上面提到的类似

osgEarth::Drivers::ArcGISOptions MapImageLayer;
MapImageLayer.url()=osgEarth::URI("http://xxx.xxx.xxx.xxx.:xxxx/arcgis/rest/services/world/map003/MapServer");
std::string CdlayerName="worldimage";
osg::ref_ptr<osgEarth::ImageLayer> cdlayer =new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(CdlayerName,MapImageLayer));
m_pMap->addImageLayer(cdlayer.get());

//这里注意,当osgearth访问ArcGIS Server 发布数据的时候有些问题很奇怪,用上面的方式访问ArcGIS Server 国外发布的数据没问题,但是访问自己发布的数据就会有问题,经过试验投影要设成3857才能正常访问。

b 加载网上数据还可以用WMSOptions 加载方式同上。

相关文章:

  • 我的博客的第一篇文章
  • 八数码问题
  • 网络工程师--Vlan
  • 设计中的同理心
  • Stardew Valley(星露谷物语)Mod开发之路 1环境配置
  • 充分发挥行销效力的九个技巧
  • 远行
  • JavaScript数据类型
  • 关于许多人一直关注该怎么唱好高音的问题...
  • thinkphp-删除delete函数
  • escape()、encodeURI()、encodeURIComponent()区别详解
  • Apache(httpd) 报错You don't have permission to access /on this server.
  • 项目开发流程规范文档
  • 存储过程3. 参数的引入
  • UML概况
  • express + mock 让前后台并行开发
  • Javascript编码规范
  • JavaScript类型识别
  • js ES6 求数组的交集,并集,还有差集
  • miaov-React 最佳入门
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 阿里云前端周刊 - 第 26 期
  • 关于for循环的简单归纳
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Prometheus VS InfluxDB
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ![CDATA[ ]] 是什么东东
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • $.ajax()方法详解
  • %@ page import=%的用法
  • (1)(1.9) MSP (version 4.2)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (八)c52学习之旅-中断实验
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .gitignore文件设置了忽略但不生效
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Reactor简单使用教程
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET6 命令行启动及发布单个Exe文件
  • .NET的数据绑定
  • .NET中GET与SET的用法
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [] 与 [[]], -gt 与 > 的比较
  • [04] Android逐帧动画(一)
  • [20170705]diff比较执行结果的内容.txt