osgEarth的Rex引擎原理分析(二十九)osgEarth::Map的Profile创建过程

本文详细分析了osgEarth中Map的Profile创建过程,包括从地图图层、地图选项、坐标系类型等多个角度探讨如何构建和调整Profile。讨论了如何处理地心和投影坐标系,并解释了为何删除垂直水准面。此外,提到了Map的Profile在rex引擎中的应用。
摘要由CSDN通过智能技术生成

目标:(二十)中的问题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 );
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值