目标:(二十)中的问题63
osgEarth::Profile定义了地理信息数据源的组织方式,包括参考坐标系、在参考坐标系下地理信息范围、瓦片分片方案等。
Profile翻译为地理信息参数配置文件比较合适。
在Map添加图层ImageLayer时会创建瓦片源TileSource,瓦片源又会创建Profile,最后将此Profile赋给ImageLayer,但是并没有设置Map的Profile,每个Profile都有两个签名,一个是全部参数签名,一个是水平参数签名,用于和其它Profile做比较。
Map的Profile创建过程位于osgEarth::Map::caculateProfile函数中,在setMap时会执行到该函数,主要是从尝试从不同地方来创建这个Profile,具体完成以下操作:
1、获取所有的地图图层,用于尝试构建Profile的一种方式,每一个图层都可能会关联一个Profile。
2、尝试从地图选项_mapOptions中创建Profile,地图选项在解析.earth文件时从文件option选项中继承过来。会调用osgEarth::Profile的create函数来创建。
3、如果地图选项的坐标系类型是地心坐标系,如果上一步中profile创建成功,并且参考坐标系是投影坐标系(二维),则将profile修正为wgs84坐标系。
4、如果地图选项的坐标系类型是投影坐标系,如果2中profile创建成功,并且参考坐标系是地理坐标系(三维),则将profile修正为等距圆柱投影,如果失败则尝试采用地图图层的profile,如果还失败则尝试创建墨卡托投影。
5、3和4都失败,尝试创建默认wgs84的profile。
6、如果profile设置了垂直水准面,则删除掉。
7、如果地图设置了回调函数,则执行回调函数。
8、将参数配置文件通知到每一个地图图层。
典型的调用Map的Profile函数的方法为:rex引擎的setMap中通过map调用getProfile方法
profile属性的设置和加载方法,这里设置的横纵向瓦片数对实际是没有影响的(参考https://blog.csdn.net/hankern/article/details/123743648)
osgEarth/Profile.cpp
void
ProfileOptions::fromConfig( const Config& conf )
{
if ( !conf.value().empty() )
_namedProfile = conf.value();
conf.getIfSet( "srs", _srsInitString );
conf.getIfSet( "vdatum", _vsrsInitString );