高速缓存¶
根据源数据的性质,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
设置要使用的缓存驱动程序的名称,例如
filesystem
或leveldb
.
Note :环境变量 覆盖 中的缓存设置 地球文件 !见下文。
缓存策略设置的优先级¶
因为您可以在不同的地方设置缓存策略,所以我们需要建立优先级。这是规则。
地图设置 . 这是在
Map
中的对象<map><options>
在地球文件中阻塞。这将为地图中的每个层设置默认缓存策略。这是最薄弱的策略设置;它可以被下面的任何设置覆盖。层设置 . 这是在
ImageLayer
或ElevationLayer
对象(或<map><image>
或<map><elevation>
在接地文件中阻塞)。这将覆盖映射中的顶级设置,但不会覆盖由环境设置的缓存策略(请参见下文)。(这也是覆盖驱动程序策略提示(见下文)的唯一方法,但很少需要这样做。)环境变量 . 它们被读取并存储在注册表的
overrideCachePolicy
它们将覆盖地图或图层中的设置。但是,它们不会覆盖驱动程序策略提示。驱动程序策略提示 . 有时司机会告诉Osgearth 从未 缓存它提供的数据,并遵循osgearth的要求。唯一的重写方法是在层本身上明确设置缓存策略。(你很少需要担心这个。)
种子设定缓存¶
有时,为感兴趣的特定区域预先设定缓存种子非常有用。osgearth提供了一个名为 osgearth_cache
完成这项任务。 osgearth_cache
将获取一个地球文件并填充它找到的任何缓存。
类型
osgearth_cache --help
在命令行上获取用法信息。
Note :缓存是一个暂时的“黑盒”,旨在在某些情况下提高性能。它不集成为可分发的数据存储库。在许多情况下,您可以将缓存文件夹从一个环境移动到另一个环境,它将工作,但osgearth不工作。 保证 这种行为。