首页 / 浏览问题 / 三维GIS / 问题详情
使用entities添加模型,如何避免id的唯一性
72EXP 2022年08月17日

使用entities加载模型从数据库中读取加载会加载无数个,相同的模型会加载多次,每个模型的id会读取数据库中的模型id进行赋值,数据库中的id不能进行更改

现在问题是一个模型会加载多次,相同的id也会赋值一样的赋值多次,那么如何避免id唯一性呢,如果同一个模型id已经添加一次在添加一次就会报错,现在要实现的功能要在视图上点击模型根据id查询相对于的属性参数

代码:

 var yellviewer=viewer.entities.add({
            id: feature.wireguid,
            polyline: {
              positions: Cesium.Cartesian3.fromDegreesArrayHeights(point3D),
              width: 1,
              material: Cesium.Color.WHITE,
   },
});

报错:

报错语句:

RuntimeError: An entity with id 097e772e-b69d-4e91-bf27-d946f4a09add already exists in this collection.

有什么办法可以避免id唯一性的吗???或者有没有另一种方法可以添加id???

1个回答

不太明白您的意思

entity在添加时,id是唯一的,什么重复加载,加载多次不应该会出现。

其次您要实现的是点击查询功能,查询数据库的数据。

可以通过scene,pick来获取对应的坐标点从而获取到它的选择图层,再从选择图层中获取选择集

获取到选中的图层了,再在返回的图层中s3mtileslayer.getSelection()就拿到选择集了,选择集返回的就是ID

最后通过ID做属性查询即可,SQL查询也行

http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#getFeatureBySQL

最好的是通过数据库去发布一个数据服务

4,151EXP 2022年08月17日
现在不能发布服务,我直接读取的是桌面数据库db文件,这个电线他就是根据数据库来进行加载的,同一条数据会加载8次
您好,我的建议还是不要使用entity的方式。

如果非要使用,我认为您应该从您add的这个id入手。

您如果能保证feature.wireguid的唯一性,那么它就是唯一的。
现在就是没有办法保证唯一性,如何添加多次feature.wireguid
逻辑上来说,您如果是循环加载的话,您从数据库读取的所有id,添加到一个集合中,根据这个集合进行遍历完成entity的add即可。
什么意思我现在是效果已经出来了呀,一共几千条数据每个id都要加载八遍,因为有十几条线有有的线是一样的所以每个id才会添加多次
您私我个联系方式吧,QQ或者微信,我加您
qq:834275315

已解决。

楼主的真实需求不是键值对键值的关联性的属性查询存储

而是需要获取到重复的name字段

id: feature.wireguid,

改成

name: feature.wireguid,

即可

...