本文共 2929 字,大约阅读时间需要 9 分钟。
在项目中有时候会遇到需要及时追加数据的情况,比如前面1期收集到的模型,已经制作完成并且声称缓存应用于项目。二期数据收集回来后需要将数据追加到项目中,或者是需要将之前某范围内的模型缓存用新收集的数据替换掉。这个时候就涉及到更新追加模型缓存。
将上面的使用场景归纳一下思路流程就是:现在有模型数据集A以及对应的缓存——把模型B追加到模型A上——生成模型AB——然后把A的缓存更新成AB的缓存。
操作流程:一、对数据集 A 生成缓存,主要要记录生成缓存的几个重要参数,这些参数也可以从 scp 里获取到:
参考点坐标值 Position(xyz)、瓦片边长 TileWidth、文件类型 FileType、金字塔剖分类型 TilePyramidSplitType,缓存生成目录 ==OutputFolder ==及缓存名称 CacheName; 二、业务流中,新的数据生成后,建议单独生成数据集 B,重新计算范围并获取其 bounds; 三、把数据集 B 追加到数据集 A 中,追加完成后,重新计算数据集 A 的范围; 四、更新缓存同样也是 OSGBCacheBuilder 类。与生成缓存不同,需要设置这几个参数: 模型替换,新的模型替换掉缓存中的部分模型
源数据集 DatasetA,已经生成缓存 CacheA,现要用几个新的模型替换 CacheA 中的一些 模型。新的模型单独存为模型数据集 DatasetB记录已有缓存 A 的存放路径,缓存名称,通过 CacheA 的配置文件中获取到插入点
坐标 pos 瓦片边长 tileWid将 DatasetA 要被替换的模型从数据集中删除,把 DatasetB 追加到 DatasetA 中,组
成新的数据集 DatasetAB,重新计算数据集范围。调用 OSGBCacheBuilder.BuildCacheWithoutConfigFile,其中:
OSGBCacheBuilder.Dataset = DatasetAB; OSGBCacheBuilder.outputFolder = CacheA 所在路径; OSGBCacheBuilder.CacheName = CacheA 的缓存名称; OSGBCacheBuilder.Position = pos; OSGBCacheBuilder.TileWidth = tileWd; OSGBCacheBuilder.Bounds = DatasetB.Bounds; ==注意:此处 bounds 是模型数据集 B 的 Bounds ==调 用 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 中。操作步骤:记录已有缓存 A 的存放路径,缓存名称,通过 CacheA 的配置文件中获取到 插入点
坐标 pos 瓦片边长 tileWid将模型数据集 B 追加到数据集 A 上,组成新的数据集 DatasetAB,重新计算数据集
范围。调用 OSGBCacheBuilder.BuildCacheWithoutConfigFile,其中:
OSGBCacheBuilder.Dataset = DatasetAB; OSGBCacheBuilder.outputFolder = CacheA 所在路径; OSGBCacheBuilder.CacheName = CacheA 的缓存名称; OSGBCacheBuilder.Position = pos; OSGBCacheBuilder.TileWidth = tileWd; OSGBCacheBuilder.Bounds = DatasetB.Bounds; ==注意:此处 bounds 是模型数据集 B 的 Bounds ==调 用 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/