本文整理汇总了C++中TileSource::createHeightField方法的典型用法代码示例。如果您正苦于以下问题:C++ TileSource::createHeightField方法的具体用法?C++ TileSource::createHeightField怎么用?C++ TileSource::createHeightField使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TileSource
的用法示例。
在下文中一共展示了TileSource::createHeightField方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getTileSource
osg::HeightField*
ElevationLayer::createHeightFieldFromTileSource(const TileKey& key,
ProgressCallback* progress)
{
osg::ref_ptr<osg::HeightField> result;
if (progress && progress->isCanceled())
{
return 0L;
}
TileSource* source = getTileSource();
if ( !source )
{
if (progress) progress->message() = "no tile source";
return 0L;
}
// If the key is blacklisted, fail.
if ( source->getBlacklist()->contains( key ))
{
OE_DEBUG << LC << "Tile " << key.str() << " is blacklisted " << std::endl;
if (progress) progress->message() = "blacklisted";
return 0L;
}
// If the profiles are horizontally equivalent (different vdatums is OK), take the
// quick route:
if ( key.getProfile()->isHorizEquivalentTo( getProfile() ) )
{
// Only try to get data if the source actually has data
if (!mayHaveData(key))
{
OE_DEBUG << LC << "Source for layer has no data at " << key.str() << std::endl;
//if (progress) progress->message() = "mayHaveData=false";
return 0L;
}
// Make it from the source:
result = source->createHeightField( key, getOrCreatePreCacheOp(), progress );
// If the result is good, we how have a heightfield but it's vertical values
// are still relative to the tile source's vertical datum. Convert them.
if (result.valid())
{
if ( ! key.getExtent().getSRS()->isVertEquivalentTo( getProfile()->getSRS() ) )
{
VerticalDatum::transform(
getProfile()->getSRS()->getVerticalDatum(), // from
key.getExtent().getSRS()->getVerticalDatum(), // to
key.getExtent(),
result.get() );
}
}
// Blacklist the tile if it is the same projection as the source and
// we can't get it and it wasn't cancelled
if (!result.valid())
{
if ( progress == 0L || !progress->isCanceled() )
{
source->getBlacklist()->add( key );
}
}
}
// Otherwise, profiles don't match so we need to composite:
else
{
// note: this method takes care of the vertical datum shift internally.
osg::ref_ptr<NormalMap> dummyNormalMap;
assembleHeightField( key, result, dummyNormalMap, progress );
}
if (progress && progress->isCanceled())
{
return 0L;
}
return result.release();
}
示例2: getTileSource
osg::HeightField*
ElevationLayer::createHeightFieldFromTileSource(const TileKey& key,
ProgressCallback* progress)
{
osg::HeightField* result = 0L;
TileSource* source = getTileSource();
if ( !source )
return 0L;
// If the key is blacklisted, fail.
if ( source->getBlacklist()->contains( key.getTileId() ) )
{
OE_DEBUG << LC << "Tile " << key.str() << " is blacklisted " << std::endl;
return 0L;
}
// If the profiles are horizontally equivalent (different vdatums is OK), take the
// quick route:
if ( key.getProfile()->isHorizEquivalentTo( getProfile() ) )
{
// Only try to get data if the source actually has data
if ( !source->hasData(key) )
{
OE_DEBUG << LC << "Source for layer has no data at " << key.str() << std::endl;
return 0L;
}
// Make it from the source:
result = source->createHeightField( key, _preCacheOp.get(), progress );
// If the result is good, we how have a heightfield but it's vertical values
// are still relative to the tile source's vertical datum. Convert them.
if ( result )
{
if ( ! key.getExtent().getSRS()->isVertEquivalentTo( getProfile()->getSRS() ) )
{
VerticalDatum::transform(
getProfile()->getSRS()->getVerticalDatum(), // from
key.getExtent().getSRS()->getVerticalDatum(), // to
key.getExtent(),
result );
}
}
// Blacklist the tile if it is the same projection as the source and we can't get it and it wasn't cancelled
if ( !result && (!progress || !progress->isCanceled()))
{
source->getBlacklist()->add( key.getTileId() );
}
}
// Otherwise, profiles don't match so we need to composite:
else
{
// note: this method takes care of the vertical datum shift internally.
result = assembleHeightFieldFromTileSource( key, progress );
}
#if 0
// If the profiles don't match, use a more complicated technique to assemble the tile:
if ( !key.getProfile()->isEquivalentTo( getProfile() ) )
{
result = assembleHeightFieldFromTileSource( key, progress );
}
else
{
// Only try to get data if the source actually has data
if ( !source->hasData( key ) )
{
OE_DEBUG << LC << "Source for layer has no data at " << key.str() << std::endl;
return 0L;
}
// Make it from the source:
result = source->createHeightField( key, _preCacheOp.get(), progress );
}
#endif
return result;
}