博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
精模缓存更新方案
阅读量:4163 次
发布时间:2019-05-26

本文共 2929 字,大约阅读时间需要 9 分钟。

      在项目中有时候会遇到需要及时追加数据的情况,比如前面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里面去读取出来设置就会存在上面的问题。

转载地址:http://hipxi.baihongyu.com/

你可能感兴趣的文章
抽象工厂模式
查看>>
桥接模式
查看>>
模板模式
查看>>
状态模式
查看>>
职责链
查看>>
装饰者模式
查看>>
markdown
查看>>
echarts大屏自适应展示
查看>>
小程序自定义组件(tabbar)
查看>>
webpack 学习笔记一(安装及配置文件)
查看>>
webpack 学习笔记二(loader 及 图片打包)
查看>>
git commit -m "" husky > pre-commit (node v12.13.0) Stashing changes...
查看>>
vue 中 v-if 和 v-show 的区别
查看>>
vue 中css样式穿透
查看>>
javascript 阻止事件冒泡 的兼容写法
查看>>
vue中 gojs 的使用及去除水印
查看>>
git克隆和提交操作
查看>>
git 将本地项目添加到远程仓库
查看>>
浏览器地址栏输入URL,按下回车后发生了什么
查看>>
linux常用命令
查看>>