高速缓存

根据源数据的性质,OSGearth可能必须在成为地形图块之前对其执行一些处理。这可能包括下载、重投影、裁剪、镶嵌或合成等。这些操作可能会变得昂贵。通过设置缓存,您可以指示osgearth存储处理结果,这样下次需要相同的图块时就不需要再次执行该操作。

注意!osgearth的缓存使用了一种内部数据存储表示,不打算通过任何公共API访问它。它仅用于临时缓存,而不用于数据发布格式。结构随时可能发生变化。如果要发布数据存储库,请考虑 osgearth_package 而是实用工具!

设置缓存

您可以在 地球文件 . 以下设置将自动激活所有图像和立面图层上的缓存:

<map>
    <options>
        <cache type="filesystem">
            <path>folder_name</path>
        </cache>

代码如下:

FileSystemCacheOptions cacheOptions;
cacheOptions.path() = ...;

MapOptions mapOptions;
mapOptions.cache() = cacheOptions;

或者,您可以使用将应用于所有地球文件的环境变量。记住这会 覆盖 地球文件中的缓存设置:

set OSGEARTH_CACHE_DRIVER=leveldb
set OSGEARTH_CACHE_PATH=folder_name

在代码中,您可以在osgearth注册表中设置全局缓存:

osgEarth::Registry::instance()->setCache(...);
osgEarth::Registry::instance()->setDefaultCachePolicy(...);

缓存策略

一旦设置了缓存,osgearth将默认地将其用于所有图像和立面层。如果要重写此行为,可以使用 缓存策略 . 缓存策略告诉osgearth某个对象是否应该以及如何使用缓存。

在一个 地球文件 您可以使用 cache_policy 阻止。在这里,我们将它应用于整个地图:

<map>
    <options>
        <cache_policy usage="cache_only"/>

或者您可以将策略应用于单个层:

<image>
    <cache_policy usage="no_cache"/>
    ...

缓存策略的值 使用 是:

read_write

默认值。如果配置了缓存,请使用缓存。

no_cache

即使有缓存,也不要使用它。仅直接从数据源读取。

cache_only

如果设置了缓存,则只使用缓存中的数据;不要转到数据源。

您还可以指示缓存使对象过期。默认情况下,缓存数据永不过期,但可以使用 max_age 属性来告诉它将对象视为有效的时间:

<cache_policy max_age="3600"/>

以秒为单位指定最大期限。上面的示例将使超过一小时的对象过期。

环境变量

有时从环境中控制缓存更方便,特别是在开发期间。

这些变量重写缓存策略属性:

OSGEARTH_NO_CACHE

启用 no_cache 任何osgearth地图的策略。(设置为1)

OSGEARTH_CACHE_ONLY

启用 cache_only 任何osgearth地图的策略。(设置为1)

OSGEARTH_CACHE_MAX_AGE

将缓存设置为使对象过期超过此秒数。

这些不是缓存策略的一部分,而是控制特定的缓存实现。

OSGEARTH_CACHE_PATH

缓存的根文件夹。设置此选项将为任何一个缓存驱动程序启用缓存。

OSGEARTH_CACHE_DRIVER

设置要使用的缓存驱动程序的名称,例如 filesystemleveldb .

Note :环境变量 覆盖 中的缓存设置 地球文件 !见下文。

缓存策略设置的优先级

因为您可以在不同的地方设置缓存策略,所以我们需要建立优先级。这是规则。

  • 地图设置 . 这是在 Map 中的对象 <map><options> 在地球文件中阻塞。这将为地图中的每个层设置默认缓存策略。这是最薄弱的策略设置;它可以被下面的任何设置覆盖。

  • 层设置 . 这是在 ImageLayerElevationLayer 对象(或 <map><image><map><elevation> 在接地文件中阻塞)。这将覆盖映射中的顶级设置,但不会覆盖由环境设置的缓存策略(请参见下文)。(这也是覆盖驱动程序策略提示(见下文)的唯一方法,但很少需要这样做。)

  • 环境变量 . 它们被读取并存储在注册表的 overrideCachePolicy 它们将覆盖地图或图层中的设置。但是,它们不会覆盖驱动程序策略提示。

  • 驱动程序策略提示 . 有时司机会告诉Osgearth 从未 缓存它提供的数据,并遵循osgearth的要求。唯一的重写方法是在层本身上明确设置缓存策略。(你很少需要担心这个。)

种子设定缓存

有时,为感兴趣的特定区域预先设定缓存种子非常有用。osgearth提供了一个名为 osgearth_cache 完成这项任务。 osgearth_cache 将获取一个地球文件并填充它找到的任何缓存。

类型 osgearth_cache --help 在命令行上获取用法信息。

Note :缓存是一个暂时的“黑盒”,旨在在某些情况下提高性能。它不集成为可分发的数据存储库。在许多情况下,您可以将缓存文件夹从一个环境移动到另一个环境,它将工作,但osgearth不工作。 保证 这种行为。