osgearth_city例子总结
转自:http://blog.csdn.net/taor1/article/details/8242480
int main(int argc, char** argv)
{
osg::ArgumentParser arguments(&argc,argv);
// create the map.
Map* map = new Map();
// add a TMS imagery layer:
TMSOptions imagery;
imagery.url() = "http://readymap.org/readymap/tiles/1.0.0/22/";
map->addImageLayer( new ImageLayer("ReadyMap imagery", imagery) );
// create a feature source to load the building footprint shapefile.
OGRFeatureOptions feature_opt;
feature_opt.name() = "buildings";
feature_opt.url() = "../data/boston_buildings_utm19.shp";
feature_opt.buildSpatialIndex() = true;
// a style for the building data:
Style buildingStyle;
buildingStyle.setName( "default" );
ExtrusionSymbol* extrusion = buildingStyle.getOrCreate();
extrusion->heightexpression_r() = Numericexpression_r( "3.5 * max( [story_ht_], 1 )" );
extrusion->flatten() = true;
extrusion->wallStyleName() = "building-wall";
extrusion->roofStyleName() = "building-roof";
// a style for the wall textures:
Style wallStyle;
wallStyle.setName( "building-wall" );
SkinSymbol* wallSkin = wallStyle.getOrCreate();
wallSkin->libraryName() = "us_resources";
wallSkin->addTag( "building" );
wallSkin->randomSeed() = 1;
// a style for the rooftop textures:
Style roofStyle;
roofStyle.setName( "building-roof" );
SkinSymbol* roofSkin = roofStyle.getOrCreate();
roofSkin->libraryName() = "us_resources";
roofSkin->addTag( "rooftop" );
roofSkin->randomSeed() = 1;
roofSkin->isTiled() = true;
// assemble a stylesheet and add our styles to it:
StyleSheet* styleSheet = new StyleSheet();
styleSheet->addStyle( buildingStyle );
styleSheet->addStyle( wallStyle );
styleSheet->addStyle( roofStyle );
// load a resource library that contains the building textures.
ResourceLibrary* reslib =
new ResourceLibrary( "us_resources", "../data/resources/textures_us/catalog.xml" );
styleSheet->addResourceLibrary( reslib );
// set up a paging layout for incremental loading.
FeatureDisplayLayout layout;
layout.tileSizeFactor() = 45.0;
layout.addLevel( FeatureLevel(0.0f, 20000.0f) );
// create a model layer that will render the buildings according to our style sheet.
FeatureGeomModelOptions fgm_opt;
fgm_opt.featureOptions() = feature_opt;
fgm_opt.styles() = styleSheet;
fgm_opt.layout() = layout;
map->addModelLayer( new ModelLayer( "buildings", fgm_opt ) );
// initialize a viewer:
osgViewer::Viewer viewer(arguments);
EarthManipulator* manip = new EarthManipulator();
viewer.setCameraManipulator( manip );
// make the map scene graph:
osg::Group* root = new osg::Group();
viewer.setSceneData( root );
MapNode* mapNode = new MapNode( map );
root->addChild( mapNode );
// Process cmdline args
MapNodeHelper helper;
helper.configureView( &viewer );
//在configureView中加入了
// add some stock OSG handlers:
//view->addEventHandler(new osgViewer::StatsHandler());
//view->addEventHandler(new osgViewer::WindowSizeHandler());
//view->addEventHandler(new osgViewer::ThreadingHandler());
//view->addEventHandler(new osgViewer::LODScaleHandler());
//view->addEventHandler(new osgGA::StateSetManipulator(view->getCamera()->getOrCreateStateSet()));
// osgEarth benefits from pre-compilation of GL objects in the pager. In newer versions of
// OSG, this activates OSG's IncrementalCompileOpeartion in order to avoid frame breaks.
//view->getDatabasePager()->setDoPreCompile( true );
helper.parse(mapNode, arguments, &viewer, root, new LabelControl("City Demo"));
//处理控制台命令
// zoom to a good startup position
manip->setViewpoint( Viewpoint(-71.0763, 42.34425, 0, 24.261, -21.6, 3450.0), 5.0 );
viewer.getDatabasePager()->setDoPreCompile( true );
viewer.getCamera()->addCullCallback( new AutoClipPlaneCullCallback(mapNode) );
return viewer.run();
}
1、Map* map=new Map();//创建一个地图
TMSOptions imagery;//图像层
imagery.url() = "http://readymap.org/readymap/tiles/1.0.0/22/";
map->addImageLayer(new ImageLayer("....",imagery));//加入该层
2、得到建筑物的矢量轮廓
OGRFeatureOptions feature_opt;
feature_opt.name()="buildings";
feature_opt.url()=".....shp";//矢量文件路径
feature_opt.buildSpatialIndex()=true;//构建空间索引,既然是索引,感觉是不是应该提速的。???
3、建筑物的风格
Style buildingStyle;
buildingStyle.setName("default");
ExtrusionSymbol* extrusion=buildingStyle.getOrCreate();
extrusion->height()=Numericexpression_r(3.5*max([story_ht_],1));//这应该是把建筑物拔高的
extrusion->flatten()=true;//这应该是是屋顶平的
extrusion->wallStyleName()="building_wall";//墙的风格名
extrusion->roofStyleName()="building_roof";//屋顶的风格名
4、墙的纹理
Style wallStyle;
wallStyle.setName("building_wall");
SkinSymbol* wallSkin=wallStyle.getOrCreate();
wallSkin->libraryName()="us_resource";//资源库名
wallSkin->addTag("building");//用资源库中building标签
wallSkin->randomSeed()=1;在多个building中随机取值
5、房顶纹理
// a style for the rooftop textures:
Style roofStyle;
roofStyle.setName( "building-roof" );
SkinSymbol* roofSkin = roofStyle.getOrCreate();
roofSkin->libraryName() = "us_resources";
roofSkin->addTag( "rooftop" );
roofSkin->randomSeed() = 1;
roofSkin->isTiled() = true;//进行分块
6、组装style
// assemble a stylesheet and add our styles to it:
StyleSheet* styleSheet = new StyleSheet();
styleSheet->addStyle( buildingStyle );
styleSheet->addStyle( wallStyle );
styleSheet->addStyle( roofStyle );
7、加载资源库
ResourceLibrary* resLib=new ResourceLibrary("us_resource","../data/resources/textures_us/catalog.xml");
8、对页面进行分块,加快加载
FeatureDisplayLayout layout;
layout.tileSizeFactor()=45.0;//分成45块
layout.addLevel(FeatureLevel(0.0,20000.0));范围是0-20000.0,所以每块大小为20000.0/45.0
9、现在在图像层上,加入建筑物层
FeatureGeomModelOptions fgm_opt;
fgm_opt.layout()=layout;
fgm_opt.styles()=styleSheet;
fgm_opt.featureOptions()=feature_opt;
map->addModelLayer(new ModelLayer("building",fgm_opt));
10、加入场景
// make the map scene graph:
osg::Group* root = new osg::Group();
viewer.setSceneData( root );
MapNode* mapNode=new MapNode(map);
root->addChild(mapNode);
MapNodeHelper helper;
helper.configureView(&viewer);
//在configureView中加入了
// add some stock OSG handlers:
//view->addEventHandler(new osgViewer::StatsHandler());
//view->addEventHandler(new osgViewer::WindowSizeHandler());
//view->addEventHandler(new osgViewer::ThreadingHandler());
//view->addEventHandler(new osgViewer::LODScaleHandler());
//view->addEventHandler(new osgGA::StateSetManipulator(view->getCamera()->getOrCreateStateSet()));
// osgEarth benefits from pre-compilation of GL objects in the pager. In newer versions of
// OSG, this activates OSG's IncrementalCompileOpeartion in order to avoid frame breaks.
//view->getDatabasePager()->setDoPreCompile( true );
helper.parse(mapNode, arguments, &viewer, root, new LabelControl("City Demo"));//处理控制台命令,在屏幕左下角加上LabelControl控件
// zoom to a good startup position
manip->setViewpoint( Viewpoint(-71.0763, 42.34425, 0, 24.261, -21.6, 3450.0), 5.0 ); //5秒内转到设置的视点
viewer.getDatabasePager()->setDoPreCompile( true );
viewer.getCamera()->addCullCallback( new AutoClipPlaneCullCallback(mapNode) );
- [OSG][osgEarth]osgEarth例子程序简介
1.osgearth_graticule:生成经纬线. 2.osgearth_annotation:各类标注(点.线.面.模型.文本等). 3.osgearth_city:加载一个城市三维模型,可以浏 ...
- osgearth各个例子功能概述
osgearth各个例子功能概述 转自:http://blog.csdn.net/wl198302/article/details/21177309 最近在学习osgearth,对其还不是很理解,有些 ...
- [原][OSG][osgEarth]osgEarth例子程序简介
1.osgearth_graticule:生成经纬线. 2.osgearth_annotation:各类标注(点.线.面.模型.文本等). 3.osgearth_city:加载一个城市三维模型,可以浏 ...
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- REGEX例子
作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...
- CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子
CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...
- 简单例子了解View的事件分发
什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...
- 简单的例子了解自定义ViewGroup(一)
在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...
随机推荐
- php开发(CI框架使用)
年前接了一个外包项目,要求使用PHP,琢磨来琢磨去,感叹道PHP框架实在是太多了!去知乎搜索一轮,最后决定使用CI, 相关议论如下:https://www.zhihu.com/question/216 ...
- 数据结构之图 Part2 - 2
邻接表 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- 使用html5的离线缓存技术
突然想用html5的离线缓存,但是一直没有成功,在各种群里问发现很多人都没什么经验,最终终于在各种论坛找到解决方案了.下面就简单记录一下相关情况. 一.离线缓存的优点 我们都知道离线缓存主要是用来减少 ...
- 通过yeelink平台监控树莓派CPU温度变化
通过yeelink平台监控树莓派温度,是很多派友入门第一课.作为一名刚入手树莓派裸机不久的新手,在没有其他硬件支持的情况,通过yeelink平台来监控树莓派CPU温度变化,也是我学习树莓派.学习智能硬 ...
- 允许webservice远程测试
System.Web节点下添加 <webServices> <protocols> <add name= "HttpPost"/> <ad ...
- jQuery基础知识点(DOM操作)
1.样式属性操作 1)设置样式属性操作 ①设置单个样式: // 第一个参数表示:样式属性名称 // 第二个参数表示:样式属性值 $(selector).css(“color”, ...
- LoadRunner 脚本学习 -- 读取文件内容
随便创建个txt文档 输入点内容,例如 读取文件内前N个字符: Action() { long myfile; ; ]; char *filename = "E:\\kkk.txt&quo ...
- 性能测试-ORACLE性能监控
通过lr做性能测试的过程,通过监控Oracle数据库的性能 采用的监控工具:PeOny PeOny安装 1. 安装服务端 1) LINUX平台安装 解压缩peony3.x.0.x.tar.gz文件,b ...
- canvas绘制
window.onload = function(){ var can1 = document.getElementById("can1"); var ctx = can1.get ...
- wpf,记录一下颜色设置的2中方法,,,
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color ...