首页 / 浏览问题 / 组件GIS / 问题详情
组件,场景缓存生成接口相关
267EXP 2019年08月22日

在超图桌面端9D有相关的参数设置,但是超图组件没有找到相应的接口。如下:

1.文件类型,我想生成s3m格式的

2.点外挂模型生成缓存

3.瓦片边长,组件中是叫【UpdateSize】吗?

1个回答

您好,你可以参考下面的截图,相关参数都有

5,985EXP 2019年08月22日
我要对球面场景里的多个自定义专题图层生成三维缓存也是用这个接口吗?
还有你标红的那个属性已经没有了,还是没有找到点外挂模型生成缓存。

谢谢
上面回复有误,下面重新回复,场景切缓存接口为SceneCacheBuilder

1.缓存类型由Layer3DDataset.FileType 指定(图层属性里面)

2.点外挂生成缓存Layer3DDataset.IsBuildOSGBPipeCache

3.瓦片边长Layer3DDataset.TileWidth
好的,就是说在生成缓存之前,需要先对场景中的自定义专题图层进行设置对吧?
是的,先对图层做设置

你好我这边试了,但是发现一些问题,如下

1.切出来后,在桌面端不能加载,没有数据的样子。

2.切成出来的缓存文件里,只有一个图层下有一个*.s3m文件,但桌面切出来的每个图层文件都有*.s3m文件。

3.组件除了对专题图层生成缓存文件夹了,还对相应的数据集也生成缓存文件夹了。

4.另外,桌面新生成的工作空间为.sxwu,组件就是指定.sxmu也还是生成.smwu

请问是不是还需要设置一些其他参数?还是什么问题,需要怎么解决?

比如场景能不能用工作空间中已经保存好了的?还是说需要新建,然后添加自定义专题图,再生成缓存?

组件生成的目录如下:

桌面端生成的目录如下:

组件生成的一个缓存图层,只有一个.s3m

桌面生成的一个缓存图层,有多个.s3m

组件生成的一个缓存图层,没有.s3m

桌面生成的一个缓存图层,有多个.s3m

可以对保存好的场景直接切缓存,建议你先参考范例,成功切出一个缓存,再考虑其它问题

范例在超图技术资源中心

这个demo,我测试了,跟我写的并没有区别,还是出现一样的问题。

还请帮忙咨询下你们那边研发人员,或者说有没有组件成功切场景自定义专题图的范例。

1影像缓存和矢量缓存能成功生成。

2.当我场景中的图层是自定义三维专题图时,生成缓存时。它会生成两个文件夹,其中一个是矢量缓存文件,能够加载显示。 但是我想要的自定义专题图文件里确实空的,只有一个xml文件,还望帮忙解决。

1.生成的缓存文件目录,场景图层中只有一个自定义专题图层,但是也会生成矢量缓存;桌面端并不会,只有一个文件夹。

2.矢量缓存文件,能够加载显示(但我不想要这个)

3.这个是要的,自定义专题图层对应的文件夹,但是没有缓存文件。

4.这是桌面端正常生成的缓存文件,我想要的就是这样的结果,但组件做不到。

桌面就是组件写出来的,您那边问题我这边一个个看,先把合并根节点给解决了,再弄切缓存的事情吧
切缓存涉及到的参数比较多,不像合并根节点就这几个参数,刚刚测试java组件合并根节点是没问题的,这个确实奇怪
好吧,没办法,项目催的急,我有两种类型的缓存要切。

1.倾斜摄影缓存,合并根节点是其中的一环。

2.场景缓存,场景由三维自定义专题图构成。
好吧,只能慢慢来。

目前需求就是,用超图组件 c# 对倾斜摄影数据和场景自定义专题图生成s3m格式的缓存。

自定义专题图生成s3m缓存代码:

            WorkspaceConnectionInfo info = new WorkspaceConnectionInfo(@"D:\zhanhui\iserver\supermap-iserver-9.1.0-win64-zip\supermap-iserver-9.1.0-win64-zip\samples\data\Realspace\PipeLine3D\Pipe3D.sxwu");
            Workspace workspace = new Workspace();
            workspace.Open(info);
            Scene scene = new Scene();
            scene.Workspace = workspace;
            scene.Open("NetWork@Pipe3D");

            Layer3DDataset layer3ddataset0 = scene.Layers[0] as Layer3DDataset;//该图层为自定义专题图
            Layer3DDataset layer3ddataset1 = scene.Layers[1] as Layer3DDataset;
            Layer3DDataset layer3ddataset2 = scene.Layers[2] as Layer3DDataset;//该图层为自定义专题图
            Layer3DDataset layer3ddataset3 = scene.Layers[3] as Layer3DDataset;

            layer3ddataset0.IsBuildOSGBCache = true;//是否生成三维切片缓存
            layer3ddataset2.IsBuildOSGBCache = true;
 

            layer3ddataset0.IsBuildOSGBPipeCache = false;//自定义专题图不要用点外挂生成
            layer3ddataset2.IsBuildOSGBPipeCache = false;

            layer3ddataset0.FileType = CacheFileType.S3M;//文件类型
            layer3ddataset2.FileType = CacheFileType.S3M;

            layer3ddataset0.TileWidth = 152.87;//瓦片边长
            layer3ddataset2.TileWidth = 152.87;

            layer3ddataset0.FilterPixelSize = 2;//像素过滤值
            layer3ddataset2.FilterPixelSize = 2;

            string[] names=new string[2]{layer3ddataset0.Name,layer3ddataset2.Name};//过滤要生成的图层,这里只生成自定义专题图


            SceneCacheBuilder builder = new SceneCacheBuilder();
            builder.CompressedTextureType = CompressedTextureType.DDS;//纹理压缩类型
            builder.IsCalNormal = false;//不计算法线
            builder.OutputFolder = @"C:\Users\hulinPC\Desktop\huancuntest\huancun";//缓存路径
            builder.OutputLayerNames = names;//缓存图层名数组
            builder.OutputSceneName = scene.Name;//场景名
            builder.Scene = scene;//场景
            builder.ProcessThreadsCount = 8;//线程数
            builder.Build();

好的,谢谢,我试一下。

注意点如下:

1.不要用点外挂生成

2.生成缓存图层可以过滤,效果如下:

好的,有两个问题。

1 这个像素过滤值是什么意思? 有什么用?

2.给自定义专题图切缓存时,对应的数据集图层也需要放在场景中吗?
像素过滤值是小于该值模型不显示,优化性能,可以不设置,只是桌面切缓存有这个设置,我就顺便写出来。数据集图层不需要放场景中,我这里只是体现只对指定图层切缓存的功能,解决你上面说的把所有图层都切出来了的问题。

好的,问题已解决了。

有空帮我再看看之前提的一个问题,到现在也没有回复.链接如下。

二维编辑问题

...