精模缓存更新方案

      在项目中有时候会遇到需要及时追加数据的情况,比如前面1期收集到的模型,已经制作完成并且声称缓存应用于项目。二期数据收集回来后需要将数据追加到项目中,或者是需要将之前某范围内的模型缓存用新收集的数据替换掉。这个时候就涉及到更新追加模型缓存。

      将上面的使用场景归纳一下思路流程就是:现在有模型数据集A以及对应的缓存——把模型B追加到模型A上——生成模型AB——然后把A的缓存更新成AB的缓存。
操作流程:

一、对数据集 A 生成缓存,主要要记录生成缓存的几个重要参数,这些参数也可以从 scp 里获取到:
参考点坐标值 Position(xyz)、瓦片边长 TileWidth、文件类型 FileType、金字塔剖分类型 TilePyramidSplitType,缓存生成目录 ==OutputFolder ==及缓存名称 CacheName
二、业务流中,新的数据生成后,建议单独生成数据集 B,重新计算范围并获取其 bounds;
三、把数据集 B 追加到数据集 A 中,追加完成后,重新计算数据集 A 的范围;
四、更新缓存同样也是 OSGBCacheBuilder 类。与生成缓存不同,需要设置这几个参数:

  1. 缓存生成目录、瓦片边长、缓存名称、文件类型、金字塔剖分类型设置与第一步生成缓存的目录一致
  2. 打开第一步生成的 scp,查看参考点 Position。并设置 OSGBCacheBuilder 的 Position 属性为该点坐标,一般为第一步中数据集 A 的 bounds 的中心点,如果要做成自动化流程,需要在第一步生成缓存设置 Position 属性值,缓存更新的时候设置同样的值即可
  3. 设置 OSGBCacheBuilder 的属性 Bounds 为第二步中数据集 ==B 的 bounds ==
  4. 调用 ==BuildCacheWithoutConfigFile ==方法更新缓存切片文件
  5. 重新设置 OSGBCacheBuilder 的属性 Bounds 为第三步数据集== A 的 bounds ==
  6. 调用 ToConfigAndIndexFile 方法更新 scp 及 dat 文件
    精模缓存数据更新策略具体操作步骤及部分代码如下:(投影坐标系需要先投影转换为地理坐标系)

 模型替换,新的模型替换掉缓存中的部分模型
源数据集 DatasetA,已经生成缓存 CacheA,现要用几个新的模型替换 CacheA 中的一些
模型。新的模型单独存为模型数据集 DatasetB

  1. 记录已有缓存 A 的存放路径,缓存名称,通过 CacheA 的配置文件中获取到插入点
    坐标 pos 瓦片边长 tileWid

  2. 将 DatasetA 要被替换的模型从数据集中删除,把 DatasetB 追加到 DatasetA 中,组
    成新的数据集 DatasetAB,重新计算数据集范围。

  3. 调用 OSGBCacheBuilder.BuildCacheWithoutConfigFile,其中:
    OSGBCacheBuilder.Dataset = DatasetAB;
    OSGBCacheBuilder.outputFolder = CacheA 所在路径;
    OSGBCacheBuilder.CacheName = CacheA 的缓存名称;
    OSGBCacheBuilder.Position = pos;
    OSGBCacheBuilder.TileWidth = tileWd;
    OSGBCacheBuilder.Bounds = DatasetB.Bounds;
    ==注意:此处 bounds 是模型数据集 B 的 Bounds ==

  4. 调 用 OSGBCacheBuilder.ToConfigAndIndexFile 生成配置文件,其中,
    OSGBCacheBuilder.Dataset = DatasetAB;
    OSGBCacheBuilder.outputFolder = CacheA 所在路径;
    OSGBCacheBuilder.CacheName = CacheA 的缓存名称;
    OSGBCacheBuilder.Position = pos;
    OSGBCacheBuilder.TileWidth = tileWd;//以上参数跟第三步一样。
    OSGBCacheBuilder.Bounds = DatasetAB.Bounds;注意:此处的 bounds 是 DatasetAB 的 bounds
     新的模型追加到已有的缓存上
    源模型数据集 A,已经生成缓存 CacheA,现又有模型数据集 B,要将 B 的缓存追加到
    CacheA 中。操作步骤:

  5. 记录已有缓存 A 的存放路径,缓存名称,通过 CacheA 的配置文件中获取到 插入点
    坐标 pos 瓦片边长 tileWid

  6. 将模型数据集 B 追加到数据集 A 上,组成新的数据集 DatasetAB,重新计算数据集
    范围。

  7. 调用 OSGBCacheBuilder.BuildCacheWithoutConfigFile,其中:
    OSGBCacheBuilder.Dataset = DatasetAB;
    OSGBCacheBuilder.outputFolder = CacheA 所在路径;
    OSGBCacheBuilder.CacheName = CacheA 的缓存名称;
    OSGBCacheBuilder.Position = pos;
    OSGBCacheBuilder.TileWidth = tileWd;
    OSGBCacheBuilder.Bounds = DatasetB.Bounds;
    ==注意:此处 bounds 是模型数据集 B 的 Bounds ==

  8. 调 用 OSGBCacheBuilder.ToConfigAndIndexFile 生成配置文件,其中,
    OSGBCacheBuilder.Dataset = DatasetAB;
    OSGBCacheBuilder.outputFolder = CacheA 所在路径;
    OSGBCacheBuilder.CacheName = CacheA 的缓存名称;
    OSGBCacheBuilder.Position = pos;
    OSGBCacheBuilder.TileWidth = tileWd; //以上参数跟第三步一样。
    OSGBCacheBuilder.Bounds = DatasetAB.Bounds;
    注意:此处的 bounds 是 DatasetAB 的 bounds

注意:
当出现更追或者是替换模型缓存的时候,在最后的结果scp中出现不存在的切片文件夹路径的时候,就要检查第二次生成缓存的时候参数是否跟第一次设置的时候一样。如果插入点或者瓦片边长等等不一致了,后面切的算法不一致,就会导致将名称给改了。

尤其注意瓦片边长,第一次默认生成的时候如果没有设置,根据默认的生成会有比较多的小数位。但是写入scp的时候会只保存2个小数位,这个时候从scp里面去读取出来设置就会存在上面的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值