elevation

更新时间:2022-11-24 08:35:13 阅读: 评论:0


2022年11月24日发(作者:技术资料翻译)

osgEarth例⼦学习-feature_

例⼦学习第⼀天

今天是2019年2.26,接下来的⼀段时间开始研究关于在osgEarth中地形整(压平)的事⼉,最后的应⽤就是开路,在osgEarth地球的表

⾯,⽐如⼭上能⾃动⽣成道路之类的。

⾸先看下例⼦的效果介绍

还是很酷炫的,羡慕啊,开始⼲吧。

好久没摸oe了,只能⼀点⼀点来,在vs2010中随便选了个例⼦cpp,这⾥选择的是

但是⾥⾯有好多⽤不上的代码(应该吧),先注销掉。上⾯⼀堆包含都没管,菜鸟⼀只,也分辨不出来,啥Handler都留着,没管。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespaceosgEarth;

usingnamespaceosgEarth::Util;

usingnamespaceosgEarth::Util::Controls;

usingnamespaceosgEarth::Annotation;

staticMapNode*s_mapNode=0L;

staticLabelControl*s_posLabel=0L;

staticLabelControl*s_vdaLabel=0L;

staticLabelControl*s_mslLabel=0L;

staticLabelControl*s_haeLabel=0L;

staticLabelControl*s_egm96Label=0L;

staticLabelControl*s_mapLabel=0L;

staticLabelControl*s_resLabel=0L;

staticPlaceNode*s_marker=0L;

//Aneventhandlerthatwillprintouttheelevationattheclickedpoint

structQueryElevationHandler:publicosgGA::GUIEventHandler

{

QueryElevationHandler()

:_mouDown(fal),

_terrain(s_mapNode->getTerrain()),

_query(s_mapNode->getMap())

{

_map=s_mapNode->getMap();

_TilesToCache(10);

_lBackOnNoData(fal);

__back(s_mapNode->getTerrainEngine());

}

voidupdate(floatx,floaty,osgViewer::View*view)

{

boolyes=fal;

//lookunderthemou:

osg::Vec3dworld;

osgUtil::LineSegmentInterctor::Interctionshits;

if(view->computeInterctions(x,y,hits))

{

world=()->getWorldInterctPoint();

//converttomapcoords:

GeoPointmapPoint;

rld(_terrain->getSRS(),world);

//doanelevationquery:

doublequery_resolution=0;//max.

doubleout_hamsl=0.0;

doubleout_resolution=0.0;

boolok=_vation(

mapPoint,

out_hamsl,

query_resolution,

&out_resolution);

if(ok)

if(ok)

{

//converttogeodetictogettheHAE:

mapPoint.z()=out_hamsl;

GeoPointmapPointGeodetic(s_mapNode->getMapSRS()->getGeodeticSRS(),mapPoint);

staticLatLongFormatters_f;

s_posLabel->tText(Stringify()

<

<

<<","

<

s_mslLabel->tText(Stringify()<

s_haeLabel->tText(Stringify()<

s_resLabel->tText(Stringify()<

doubleegm96z=mapPoint.z();

VerticalDatum::transform(

()->getVerticalDatum(),

VerticalDatum::get("egm96"),

mapPointGeodetic.y(),

mapPointGeodetic.x(),

egm96z);

s_egm96Label->tText(Stringify()<

yes=true;

}

//finally,getanormalISECTHAEpoint.

GeoPointictPoint;

rld(_terrain->getSRS()->getGeodeticSRS(),world);

s_mapLabel->tText(Stringify()<<());

//andmovethemarker.

s_marker->tPosition(mapPoint);

}

if(!yes)

{

s_posLabel->tText("-");

s_mslLabel->tText("-");

s_haeLabel->tText("-");

s_resLabel->tText("-");

s_egm96Label->tText("-");

}

}

boolhandle(constosgGA::GUIEventAdapter&ea,osgGA::GUIActionAdapter&aa)

{

if(ntType()==CLICK&&

ton()==_MOUSE_BUTTON)

{

osgViewer::View*view=static_cast(());

update((),(),view);

returntrue;

}

returnfal;

}

constMap*_map;

constTerrain*_terrain;

constTerrain*_terrain;

bool_mouDown;

ElevationQuery_query;

osg::NodePath_path;

};

intmain(intargc,char**argv)

{

osg::ArgumentParrarguments(&argc,argv);

osgViewer::Viewerviewer(arguments);

s_mapNode=0L;

osg::Node*earthFile=MapNodeHelper().load(arguments,&viewer);

if(earthFile)

s_mapNode=MapNode::get(earthFile);

if(!s_mapNode)

{

OE_WARN<<"Unabletoloadearthfile."<

return-1;

}

osg::Group*root=newosg::Group();

neData(root);

//installtheprogrammablemanipulator.

eraManipulator(newosgEarth::Util::EarthManipulator());

//TheMapNodewillrendertheMapobjectinthescenegraph.

root->addChild(earthFile);

//Aneventhandlerthatwillrespondtomouclicks:

ntHandler(newQueryElevationHandler());

//addsomestockOSGhandlers:

ntHandler(newosgViewer::StatsHandler());

ntHandler(newosgViewer::WindowSizeHandler());

ntHandler(newosgGA::StateSetManipulator(era()->getOrCreateStateSet()));

();

}

然后再看⼀眼feature_⽂件,⽤的是Nodepad++打开的。英⽂不太好,把所有的英⽂都翻译了中⽂。

../data/

../data/

/readymap/tiles/1.0.0/116/

7

17

global-geodetic

../data/flatten_mt_

true

MtRainier

-21.7843

-27.566

38701.6m

-121.77

46.842

-0.545658

这⾥要注意,添加地图的时候,精度低的要在前⾯,精度⾼的放下⾯,不然会遮挡掉。

这⾥福建省的在上,全球图在下就只会显⽰全球图了,如下

就完全看不到福建,反之调换顺序,结果如下

福建出来啦!图是在91卫图下的,有⽔印,拿来做实验哈哈。总之福建出来了。

还有⼀点,tif格式的图⽤的驱动器⽤gdal就⾏,驱动器是来决定如何解析图⽚的(应该hah)

现在很好奇,⾼程是怎么显⽰出来的,继续下载了福建省的⾼程数据,感觉着福建这地图太丑了,影响体验,先不显⽰它了!把名称

本文发布于:2022-11-24 08:35:13,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/10622.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:behalf
标签:elevation
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图