osgEarth缓存

缓存:
根据源数据的性质,osgEarth在成为一个地形块之前可能需要对它进行一些处理。这可能包括下载、重投影、裁剪、mosacing或合成等等。这些操作可能会变得很费时。通过设置缓存,您可以指示osgEarth存储处理的结果,这样下次需要相同的tile时就不需要再做一次了。

注意!osgEarth的缓存使用内部数据存储表示,不打算通过任何公共API访问。它只打算用作临时缓存,而不是数据发布格式。结构随时可能改变。如果您想要发布数据存储库,请考虑osgearth_package实用程序!

设置缓存:
您可以在earth文件中设置一个缓存。以下设置将自动激活所有图像和高程层的缓存:



folder_name


在代码中,如下所示:
FileSystemCacheOptions cacheOptions;
cacheOptions.path() = …;

MapOptions mapOptions;
mapOptions.cache() = cacheOptions;

或者,您可以使用一个环境变量,它将应用于所有earth文件。记住,这会覆盖earth文件中的缓存设置:
set OSGEARTH_CACHE_DRIVER=leveldb
set OSGEARTH_CACHE_PATH=folder_name

在代码中,您可以在osgEarth resgistry中设置一个全局缓存:
osgEarth::Registry::instance()->setCache(…);
osgEarth::Registry::instance()->setDefaultCachePolicy(…);

高速缓存策略:
一旦设置了缓存,osgEarth将默认为所有的图像和高程层使用它。如果要重写此行为,可以使用缓存策略。缓存策略告诉osgEarth某个对象是否以及如何使用缓存。

在earth文件中,可以通过使用cache_policy块来实现这一点。这里我们将它应用到整个地图上:


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


缓存策略的使用值为:
read_write: 默认值。如果配置了缓存,则使用缓存。
no_cache: 即使有缓存,也不要使用它。只直接从数据源读取。
cache_only: 如果设置了缓存,只使用缓存中的数据;永远不要去数据源。

您还可以将缓存定向到过期对象。默认情况下,缓存的数据永远不会过期,但是您可以使用max_age属性告诉它将一个对象视为有效的时间:

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

环境变量
有时候从环境中控制缓存更方便,特别是在开发过程中:
这些变量覆盖缓存策略属性:
OSGEARTH_NO_CACHE: 为任何osgEarth映射启用no_cache策略。(设置为1)
OSGEARTH_CACHE_ONLY: 启用任何osgEarth地图的cache_only策略。(设置为1)
OSGEARTH_CACHE_MAX_AGE: 将缓存设置为过期对象的时间超过此秒。

这些不是缓存策略的一部分,而是控制一个特定的缓存实现。
OSGEARTH_CACHE_PATH: 缓存的根文件夹。设置此设置将启用对任何活动的缓存驱动程序的缓存。
OSGEARTH_CACHE_DRIVER: 设置要使用的缓存驱动程序的名称,例如文件系统或leveldb。

注意:环境变量覆盖了earth文件中的缓存设置!见下文。

缓存策略设置的优先级:
因为您可以在不同的地方设置缓存策略,所以我们需要建立优先级。这是规则。
Map settings. 这是在earth文件中的< Map >块中的Map对象中的缓存策略集。这将为映射中的每个层设置默认缓存策略。这是最弱的政策设置;它可以被下面的任何设置覆盖。
Layer settings. 这是ImageLayer或ElevationLayer对象(或在earth文件中的块中)中的缓存策略集。这将覆盖映射中的顶级设置,但不会覆盖环境设置的缓存策略(参见下面)。(这也是覆盖驱动策略提示的唯一方法(见下文),但是很少需要这样做。)
Environment variables. 它们被读取并存储在注册表的overrideCachePolicy中,它们将覆盖映射或层中的设置。然而,他们不会推翻司机的政策暗示。
Driver policy hints. 有时候,驱动程序会告诉osgEarth永远不要缓存它提供的数据,而osgEarth会遵守。覆盖它的唯一方法是明确地在层上设置缓存策略。(你几乎不用担心这个。)

播种缓存:
有时,为感兴趣的特定领域预种子缓存是有用的。osgEarth提供了一个名为osgearth_cache的实用程序来完成这项任务。osgearth_cache将获取一个Earth文件,并填充它找到的任何缓存。
输入osgearth_cache –help的帮助,获取使用信息。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值