首页 / 浏览问题 / 桌面GIS / 问题详情
多个udb数据源合成后批量生成缓存生成的scp文件无法快速定位,单个图层可以定位
24EXP 2019年10月12日

多个udb数据源通过追加行的方式合成一个之后,载入到web端之后点击模型中的某个图层并没有触发查看属性的那个函数(viwer.pickEvent.addEventListener这个监听函数没有触发),随后发现打印出scene.layers数组后只有合并时在两个数据源中分别建立的那两个数据集(批量生成缓存也只选择的他们两个,没有加入其它图层)

1个回答

您好,批量缓存之后会生成一个SCP文件,您将这个数据发布三维服务之后,只会有一个图层,您通过s3mtileslayer.datasetInfo() 能够获取到获取图层数据集名称以及对应的Id范围(适用于多数据集生成缓存)。
4,186EXP 2019年10月12日
问题在于批量生成的scp在场景里定位不到,单拎出来进行定位可以(在web端模型中既要点击Tree中某一层楼控制楼层的显隐,又要点击模型中的构件显示出构件的属性,只将每层新建的New-model(里面有追加的行)批量生成缓存的话,查看不了单个构件的属性,只能控制某一层的显隐,将他们一起生成缓存的话scp定位又会失败)

您好,生成批量缓存之后的模型,点击模型是能够查询属性的,您参考一下:http://support.supermap.com.cn:8090/webgl/examples/editor.html#S3MTiles_BIM

这个范例是批量缓存生成的模型进行属性查询的过程。

您说的批量生成缓存定位不了,我这边远程给你看一下是否是 您进行批量缓存时有什么问题
私您向日葵了

不太明白这段话的意思


 

您好,我这边说的特征值指的不是SMID,而是您自己设置值,就是您设置一个值专门用于标识每一种构件,比如您将1作为门的标识,在批量缓存时设置之后,在前端能够通过代码设置显影。

而在图层列表的名称这一块,建议您就是通过服务获取名称显示

我试了一下,我先选了一个构件,给它添加了一个特征值字段。

但是我在批量生成缓存的时候发现特征值的下拉列表里没有我设置的特征值的这个字段,然后我以为是因为追加行的时候把其它未设置这个字段的构件也加进来的原因,于是我重新操作了一次,只把设置这个字段的构件给追加行,但是批量生成缓存的时候还是没有这个字段

因为您的字段类型为文本型的,您将字段类型修改一下,您看一下能够显示的字段的字段类型是什么,您修改一下

是,那里是字段类型的问题,但是我发布之后还是没有子图层

特征值的设置主要时为了在前端中控制显示和隐藏的,而构件图层列表名称的话您通过数据服务来获取到。您的这种三层图层列表的显示,通过我们批量缓存数据的只能够得到2层的名称,最后一层的名称需要通过其他方法来得到,就是说您在桌面种构建一个属性表,其中输入每一种构件的名称以及对应的特征值名称,再iserver种发布数据服务,然后再前端页面初始化时调用发布的数据服务,来获取到每一种构件的名称以及对应的特征值,通过setCategoriesVisible来控制图层的显示与隐藏。

因为批量缓存只能够获取到批量缓存的图层名称以及其中的每个单独的子图层的名称。

还有一种就是和您之前的一样,您将每一层的构件做批量缓存,就和您之前的做法一致,但是总图层的名称就没有办法直接得到,也只能通过其他的办法来获取到
我要通过sence.layer获取构件属性(主要是要点击构件时获取属性而不是构件的显示隐藏)还是没法获取(即使加了特征值),因为只有那两个新建的合一的图层

您说的点击构件显示属性是在场景种点击某个构件弹出属性吗?这个是可以实现点击构件显示属性的,如果您方便的话,我下午给您调一下代码

如果是构件列表,您是想通过layer来获取到构件的名称的话,您就通过将单个的构件数据集一起批量生成缓存,通过S3mTileslayer.

datasetInfo()

o()来获取到构件

对,我是说这个,但是我是想每个楼层合一之后,即使tree里不能显示单个的构件名称,还可以点击构件显示出来属性(通过追加行的方式再批量生成缓存的这种方法我在layer里没发现有构件图层,因为我的需求是在tree中显示楼层,不用显示楼层下的构件,但是点击画布中的构件可以显示构件属性)。
私信您向日葵了
已在QQ解决
...