首页 / 浏览问题 / 组件GIS / 问题详情
使用iObjects java 11进行矢量数据集生成三维切片缓存
cjq
6EXP 2023年12月11日

上图是我目前的代码设计,但是我发现生成的缓存只有第一个点数据集的,那setDatasetSettingArray 能否支持一次生成多个缓存?如果不能有其他接口可以实现吗?

1个回答

您好,安装您提供的代码,我已重现“只有第一个点数据集”生成缓存的情况,这里需要您您先循环,对每个矢量数据集调用一次OSGBVectorCacheBuilder。

对于一次性生成多个缓存,您可以使用 SceneCacheBuilder类,您可查看帮助手册《二三维缓存》中的5.2.4章节(在帮助手册中搜索 “生成场景缓存”)(帮助手册位于安装目录下help文件夹中)。
在生成场景缓存时,影像图层对应影像缓存图层,地形图层对应地形缓存图层,矢量图层对应矢量缓存图层,地图图层对应地图缓存图层,如果是缓存图层(比如模型缓存图层)或者KML图层,则保持不变。

这里矢量图层生成的缓存为 矢量缓存,为三维矢量瓦片文件 *.scv

// 设置生成场景缓存的路径,需提前创建好文件夹
String output= "c:\\temp\\outputScene\\1";
//创建场景缓存
SceneCacheBuilder m_sceneCacheBuilder = new SceneCacheBuilder();
Scene scene=new Scene(m_workspace);
scene.open("未命名场景");
m_sceneCacheBuilder.setScene(scene);
m_sceneCacheBuilder.setOutputFolder(output);

//设置哪些普通图层对应的数据会生成缓存
String[] layerNames = {"NewRegion@TestDataSource", "NewLine@TestDataSource", "NewPoint@TestDataSource"};
m_sceneCacheBuilder.setOutputLayerNames(layerNames);

//设置新生成的场景的名称
m_sceneCacheBuilder.setOutputSceneName("Scene");
m_sceneCacheBuilder.setStorageType(StorageType.Single );
m_sceneCacheBuilder.setImageSize(CacheImageSize.SIZE256);
m_sceneCacheBuilder.setS3MVersion(S3MVersion.VERSION_30);
WorkspaceConnectionInfo m_workspaceConnectionInfoCache = new WorkspaceConnectionInfo();

m_workspaceConnectionInfoCache.setServer(output + "Scene.smwu");

m_workspaceConnectionInfoCache.setType(WorkspaceType.SMWU);

m_workspaceConnectionInfoCache.setVersion(WorkspaceVersion.UGC60);

m_sceneCacheBuilder.setOutputWorkspaceConnectionInfo(m_workspaceConnectionInfoCache);
boolean isSuccess= m_sceneCacheBuilder.build();



希望能帮助到您

360EXP 2023年12月11日
好的, 我了解下,场景缓存这个可能不是我需要的,然后针对OSGBVectorCacheBuilder这个可以添加多个数据集,但是生成缓存只会生成一个的问题,我个人理解算是一个bug吧,毕竟都支持添加多个数据集了,建议新版本支持下
您好,感谢您的反馈。

经过与研发同事的沟通和验证,OSGBVectorCacheBuilder中setDatasetSettingArray方法传入的datasettings将会被合并后生成一个三维切片缓存。只有相同类型的数据集会才会被合并生成,其余将被跳过。由数组第一个元素确定此次合并使用的数据集类型。
我们将对 文档内容进行调整,优化说明。
 

同时您反馈的“支持多个数据集”也已经记录,再次感谢您的反馈。
...