本文整理汇总了C++中osgearth::TileKey::createAncestorKey方法的典型用法代码示例。如果您正苦于以下问题:C++ TileKey::createAncestorKey方法的具体用法?C++ TileKey::createAncestorKey怎么用?C++ TileKey::createAncestorKey使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osgearth::TileKey
的用法示例。
在下文中一共展示了TileKey::createAncestorKey方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
bool
TileSource::getBestAvailableTileKey(const osgEarth::TileKey& key,
osgEarth::TileKey& output) const
{
// trivial reject
if ( !key.valid() )
return false;
// trivial accept: no data extents = not enough info.
if (_dataExtents.size() == 0)
{
output = key;
return true;
}
// trivial reject: key doesn't intersect the union of data extents at all.
if ( !getDataExtentsUnion().intersects(key.getExtent()) )
{
return false;
}
bool intersects = false;
unsigned highestLOD = 0;
// We must use the equivalent lod b/c the key can be in any profile.
int layerLOD = getProfile()->getEquivalentLOD( key.getProfile(), key.getLOD() );
for (DataExtentList::const_iterator itr = _dataExtents.begin(); itr != _dataExtents.end(); ++itr)
{
// check for 2D intersection:
if (key.getExtent().intersects( *itr ))
{
// check that the extent isn't higher-resolution than our key:
if ( !itr->minLevel().isSet() || layerLOD >= itr->minLevel().get() )
{
// Got an intersetion; now test the LODs:
intersects = true;
// Is the high-LOD set? If not, there's not enough information
// so just assume our key might be good.
if ( itr->maxLevel().isSet() == false )
{
output = key;
return true;
}
// Is our key at a lower or equal LOD than the max key in this extent?
// If so, our key is good.
else if ( layerLOD <= itr->maxLevel().get() )
{
output = key;
return true;
}
// otherwise, record the highest encountered LOD that
// intersects our key.
else if ( itr->maxLevel().get() > highestLOD )
{
highestLOD = itr->maxLevel().get();
}
}
}
}
if ( intersects )
{
output = key.createAncestorKey( highestLOD );
return true;
}
else
{
return false;
}
}