首页 / 浏览问题 / 三维GIS / 问题详情
通过矢量数据的数据集,是否可以关联上图层中的图元?
1EXP 2022年10月31日

使用产品:iserver 10.2.1 操作系统:win10 x64 问题描述: 当我们点击模型时,可以通过下面的代码来获取图元的id,进而使图元偏移。

handler.setInputAction(function(e) {
// 获取选中的S3M图层
let selectlayer=viewer.scene.layers.getSelectedLayer();
// 获取选中图元的id
let selectids=selectlayer.getSelection()[0];
let scalar = Cesium.Cartesian3.multiplyByScalar( scene.pickNormal(e.position),14,new Cesium.Cartesian3() );
selectlayer.setObjsTranslate(selectids, scalar)
}, Cesium.ScreenSpaceEventType.LEFT_CLICK) 

如果我是通过搜索框,进行SQL查询矢量服务,获取feature,请问如何进行图元的偏移呢?

我的办法是用scene.pick(矢量数据的中心点)去获取图元,但效果不稳定。。。。

好像我就只知道(1.获取被选中图元;2.pick(屏幕坐标))  这2种获取图元的方式,不知道有没有可以通过矢量数据来获取图元的方式

1个回答

您好,

正常情况下进行点选是最好的。

您要说除了您所说的两种,无非就是直接获取图层所有图元的id,然后根据坐标进行选择。

其他的应该是没有的了。
4,151EXP 2022年10月31日
好的,谢谢

请问如何获取图元的集合

我查询API,看到scene有个primitives的属性,

primitives : PrimitiveCollection

获取所有图元集合。

但是打印出来并没有看到图元的集合

{
 destroyPrimitives: true,
 show: true,
 _guid: "ca9fc6b8-bec7-4263-b3d1-1f6a284f7a2b",
 _primitives: [Df],
 _zIndex: undefined,
 length: 1
}

这个需要用的SQL查询关联数据集的,比如layer的接口中应该会有datasetInfo方法,获取数据集的名称,通过名称获取SQL中的对象id,再通过id,坐标,去获取对应的对象。

建议还是使用现成的select相关接口,去获取id
...