本文整理汇总了C++中GeoPoint::z方法的典型用法代码示例。如果您正苦于以下问题:C++ GeoPoint::z方法的具体用法?C++ GeoPoint::z怎么用?C++ GeoPoint::z使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GeoPoint
的用法示例。
在下文中一共展示了GeoPoint::z方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GeoPoint
bool
getIsectPoint( const GeoPoint& p1, const GeoPoint& p2, const GeoPoint& p3, const GeoPoint& p4, GeoPoint& out )
{
double denom = (p4.y()-p3.y())*(p2.x()-p1.x()) - (p4.x()-p3.x())*(p2.y()-p1.y());
if ( denom == 0.0 )
{
out = GeoPoint::invalid(); // parallel lines
return false;
}
double ua_num = (p4.x()-p3.x())*(p1.y()-p3.y()) - (p4.y()-p3.y())*(p1.x()-p3.x());
double ub_num = (p2.x()-p1.x())*(p1.y()-p3.y()) - (p2.y()-p1.y())*(p1.x()-p3.x());
double ua = ua_num/denom;
double ub = ub_num/denom;
if ( ua < 0.0 || ua > 1.0 ) // || ub < 0.0 || ub > 1.0 )
{
out = GeoPoint::invalid(); // isect point is on line, but not on line segment
return false;
}
double x = p1.x() + ua*(p2.x()-p1.x());
double y = p1.y() + ua*(p2.y()-p1.y());
double z = p1.getDim() > 2? p1.z() + ua*(p2.z()-p1.z()) : 0.0; //right?
out = GeoPoint( x, y, z, p1.getSRS() );
return true;
}
示例2: applyBlast
static void applyBlast(GeoPoint& center, double radius, double offset, const TileKey& key, osg::HeightField* heightField)
{
//Get the extents of the tile
double xmin, ymin, xmax, ymax;
key.getExtent().getBounds(xmin, ymin, xmax, ymax);
int tileSize = heightField->getNumColumns();
// Iterate over the output heightfield and sample the data that was read into it.
double dx = (xmax - xmin) / (tileSize-1);
double dy = (ymax - ymin) / (tileSize-1);
const SpatialReference* srs = SpatialReference::create("wgs84");
for (int c = 0; c < tileSize; ++c)
{
double geoX = xmin + (dx * (double)c);
for (int r = 0; r < tileSize; ++r)
{
double geoY = ymin + (dy * (double)r);
GeoPoint geo(srs, geoX, geoY, center.z(), ALTMODE_ABSOLUTE);
double distance = geo.distanceTo( center );
double ratio = distance / radius;
if (ratio <= 1.0)
{
double weight = 1.0 - osg::clampBetween(ratio, 0.0, 1.0);
if (weight > 0)
{
float h = center.z() + offset * weight;
heightField->setHeight(c, r, h);
}
}
/*
if ( boundary->contains2D(geo.x(), geo.y()) )
{
float h = heightField->getHeight( c, r );
if (h == NO_DATA_VALUE)
{
//h = deformation._offset;
}
else
{
//h += deformation._offset;
h = deformation._offset;
}
heightField->setHeight(c, r, h);
}
*/
}
}
}
示例3:
/* method: z of class GeoPoint */
static int tolua_Lua_ScriptEngine_tolua_GeoPoint_z00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"GeoPoint",0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
GeoPoint* self = (GeoPoint*) tolua_tousertype(tolua_S,1,0);
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'z'",NULL);
#endif
{
double tolua_ret = (double) self->z();
tolua_pushnumber(tolua_S,(double)tolua_ret);
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'z'.",&tolua_err);
return 0;
#endif
}
示例4: traverse
void ElevationLOD::traverse( osg::NodeVisitor& nv)
{
if (nv.getVisitorType() == osg::NodeVisitor::CULL_VISITOR)
{
osgUtil::CullVisitor* cv = static_cast<osgUtil::CullVisitor*>( &nv );
osg::Vec3d eye, center, up;
eye = cv->getViewPoint();
float height = eye.z();
if (_srs)
{
GeoPoint mapPoint;
mapPoint.fromWorld( _srs, eye );
height = mapPoint.z();
}
//OE_NOTICE << "Height " << height << std::endl;
if (height >= _minElevation && height <= _maxElevation)
{
osg::Group::traverse( nv );
}
else
{
//OE_NOTICE << "Elevation " << height << " outside of range " << _minElevation << " to " << _maxElevation << std::endl;
}
}
else
{
osg::Group::traverse( nv );
}
}
示例5: traverse
void ElevationLOD::traverse( osg::NodeVisitor& nv)
{
if (nv.getVisitorType() == osg::NodeVisitor::CULL_VISITOR &&
nv.getTraversalMode() == osg::NodeVisitor::TRAVERSE_ACTIVE_CHILDREN )
{
bool rangeOK = true;
bool altitudeOK = true;
// first test the range:
if ( _minRange.isSet() || _maxRange.isSet() )
{
float range = nv.getDistanceToViewPoint( getBound().center(), true );
rangeOK =
(!_minRange.isSet() || (range >= *_minRange)) &&
(!_maxRange.isSet() || (range <= *_maxRange));
}
if ( rangeOK )
{
if ( _minElevation.isSet() || _maxElevation.isSet() )
{
double alt;
// first see if we have a precalculated elevation:
osgUtil::CullVisitor* cv = Culling::asCullVisitor(nv);
osg::Vec3d eye = cv->getViewPoint();
if ( _srs && !_srs->isProjected() )
{
GeoPoint mapPoint;
mapPoint.fromWorld( _srs.get(), eye );
alt = mapPoint.z();
}
else
{
alt = eye.z();
}
// account for the LOD scale
alt *= cv->getLODScale();
altitudeOK =
(!_minElevation.isSet() || (alt >= *_minElevation)) &&
(!_maxElevation.isSet() || (alt <= *_maxElevation));
}
if ( altitudeOK )
{
std::for_each(_children.begin(),_children.end(),osg::NodeAcceptOp(nv));
}
}
}
else
{
osg::Group::traverse( nv );
}
}
示例6:
bool
AnnotationNode::makeAbsolute( GeoPoint& mapPoint, osg::Node* patch ) const
{
// in terrain-clamping mode, force it to HAT=0:
if ( _altitude.valid() && (
_altitude->clamping() == AltitudeSymbol::CLAMP_TO_TERRAIN ||
_altitude->clamping() == AltitudeSymbol::CLAMP_RELATIVE_TO_TERRAIN) )
{
mapPoint.altitudeMode() = ALTMODE_RELATIVE;
//If we're clamping to the terrain
if (_altitude->clamping() == AltitudeSymbol::CLAMP_TO_TERRAIN)
{
mapPoint.z() = 0.0;
}
}
// if the point's already absolute and we're not clamping it, nop.
if ( mapPoint.altitudeMode() == ALTMODE_ABSOLUTE )
{
return true;
}
// calculate the absolute Z of the map point.
if ( getMapNode() )
{
// find the terrain height at the map point:
double hamsl;
if (getMapNode()->getTerrain()->getHeight(patch, mapPoint.getSRS(), mapPoint.x(), mapPoint.y(), &hamsl, 0L))
{
// apply any scale/offset in the symbology:
if ( _altitude.valid() )
{
if ( _altitude->verticalScale().isSet() )
hamsl *= _altitude->verticalScale()->eval();
if ( _altitude->verticalOffset().isSet() )
hamsl += _altitude->verticalOffset()->eval();
}
mapPoint.z() += hamsl;
}
mapPoint.altitudeMode() = ALTMODE_ABSOLUTE;
return true;
}
return false;
}
示例7: mouseReleaseEvent
void TerrainProfileGraph::mouseReleaseEvent(QMouseEvent* e)
{
if (_selecting)
{
double selectEnd = mapToScene(e->pos()).x();
double zoomStart = osg::minimum(_selectStart, selectEnd);
double zoomEnd = osg::maximum(_selectStart, selectEnd);
double startDistanceFactor = ((zoomStart - _graphField.x()) / (double)_graphField.width());
double endDistanceFactor = ((zoomEnd - _graphField.x()) / (double)_graphField.width());
osg::Vec3d worldStart, worldEnd;
_calculator->getStart(ALTMODE_ABSOLUTE).toWorld(worldStart);
_calculator->getEnd(ALTMODE_ABSOLUTE).toWorld(worldEnd);
double newStartWorldX = (worldEnd.x() - worldStart.x()) * startDistanceFactor + worldStart.x();
double newStartWorldY = (worldEnd.y() - worldStart.y()) * startDistanceFactor + worldStart.y();
double newStartWorldZ = (worldEnd.z() - worldStart.z()) * startDistanceFactor + worldStart.z();
GeoPoint newStart;
newStart.fromWorld(_calculator->getStart().getSRS(), osg::Vec3d(newStartWorldX, newStartWorldY, newStartWorldZ));
newStart.z() = 0.0;
double newEndWorldX = (worldEnd.x() - worldStart.x()) * endDistanceFactor + worldStart.x();
double newEndWorldY = (worldEnd.y() - worldStart.y()) * endDistanceFactor + worldStart.y();
double newEndtWorldZ = (worldEnd.z() - worldStart.z()) * endDistanceFactor + worldStart.z();
GeoPoint newEnd;
newEnd.fromWorld(_calculator->getStart().getSRS(), osg::Vec3d(newEndWorldX, newEndWorldY, newEndtWorldZ));
newEnd.z() = 0.0;
if (osg::absolute(newEnd.x() - newStart.x()) > 0.001 || osg::absolute(newEnd.y() - newStart.y()) > 0.001)
{
_calculator->setStartEnd(newStart, newEnd);
}
else
{
_selecting = false;
drawHoverCursor(mapToScene(e->pos()));
}
}
_selecting = false;
}
示例8: Stringify
void
MouseCoordsLabelCallback::set( const GeoPoint& mapCoords, osg::View* view, MapNode* mapNode )
{
if ( _label.valid() )
{
_label->setText( Stringify()
<< _formatter->format( mapCoords )
<< ", " << mapCoords.z() );
}
}
示例9: isValid
bool
GeoPoint::operator == ( const GeoPoint& rhs ) const
{
return
isValid() && rhs.isValid() &&
SpatialReference::equivalent( getSRS(), rhs.getSRS() ) &&
getDim() == rhs.getDim() &&
x() == rhs.x() &&
(getDim() < 2 || y() == rhs.y()) &&
(getDim() < 3 || z() == rhs.z());
}
示例10: update
void update( float x, float y, osgViewer::View* view )
{
bool yes = false;
// look under the mouse:
osg::Vec3d world;
if ( _terrain->getWorldCoordsUnderMouse(view, x, y, world) )
{
// convert to map coords:
GeoPoint mapPoint;
mapPoint.fromWorld( _terrain->getSRS(), world );
// do an elevation query:
double query_resolution = 0.1; // 1/10th of a degree
double out_hamsl = 0.0;
double out_resolution = 0.0;
bool ok = _query.getElevation(
mapPoint,
out_hamsl,
query_resolution,
&out_resolution );
if ( ok )
{
// convert to geodetic to get the HAE:
mapPoint.z() = out_hamsl;
GeoPoint mapPointGeodetic( s_mapNode->getMapSRS()->getGeodeticSRS(), mapPoint );
static LatLongFormatter s_f;
s_posLabel->setText( Stringify()
<< std::fixed << std::setprecision(2)
<< s_f.format(mapPointGeodetic.y())
<< ", "
<< s_f.format(mapPointGeodetic.x()) );
s_mslLabel->setText( Stringify() << out_hamsl );
s_haeLabel->setText( Stringify() << mapPointGeodetic.z() );
s_resLabel->setText( Stringify() << out_resolution );
yes = true;
}
}
if (!yes)
{
s_posLabel->setText( "-" );
s_mslLabel->setText( "-" );
s_haeLabel->setText( "-" );
s_resLabel->setText( "-" );
}
}
示例11: if
bool
OrthoNode::setPosition( const GeoPoint& position )
{
MapNode* mapNode = getMapNode();
if ( mapNode )
{
// first transform the point to the map's SRS:
const SpatialReference* mapSRS = mapNode->getMapSRS();
//$$$注释
//GeoPoint mapPos = mapSRS ? position.transform(mapSRS) : position;
//if ( !mapPos.isValid() )
// return false;
//_mapPosition = mapPos;
//$$$修改
if ( mapSRS && position.isValid() )//position原来SRS信息不为空
{
position.transform( mapSRS );
_mapPosition = position;
}
else if ( mapSRS )
{
_mapPosition = GeoPoint( mapSRS, position.x(), position.y(), position.z() );//position原来SRS信息为空
}
else
{
_mapPosition = position;
}
}
else
{
_mapPosition = position;
}
// make sure the node is set up for auto-z-update if necessary:
configureForAltitudeMode( _mapPosition.altitudeMode() );
// and update the node.
if ( !updateTransforms(_mapPosition) )
return false;
return true;
}
示例12: updateTransform
void Dragger::updateTransform(osg::Node* patch)
{
osg::Matrixd matrix;
GeoPoint mapPoint;
_mapNode->getMap()->toMapPoint( _position, mapPoint );
//Get the height
if (_position.altitudeMode() == ALTMODE_RELATIVE)
{
double hamsl;
if (_mapNode->getTerrain()->getHeight(mapPoint.x(), mapPoint.y(), &hamsl, 0L, patch))
{
mapPoint.z() += hamsl;
}
mapPoint.altitudeMode() = ALTMODE_ABSOLUTE;
}
mapPoint.createLocalToWorld( matrix );
setMatrix( matrix );
}
示例13: visitPoint
bool visitPoint( GeoPoint& p )
{
bool ok = true;
// pull it out of the source reference frame:
p.set( p * src_rf );
// reproject it:
if ( handle )
ok = OCTTransform( handle, 1, &p.x(), &p.y(), &p.z() ) != 0;
// push it into the new reference frame:
p.set( p * to_srs->getReferenceFrame() );
p = p.getDim() == 2? GeoPoint( p.x(), p.y(), to_srs ) : GeoPoint( p.x(), p.y(), p.z(), to_srs );
return ok;
}
示例14: centerMapOnNode
void LOSCreationDialog::centerMapOnNode(osg::Node* node)
{
if (node && _map.valid() && _manager.valid() && _views)
{
AnnotationNode* annoNode = dynamic_cast<AnnotationNode*>(node);
if (annoNode && annoNode->getAnnotationData() && annoNode->getAnnotationData()->getViewpoint())
{
_manager->doAction(this, new SetViewpointAction(osgEarth::Viewpoint(*annoNode->getAnnotationData()->getViewpoint()), *_views));
}
else
{
osg::Vec3d center = node->getBound().center();
GeoPoint output;
output.fromWorld( _map->getSRS(), center );
//_map->worldPointToMapPoint(center, output);
_manager->doAction(this, new SetViewpointAction(osgEarth::Viewpoint(
"center", output.x(), output.y(), output.z(), 0.0, -90.0, 1e5), *_views));
}
}
}
示例15: arguments
int
main(int argc, char** argv)
{
osg::ArgumentParser arguments(&argc,argv);
if ( arguments.read("--stencil") )
osg::DisplaySettings::instance()->setMinimumNumStencilBits( 8 );
//Setup a CompositeViewer
osgViewer::CompositeViewer viewer(arguments);
//Setup our main view that will show the loaded earth file.
osgViewer::View* mainView = new osgViewer::View();
mainView->getCamera()->setNearFarRatio(0.00002);
mainView->setCameraManipulator( new EarthManipulator() );
mainView->setUpViewInWindow( 50, 50, 800, 800 );
viewer.addView( mainView );
//Setup a MiniMap View that will be embedded in the main view
int miniMapWidth = 400;
int miniMapHeight = 200;
osgViewer::View* miniMapView = new osgViewer::View();
miniMapView->getCamera()->setNearFarRatio(0.00002);
miniMapView->getCamera()->setViewport( 0, 0, miniMapWidth, miniMapHeight);
miniMapView->setCameraManipulator( new EarthManipulator() );
miniMapView->getCamera()->setClearColor( osg::Vec4(0,0,0,0));
miniMapView->getCamera()->setProjectionResizePolicy( osg::Camera::FIXED );
miniMapView->getCamera()->setProjectionMatrixAsPerspective(30.0, double(miniMapWidth) / double(miniMapHeight), 1.0, 1000.0);
//Share a graphics context with the main view
miniMapView->getCamera()->setGraphicsContext( mainView->getCamera()->getGraphicsContext());
viewer.addView( miniMapView );
// load an earth file, and support all or our example command-line options
// and earth file <external> tags
osg::Node* node = MapNodeHelper().load( arguments, mainView );
if ( node )
{
MapNode* mapNode = MapNode::findMapNode(node);
//Set the main view's scene data to the loaded earth file
mainView->setSceneData( node );
//Setup a group to hold the contents of the MiniMap
osg::Group* miniMapGroup = new osg::Group;
MapNode* miniMapNode = makeMiniMapNode();
miniMapGroup->addChild( miniMapNode );
//Get the main MapNode so we can do tranformations between it and our minimap
MapNode* mainMapNode = MapNode::findMapNode( node );
//Set the scene data for the minimap
miniMapView->setSceneData( miniMapGroup );
//Add a marker we can move around with the main view's eye point
Style markerStyle;
markerStyle.getOrCreate<IconSymbol>()->url()->setLiteral( "../data/placemark32.png" );
PlaceNode* eyeMarker = new PlaceNode(miniMapNode, GeoPoint(miniMapNode->getMapSRS(), 0, 0), "", markerStyle);
miniMapGroup->addChild( eyeMarker );
miniMapGroup->getOrCreateStateSet()->setRenderBinDetails(100, "RenderBin");
osg::Node* bounds = 0;
while (!viewer.done())
{
//Reset the viewport so that the camera's viewport is static and doesn't resize with window resizes
miniMapView->getCamera()->setViewport( 0, 0, miniMapWidth, miniMapHeight);
//Get the eye point of the main view
osg::Vec3d eye, up, center;
mainView->getCamera()->getViewMatrixAsLookAt( eye, center, up );
//Turn the eye into a geopoint and transform it to the minimap's SRS
GeoPoint eyeGeo;
eyeGeo.fromWorld( mainMapNode->getMapSRS(), eye );
eyeGeo.transform( miniMapNode->getMapSRS());
//We want the marker to be positioned at elevation 0, so zero out any elevation in the eye point
eyeGeo.z() = 0;
//Set the position of the marker
eyeMarker->setPosition( eyeGeo );
if (bounds)
{
miniMapGroup->removeChild( bounds );
}
GeoExtent extent = getExtent( mainView );
bounds = drawBounds( miniMapNode, extent );
miniMapGroup->addChild( bounds );
viewer.frame();
}
}
else
{
OE_NOTICE
<< "\nUsage: " << argv[0] << " file.earth" << std::endl
<< MapNodeHelper().usage() << std::endl;
}
return 0;
//.........这里部分代码省略.........