使用osgearth_cache对*.earth进行缓存时,包含矢量数据可能导致死循环的提醒

1 问题的发现

最近在用osgearth_cache对*.earth进行缓存时,发现往往会卡在一个进程中:

my@my-MRC-WX0:~/work/qtproject/build-OSGObject-unknown-Debug$ osgearth_cache --seed simple.earth
[osgEarth]  Seeding layerworld_boundaries

就是进行不下去了。一开始我以为是卡住了,或者是那个图层的源数据太大了导致的。后来发现,保存缓存数据的文件夹还一直在增大,虽然增大的步子很小,但确实一直在增大。
后来分析卡主的图层的数据类型,大概猜测了一个可能。
卡住的位置的内容如下:

    <!--添加世界线(黄色)与国界线-->
    <image name="world_boundaries" driver="agglite">
    	<features name="world" driver="ogr">
    		<url>/media/my/SSD/OSG_DATA/MAIN_DATA/features/worldShp/world.shp</url>
    		<build_spatial_index>true</build_spatial_index>
    	</features>
    	
    	<geometry_type>line</geometry_type>
    	
    	<relative_line_size>true</relative_line_size>
    	
    	<styles>
    		<style type="text/css">
    			world{
    				stroke:#ffff00;
    				stroke-opacity:1.0;
    				stroke-width:1.5;
    			}
    		</style>
    	</styles>
    </image>

2 分析猜测

大胆猜测,可能并不是卡住了,而是陷入了死循环,而陷入死循环的原因,可能是因为,这里加载的shp数据是国界线和省界线,矢量下,线是只有长度,他的宽度本身没有太大意义,也就是说,如果不加以限制,无论把图像拉的多大,他的宽度都可以重新修正出来。所以无论剖析多少层,线都能进行下去,而osgearth_cache --seed simple.earth没有定义最大的LOD的缓存层数,由下面的解释可以看出来,没有指定时,就是最大的LOD层级。因此就可能陷入死循环。

[--max-level level]             ; Highest LOD level to seed (default=highest available)

3 解决方案

  1. 在缓存时,定义LOD的最大缓存层数--max-level level,只是这样可能会影响别的数据的缓存。
  2. 其实像国界线,省界线这样的矢量数据,它本身非常的小,完全不必要缓存,因此,在做缓存操作时,可以先将这部分矢量数据的加载的内容注释掉,也就是不进行缓存,缓存完之后,再取消注释。
  3. 将缓存策略配置到需要缓存的ImageLayer或者ElevationsLayer中。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼月半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值