osgEarth的Rex引擎原理分析(二十一)创建瓦片模型过程详解

本文深入解析osgEarth的Rex引擎中创建瓦片模型的过程,涉及图层管理、进度回调、瓦片模型组件等内容。通过检查图层的渲染类型、活动状态和过滤,将影像、高程等信息整合到瓦片模型中,同时探讨了osgEarth::TerrainEngineRequirements和图层滤波器的角色。文章详述了颜色层、细分层和高程层的添加步骤,并列举了一系列待分析的问题,涵盖引擎的多个核心方面。

目标:(十七)中问题47

瓦片模型的作用是负责管理瓦片中的影像、高程等图层信息(这些信息的获取最终通过createTileModel函数来实现),负责维护瓦片版本等,应当是每一个瓦片都对应有一个瓦片模型,这个瓦片模型是在瓦片请求过程中创建的,具体看(十七)。

osgEarth/TerrainTileModelFactory.cpp
TerrainTileModel*
TerrainTileModelFactory::createTileModel(const MapFrame&                  frame,
                                         const TileKey&                   key,
                                         const CreateTileModelFilter&     filter,
                                         const TerrainEngineRequirements* requirements,
                                         ProgressCallback*                progress)
{
    // Make a new model:
    osg::ref_ptr<TerrainTileModel> model = new TerrainTileModel(
        key,
        frame.getRevision() );

    // assemble all the components:
    //addImageLayers(model.get(), frame, requirements, key, filter, progress);
    addColorLayers(model.get(), frame, requirements, key, filter, progr
osgEarth 中配置自定义投影类型,主要依赖于 `<map>` 配置文件中的 `<profile>` 元素,它用于指定地图的投影方式和空间参考系统。osgEarth 支持多种内置投影配置,包括 `global-mercator`(Web Mercator)和 `eqc-wgs84`(Equirectangular)等,同时也允许开发者通过定义空间参考系统来实现自定义投影[^3]。 要实现自定义投影,首先需要在地图配置文件中将 `type` 设置为 `projected`,然后在 `<profile>` 标签中指定所需的投影名称或 EPSG 编码。例如,若要使用等距投影(Equirectangular),可以在配置文件中使用 `eqc-wgs84` 作为 profile 名称[^2]。若需要使用其他投影,如 EPSG:3857(Web Mercator),则可以使用 `global-mercator` 作为 profile 名称[^3]。 以下是一个使用等距投影的地图配置示例: ```xml <map name="EquirectangularMap" type="projected" version="2"> <options> <terrain driver="rex"/> <profile>eqc-wgs84</profile> </options> <image name="World Image" driver="gdal"> <url>world.tif</url> </image> </map> ``` 如果需要定义一个 osgEarth 不直接支持的自定义投影,可以通过创建自定义的空间参考系统(SpatialReference)来实现。这通常涉及调用 `osgEarth::SpatialReference::create` 方法并传入对应的 EPSG 编码或 WKT 定义。例如: ```cpp osgEarth::SpatialReference* srs = osgEarth::SpatialReference::create("EPSG:XXXX"); ``` 其中 `"EPSG:XXXX"` 替换为实际的 EPSG 编码或 WKT 描述字符串。随后,可以将该空间参考系统应用到地图的 profile 设置中,以实现特定的投影需求。 在配置过程中,还需确保数据源的空间参考与地图的投影一致,否则需要进行坐标转换。osgEarth 提供了 `osgEarth::GeometryUtils::transformGeometry` 等工具方法用于处理不同坐标系统之间的几何数据转换。 此外,osgEarthRex 引擎支持基于投影的地形渲染,因此在配置文件中指定 `<terrain driver="rex"/>` 可以更好地适配不同的投影方式[^2]。 ### 相关问题 1. osgEarth 中如何配置 EPSG:3857 投影? 2. 如何在 osgEarth 中实现等距投影地图的高效渲染? 3. osgEarth 是否支持通过 WKT 定义自定义空间参考系统? 4. osgEarth 中如何实现不同图层使用不同投影的叠加显示? 5. osgEarthRex 引擎在处理非 Mercator 投影时有哪些优化策略?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值