[原][译][osgearth]API加载地球(OE官方文档翻译)
原文参考:http://docs.osgearth.org/en/latest/developer/maps.html#programmatic-map-creation
本人翻译水平有限。。。
加载earth地图文件
osg::Node* globe = osgDB::readNodeFile("myglobe.earth");
最简单的方式
API编程式的地图创建
用API创建一个地图的基本步骤是:
1.创建一个地图对象(Map object)
2.在你认为合适的地方添加图像层和高程层
3.创建一个可以绘制“地图对象”的MapNode
4.将MapNode添加进场景图。
你可以在任何时候向地图添加层:
#include <osgEarth/Map>
#include <osgEarth/MapNode>
#include <osgEarthDrivers/tms/TMSOptions>
#include <osgEarthDrivers/gdal/GDALOptions> using namespace osgEarth;
using namespace osgEarth::Drivers;
... // Create a Map and set it to Geocentric to display a globe
Map* map = new Map(); // Add an imagery layer (blue marble from a TMS source)
{
TMSOptions tms;
tms.url() = "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/satellite/";
ImageLayer* layer = new ImageLayer( "NASA", tms );
map->addImageLayer( layer );
} // Add an elevationlayer (SRTM from a local GeoTiff file)
{
GDALOptions gdal;
gdal.url() = "c:/data/srtm.tif";
ElevationLayer* layer = new ElevationLayer( "SRTM", gdal );
map->addElevationLayer( layer );
} // Create a MapNode to render this map:
MapNode* mapNode = new MapNode( map );
... viewer->setSceneData( mapNode );
(注意:官方的文档是OE2.4的,目前的API是OE2.9喽,时间:2017年2月7日10:27:15)
在运行时使用MapNode
MapNode是在场景图中绘制地图的节点(node)
如果,你不是用API创建的MapNode,你需要先使用静态函数get来获取它:
// Load the map
osg::Node* loadedModel = osgDB::readNodeFile("mymap.earth"); // Find the MapNode
osgEarth::MapNode* mapNode = MapNode::get( loadedModel );
如果你有了MapNode,你就可以使用地图了:
// Add an OpenStreetMap image source
TMSOptions driverOpt;
driverOpt.url() = "http://tile.openstreetmap.org/";
driverOpt.tmsType() = "google"; ImageLayerOptions layerOpt( "OSM", driverOpt );
layerOpt.profile() = ProfileOptions( "global-mercator" ); ImageLayer* osmLayer = new ImageLayer( layerOpt );
mapNode->getMap()->addImageLayer( osmLayer );
你也可以删除或重新订制图层:
// Remove a layer from the map. All other layers are repositioned accordingly
mapNode->getMap()->removeImageLayer( layer ); // Move a layer to position 1 in the image stack
mapNode->getMap()->moveImageLayer( layer, );
处理图层
地图包含纹理层和高程层对象,这些层包含一些可以在运行时调整的属性
例如,你可以使用API打开,关闭,或者调整纹理层透明度等
ImageLayer* layer;
...
layer->setOpacity( 0.5 ); // makes the layer partially transparent
另加:
完整的osgearthviewer工具关于api加载的函数
/** @brief 创建场景 */
int Create()
{
// create the map.创建一个地图
Map* map = new Map(); // add a TMS imager layer:添加一个TMS图片层
TMSOptions imagery;
imagery.url() = "http://readymap.org/readymap/tiles/1.0.0/7/";
map->addImageLayer(new ImageLayer("Imagery", imagery)); // add a TMS elevation layer:添加一个高程图
TMSOptions elevation;
elevation.url() = "http://readymap.org/readymap/tiles/1.0.0/9/";
map->addElevationLayer(new ElevationLayer("Elevation", elevation)); // make the map scene graph:
MapNode* node = new MapNode(map); // initialize a viewer:
osgViewer::Viewer viewer;
viewer.setCameraManipulator(new EarthManipulator);
viewer.setSceneData(node); // add some stock OSG handlers:
viewer.addEventHandler(new osgViewer::StatsHandler());
viewer.addEventHandler(new osgViewer::WindowSizeHandler());
viewer.addEventHandler(new osgViewer::ThreadingHandler());
viewer.addEventHandler(new osgViewer::LODScaleHandler());
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage())); return viewer.run();
}
[原][译][osgearth]API加载地球(OE官方文档翻译)的更多相关文章
- [原][osgearth]API加载earth文件的解析
参考:http://blog.csdn.net/cccstudyer/article/details/17691893 通过\src\osgEarthDrivers\earth\ReaderWrite ...
- ArcGIS Javascript API 加载高德在线地图扩展
利用ArcGIS JavaScript API加载高德在线地图的扩展 /** * Created by WanderGIS on 2015/7/15. */ define(["dojo/_b ...
- [原][译][osgearth][EarthFile]关于EarthFile 的Model Layer 讲解(通过earth文件加载模型层)(OE官方文档翻译)
原文参考:http://docs.osgearth.org/en/latest/references/earthfile.html#model-layer 本人翻译能有限.... 模型层 模型层渲染“ ...
- [原][译][osgearth]关于Features & Symbology (特征与符号)(OE绘制矢量几何与特殊字符)讲解(OE官方文档翻译)
原文参考:http://docs.osgearth.org/en/latest/user/features.html 自己翻译的,本人英文水平有限,有问题看原链接,原文 20170802重置修改部分翻 ...
- [原][译][osgearth]样式表style中参数总结(OE官方文档翻译)
几何Geometry 高度Altitude 挤压Extrusion 图标Icon 模型Model 渲染Render 皮肤Skin 文本Text 覆盖Coverage 提示: 在SDK中,样式表的命名空 ...
- Revit API 加载族并生成实例图元
在Revit API中加载族可以使用Doc.LoadFamily方法,传入要加载的族文件路径名,但是这种方式有一种缺点,就是如果族文件在当前工程中没有加载的话则返回成功,如果已经加载过,则返回失败,也 ...
- vue调用豆瓣API加载图片403问题
"豆瓣API是有请求次数限制的”,这会引发图片在加载的时候出现403问题,视图表现为“图片加载不出来”,控制台表现为报错403. 其实是豆瓣限制了图片的加载,我自己用了一个办法把图片缓存下来 ...
- [原]排错实战——解救加载调试符号失败的IDA
原调试IDA排错troubleshootsymbolspdbsysinternalprocess monitor 缘起 最近想借助IDA逆向一个函数.在windows下,调试器(比如vs, windb ...
- ArcGIS Flex API加载大量数据
1.关于大量数据的加载: 直接将所要展示的数据在服务器端发布成一个MapService,在客户端通过ArcGISDynamicMapServiceLayer来加载.这样的话客户端需要展示的仅仅是一张图 ...
随机推荐
- Swift - 获取状态栏一些信息
// 获取状态栏的各种信息 :网络类型,运营商,电池电量,显示的系统时间等信息 import UIKit enum NetWorkType { case NetworkStatesNone // 没有 ...
- Android - XML序列化
1.xml文件的序列化:采用XmlSerializer来实现XML文件的序列化.相比传统方式,更高效安全 MainActivity.java package com.example.test_buil ...
- postgresql----INSERT
INSERT即向表中写入数据,每条INSERT语句可以写入一条数据,也可以写入多条数据.另外还可以将其他的查询结果集用在INSERT中,将查询结果写入表中. 测试表 test)); CREATE TA ...
- javascript飞机大战-----003创建英雄机
/* 英雄机:因为英雄机只有一辆所以不需要用构造函数 */ var Hero = { //初始图片 self:null, //初始left left:0, //初始top top:0, //生命值 l ...
- Educational Codeforces Round 29
A. Quasi-palindrome 题目链接:http://codeforces.com/contest/863/problem/A 题目意思:问一个数可不可以在不上一些前缀0以后变成一个回文数. ...
- wsdl客户端代码生成的方法
在jdk的bin目录下有一个wsimport.exe的工具,使用该工具命令生产java客户端代码: 命令如下: wsimport -keep -d d:\ -s d:\src -p com.map ...
- Django - 模型层 - 上
一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- Mysql EXPLAIN 相关疑问: Using temporary ; Using filesort
一.什么是Using temporary ; Using filesort 1. using filesort filesort主要用于查询数据结果集的排序操作,首先MySQL会使用sort_buff ...
- docker 离线环境安装oracle
因测试需要,需在内网的测试环境搭建一套docker Oracle 11g环境进行测试,测试环境为redhat 6.6 安装docker 1.7,本机windows 7 环境,安装docker 17.1 ...
- Agent XPs disable
问题 有一天,我们发现SQL Server代理程序在SSMS“SQL Server代理程序(Agent XPs已禁用)”中为我们的SQL Server实例之一停止了以下消息,但该服务正在根据服务控制台 ...