本文整理汇总了C++中TileKey::createAncestorKey方法的典型用法代码示例。如果您正苦于以下问题:C++ TileKey::createAncestorKey方法的具体用法?C++ TileKey::createAncestorKey怎么用?C++ TileKey::createAncestorKey使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TileKey
的用法示例。
在下文中一共展示了TileKey::createAncestorKey方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
TileKey
TerrainLayer::getBestAvailableTileKey(const TileKey& key) const
{
// trivial reject
if ( !key.valid() )
return TileKey::INVALID;
unsigned MDL = options().maxDataLevel().get();
// We must use the equivalent lod b/c the input key can be in any profile.
unsigned localLOD = getProfile() ?
getProfile()->getEquivalentLOD(key.getProfile(), key.getLOD()) :
key.getLOD();
// Check against level extrema:
if (localLOD < options().minLevel().get() || localLOD > options().maxLevel().get())
{
return TileKey::INVALID;
}
// Next, check against resolution limits (based on the source tile size).
if (options().minResolution().isSet() || options().maxResolution().isSet())
{
const Profile* profile = getProfile();
if ( profile )
{
// calculate the resolution in the layer's profile, which can
// be different that the key's profile.
double resKey = key.getExtent().width() / (double)getTileSize();
double resLayer = key.getProfile()->getSRS()->transformUnits(resKey, profile->getSRS());
if (options().maxResolution().isSet() &&
options().maxResolution().value() > resLayer)
{
return TileKey::INVALID;
}
if (options().minResolution().isSet() &&
options().minResolution().value() < resLayer)
{
return TileKey::INVALID;
}
}
}
// Next check against the data extents.
const DataExtentList& de = getDataExtents();
// If we have mo data extents available, just return the MDL-limited input key.
if (de.empty())
{
return localLOD > MDL ? key.createAncestorKey(MDL) : key;
}
// Reject if the extents don't overlap at all.
if (!getDataExtentsUnion().intersects(key.getExtent()))
{
return TileKey::INVALID;
}
bool intersects = false;
unsigned highestLOD = 0;
// Check each data extent in turn:
for (DataExtentList::const_iterator itr = de.begin(); itr != de.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() || localLOD >= (int)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 )
{
return localLOD > MDL ? key.createAncestorKey(MDL) : key;
}
// Is our key at a lower or equal LOD than the max key in this extent?
// If so, our key is good.
else if ( localLOD <= (int)itr->maxLevel().get() )
{
return localLOD > MDL ? key.createAncestorKey(MDL) : key;
}
// otherwise, record the highest encountered LOD that
// intersects our key.
else if ( itr->maxLevel().get() > highestLOD )
{
highestLOD = itr->maxLevel().get();
}
}
}
}
if ( intersects )
//.........这里部分代码省略.........