本文整理汇总了C++中GeoExtent::getCentroid方法的典型用法代码示例。如果您正苦于以下问题:C++ GeoExtent::getCentroid方法的具体用法?C++ GeoExtent::getCentroid怎么用?C++ GeoExtent::getCentroid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GeoExtent
的用法示例。
在下文中一共展示了GeoExtent::getCentroid方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: BoundingSphered
osg::BoundingSphered
FeatureModelGraph::getBoundInWorldCoords( const GeoExtent& extent ) const
{
osg::Vec3d center, corner;
GeoExtent workingExtent;
if ( extent.getSRS()->isEquivalentTo( _usableMapExtent.getSRS() ) )
{
workingExtent = extent;
}
else
{
workingExtent = extent.transform( _usableMapExtent.getSRS() ); // safe.
}
workingExtent.getCentroid( center.x(), center.y() );
corner.x() = workingExtent.xMin();
corner.y() = workingExtent.yMin();
if ( _session->getMapInfo().isGeocentric() )
{
workingExtent.getSRS()->transformToECEF( center, center );
workingExtent.getSRS()->transformToECEF( corner, corner );
}
return osg::BoundingSphered( center, (center-corner).length() );
}
示例2: BoundingSphered
osg::BoundingSphered
FeatureModelGraph::getBoundInWorldCoords(const GeoExtent& extent,
const MapFrame* mapf ) const
{
osg::Vec3d center, corner;
GeoExtent workingExtent;
if ( !extent.isValid() )
{
return osg::BoundingSphered();
}
if ( extent.getSRS()->isEquivalentTo( _usableMapExtent.getSRS() ) )
{
workingExtent = extent;
}
else
{
workingExtent = extent.transform( _usableMapExtent.getSRS() ); // safe.
}
workingExtent.getCentroid( center.x(), center.y() );
double centerZ = 0.0;
if ( mapf )
{
// Use an appropriate resolution for this extents width
double resolution = workingExtent.width();
ElevationQuery query( *mapf );
GeoPoint p( mapf->getProfile()->getSRS(), center, ALTMODE_ABSOLUTE );
query.getElevation( p, center.z(), resolution );
centerZ = center.z();
}
corner.x() = workingExtent.xMin();
corner.y() = workingExtent.yMin();
corner.z() = 0;
if ( _session->getMapInfo().isGeocentric() )
{
const SpatialReference* ecefSRS = workingExtent.getSRS()->getECEF();
workingExtent.getSRS()->transform( center, ecefSRS, center );
workingExtent.getSRS()->transform( corner, ecefSRS, corner );
//workingExtent.getSRS()->transformToECEF( center, center );
//workingExtent.getSRS()->transformToECEF( corner, corner );
}
if (workingExtent.getSRS()->isGeographic() &&
( workingExtent.width() >= 90 || workingExtent.height() >= 90 ) )
{
return osg::BoundingSphered( osg::Vec3d(0,0,0), 2*center.length() );
}
return osg::BoundingSphered( center, (center-corner).length() );
}
示例3: query
osg::BoundingSphered
FeatureModelGraph::getBoundInWorldCoords(const GeoExtent& extent,
const MapFrame* mapf ) const
{
osg::Vec3d center, corner;
//double z = 0.0;
GeoExtent workingExtent;
if ( extent.getSRS()->isEquivalentTo( _usableMapExtent.getSRS() ) )
{
workingExtent = extent;
}
else
{
workingExtent = extent.transform( _usableMapExtent.getSRS() ); // safe.
}
workingExtent.getCentroid( center.x(), center.y() );
double centerZ = 0.0;
if ( mapf )
{
// Use an appropriate resolution for this extents width
double resolution = workingExtent.width();
ElevationQuery query( *mapf );
query.getElevation( GeoPoint(mapf->getProfile()->getSRS(),center), center.z(), resolution );
centerZ = center.z();
}
corner.x() = workingExtent.xMin();
corner.y() = workingExtent.yMin();
corner.z() = 0;
if ( _session->getMapInfo().isGeocentric() )
{
workingExtent.getSRS()->transformToECEF( center, center );
workingExtent.getSRS()->transformToECEF( corner, corner );
}
return osg::BoundingSphered( center, (center-corner).length() );
}
示例4:
void
FeaturesToNodeFilter::computeLocalizers( const FilterContext& context )
{
if ( context.isGeoreferenced() )
{
if ( context.getSession()->getMapInfo().isGeocentric() )
{
const SpatialReference* geogSRS = context.profile()->getSRS()->getGeographicSRS();
GeoExtent geodExtent = context.extent()->transform( geogSRS );
if ( geodExtent.width() < 180.0 )
{
osg::Vec3d centroid, centroidECEF;
geodExtent.getCentroid( centroid.x(), centroid.y() );
geogSRS->transform( centroid, geogSRS->getECEF(), centroidECEF );
geogSRS->getECEF()->createLocalToWorld( centroidECEF, _local2world );
_world2local.invert( _local2world );
}
}
else // projected
{
if ( context.extent().isSet() )
{
osg::Vec3d centroid;
context.extent()->getCentroid(centroid.x(), centroid.y());
context.extent()->getSRS()->transform(
centroid,
context.getSession()->getMapInfo().getProfile()->getSRS(),
centroid );
_world2local.makeTranslate( -centroid );
_local2world.invert( _world2local );
}
}
}
}
示例5:
void
FeaturesToNodeFilter::computeLocalizers( const FilterContext& context, const osgEarth::GeoExtent &extent, osg::Matrixd &out_w2l, osg::Matrixd &out_l2w )
{
if ( context.isGeoreferenced() )
{
if ( context.getSession()->getMapInfo().isGeocentric() )
{
const SpatialReference* geogSRS = context.profile()->getSRS()->getGeographicSRS();
GeoExtent geodExtent = extent.transform( geogSRS );
if ( geodExtent.width() < 180.0 )
{
osg::Vec3d centroid, centroidECEF;
geodExtent.getCentroid( centroid.x(), centroid.y() );
geogSRS->transform( centroid, geogSRS->getECEF(), centroidECEF );
geogSRS->getECEF()->createLocalToWorld( centroidECEF, out_l2w );
out_w2l.invert( out_l2w );
}
}
else // projected
{
if ( extent.isValid() )
{
osg::Vec3d centroid;
extent.getCentroid(centroid.x(), centroid.y());
extent.getSRS()->transform(
centroid,
context.getSession()->getMapInfo().getProfile()->getSRS(),
centroid );
out_w2l.makeTranslate( -centroid );
out_l2w.invert( out_w2l );
}
}
}
}
示例6: GeoPoint
/* method: getCentroid of class GeoExtent */
static int tolua_Lua_ScriptEngine_tolua_GeoExtent_getCentroid00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"GeoExtent",0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
GeoExtent* self = (GeoExtent*) tolua_tousertype(tolua_S,1,0);
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'getCentroid'",NULL);
#endif
{
GeoPoint tolua_ret = (GeoPoint) self->getCentroid();
{
#ifdef __cplusplus
void* tolua_obj = new GeoPoint(tolua_ret);
tolua_pushusertype(tolua_S,tolua_clone(tolua_S,tolua_obj,tolua_collect_GeoPoint),"GeoPoint");
#else
void* tolua_obj = tolua_copy(tolua_S,(void*)&tolua_ret,sizeof(GeoPoint));
tolua_pushusertype(tolua_S,tolua_clone(tolua_S,tolua_obj,tolua_collect),"GeoPoint");
#endif
}
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'getCentroid'.",&tolua_err);
return 0;
#endif
}
示例7: s_llf
//.........这里部分代码省略.........
for( unsigned cy = 0; cy < cellsPerTileY; ++cy )
{
double clat = tileExtent.yMin() + cellHeight * (double)cy;
if ( clat == key.getProfile()->getExtent().yMin() )
continue;
LineString* lat = new LineString(2);
lat->push_back( osg::Vec3d(tileExtent.xMin(), clat, 0) );
lat->push_back( osg::Vec3d(tileExtent.xMax(), clat, 0) );
latLines.push_back( new Feature(lat, geoSRS) );
if ( hasText )
{
for( unsigned cx = 0; cx < cellsPerTileX; ++cx )
{
double clon = tileExtent.xMin() + (0.5*cellWidth) + cellWidth*(double)cy;
LabelNode* label = new LabelNode(
_mapNode.get(),
GeoPoint(geoSRS, clon, clat),
s_llf.format(clat),
textStyle );
labels->addChild( label );
}
}
}
osg::Group* group = new osg::Group();
GeometryCompiler compiler;
osg::ref_ptr<Session> session = new Session( map );
FilterContext context( session.get(), _featureProfile.get(), tileExtent );
// make sure we get sufficient tessellation:
compiler.options().maxGranularity() = std::min(cellWidth, cellHeight) / 16.0;
compiler.options().geoInterp() = GEOINTERP_GREAT_CIRCLE;
osg::Node* lonNode = compiler.compile(lonLines, lineStyle, context);
if ( lonNode )
group->addChild( lonNode );
compiler.options().geoInterp() = GEOINTERP_RHUMB_LINE;
osg::Node* latNode = compiler.compile(latLines, lineStyle, context);
if ( latNode )
group->addChild( latNode );
// add the labels.
if ( labels.valid() )
group->addChild( labels.get() );
// get the geocentric tile center:
osg::Vec3d tileCenter;
tileExtent.getCentroid( tileCenter.x(), tileCenter.y() );
const SpatialReference* ecefSRS = tileExtent.getSRS()->getECEF();
osg::Vec3d centerECEF;
tileExtent.getSRS()->transform( tileCenter, ecefSRS, centerECEF );
//tileExtent.getSRS()->transformToECEF( tileCenter, centerECEF );
osg::NodeCallback* ccc = 0L;
// set up cluster culling.
if ( tileExtent.getSRS()->isGeographic() && tileExtent.width() < 90.0 && tileExtent.height() < 90.0 )
{
ccc = ClusterCullingFactory::create( group, centerECEF );
}
// add a paging node for higher LODs:
if ( key.getLevelOfDetail() + 1 < _options->levels().size() )
{
const GeodeticGraticuleOptions::Level& nextLevel = _options->levels()[key.getLevelOfDetail()+1];
osg::BoundingSphere bs = group->getBound();
std::string uri = Stringify() << key.str() << "_" << getID() << "." << GRID_MARKER << "." << GRATICULE_EXTENSION;
osg::PagedLOD* plod = new osg::PagedLOD();
plod->setCenter( bs.center() );
plod->addChild( group, std::max(level._minRange,nextLevel._maxRange), FLT_MAX );
plod->setFileName( 1, uri );
plod->setRange( 1, 0, nextLevel._maxRange );
group = plod;
}
// or, if this is the deepest level and there's a minRange set, we need an LOD:
else if ( level._minRange > 0.0f )
{
osg::LOD* lod = new osg::LOD();
lod->addChild( group, level._minRange, FLT_MAX );
group = lod;
}
if ( ccc )
{
osg::Group* cccGroup = new osg::Group();
cccGroup->addCullCallback( ccc );
cccGroup->addChild( group );
group = cccGroup;
}
return group;
}
示例8: renderFeaturesForStyle
//.........这里部分代码省略.........
{
buffer.capStyle() = masterLine->stroke()->lineCap().value();
if ( masterLine->stroke()->width().isSet() )
{
lineWidth = masterLine->stroke()->width().value();
GeoExtent imageExtentInFeatureSRS = imageExtent.transform(featureSRS);
double pixelWidth = imageExtentInFeatureSRS.width() / (double)image->s();
// if the width units are specified, process them:
if (masterLine->stroke()->widthUnits().isSet() &&
masterLine->stroke()->widthUnits().get() != Units::PIXELS)
{
const Units& featureUnits = featureSRS->getUnits();
const Units& strokeUnits = masterLine->stroke()->widthUnits().value();
// if the units are different than those of the feature data, we need to
// do a units conversion.
if ( featureUnits != strokeUnits )
{
if ( Units::canConvert(strokeUnits, featureUnits) )
{
// linear to linear, no problem
lineWidth = strokeUnits.convertTo( featureUnits, lineWidth );
}
else if ( strokeUnits.isLinear() && featureUnits.isAngular() )
{
// linear to angular? approximate degrees per meter at the
// latitude of the tile's centroid.
double lineWidthM = masterLine->stroke()->widthUnits()->convertTo(Units::METERS, lineWidth);
double mPerDegAtEquatorInv = 360.0/(featureSRS->getEllipsoid()->getRadiusEquator() * 2.0 * osg::PI);
double lon, lat;
imageExtent.getCentroid(lon, lat);
lineWidth = lineWidthM * mPerDegAtEquatorInv * cos(osg::DegreesToRadians(lat));
}
}
// enfore a minimum width of one pixel.
float minPixels = masterLine->stroke()->minPixels().getOrUse( 1.0f );
lineWidth = osg::clampAbove(lineWidth, pixelWidth*minPixels);
}
else // pixels
{
lineWidth *= pixelWidth;
}
}
}
buffer.distance() = lineWidth * 0.5; // since the distance is for one side
buffer.push( lines, context );
}
// Transform the features into the map's SRS:
TransformFilter xform( imageExtent.getSRS() );
xform.setLocalizeCoordinates( false );
FilterContext polysContext = xform.push( polygons, context );
FilterContext linesContext = xform.push( lines, context );
// set up the AGG renderer:
agg::rendering_buffer rbuf( image->data(), image->s(), image->t(), image->s()*4 );
// Create the renderer and the rasterizer
agg::rasterizer ras;
示例9: if
// Calculates a sub-extent of a larger extent, given the number of children and
// the child number. This currently assumes the subdivision ordering used by
// VirtualPlanetBuilder.
GeoExtent
TerrainUtils::getSubExtent(const GeoExtent& extent,
int num_children,
int child_no)
{
GeoPoint centroid = extent.getCentroid();
GeoExtent sub_extent;
switch( num_children )
{
case 0:
case 1:
sub_extent = extent;
break;
case 2:
if ( child_no == 0 )
{
sub_extent = GeoExtent(
extent.getXMin(),
extent.getYMin(),
centroid.x(),
extent.getYMax(),
extent.getSRS() );
}
else
{
sub_extent = GeoExtent(
centroid.x(),
extent.getYMin(),
extent.getXMax(),
extent.getYMax(),
extent.getSRS() );
}
break;
case 4:
if ( child_no == 2 )
{
sub_extent = GeoExtent(
extent.getXMin(),
centroid.y(),
centroid.x(),
extent.getYMax(),
extent.getSRS() );
}
else if ( child_no == 3 )
{
sub_extent = GeoExtent(
centroid.x(),
centroid.y(),
extent.getXMax(),
extent.getYMax(),
extent.getSRS() );
}
else if ( child_no == 0 )
{
sub_extent = GeoExtent(
extent.getXMin(),
extent.getYMin(),
centroid.x(),
centroid.y(),
extent.getSRS() );
}
else if ( child_no == 1 )
{
sub_extent = GeoExtent(
centroid.x(),
extent.getYMin(),
extent.getXMax(),
centroid.y(),
extent.getSRS() );
}
}
return sub_extent;
}