首页 / 浏览问题 / 三维 / 问题详情
如何添加绿色框框selectionIndicator
cuijian  (30分)  初出茅庐
7月20日, 2020
viewer.camera.flyTo({
  destination : Cesium.Cartesian3.fromDegrees(parseFloat(dian.dyProj[0]), parseFloat(dian.dyProj[1]), 15000.0)
});

这一段飞行代码,现在想飞到该点的时候给这个点加一个绿色框框标识聚焦到该点。

因为有的时候点很多,飞过去不知道是飞到了哪个点上,请问这个怎么处理。

1个回答

您好,您可以考虑获取了该点坐标后,在那个位置添加一个实体,比如这个SQL查询的例子就在查到的点上放了很多红色定位广告牌(Billboard),您可以参考一下思路。

                viewer.entities.add({
                    position : Cesium.Cartesian3.fromDegrees(parseFloat(selectedFeatures[i].fieldValues["12"]),parseFloat(selectedFeatures[i].fieldValues["13"]),parseFloat(selectedFeatures[i].fieldValues["16"])),
                    billboard :{
                        image : './images/location4.png',
                        width:30,
                        height:40,
                        
                    },
                    name : selectedFeatures[i].fieldValues["11"],
                    description: des
                });

SQL定位点例子:
http://support.supermap.com.cn:8090/webgl/examples/editor.html#getFeatureBySQL

jjz  (4,720分)  名扬四海
7月20日, 2020
已经有实体了,我是先加的实体然后加的飞行flyTo方法,现在就想在这个实体上加个绿框标识聚焦到了该点
就是因为实体点太多,飞过去不知道飞到了哪个点上才想着给加一个绿框标识一下
请问这个怎么解决
抱歉今日咨询量较大,无法及时回复社区问题。

您的意思是当飞行到一个点后,不通过点击但是却在那个点自动显示selectionIndicator的绿色选择框是吗,还是其他标识也可以?
因为目前我只知道这个绿框的标识感觉还挺好用的,您还有其他实现标识的方式吗也可以推荐一下?如果没有这个绿框就行。

目前我是想着就是飞过去不通过点击直接自动显示selectionIndicator的绿色框框

好的我明白您的需求了。您需要在飞到当前点的时候自动出现一个不一样的标识来标记当前站点是吗,因为这个selectionIndicator是选中目标时出现的ViewModel,想要自动显示可能需要费一番心思,我帮您看看有没有可以替代的方法,找到后给您反馈。

我回复之前您也可以自己尝试一下在飞到当前站点后添加一个entity,外观区别于您现在添加那些实体,换个颜色或者换成您自己添加的billboard标识,换个图片就可以;也可以考虑polygon等等,可以添加的实体有很多,提供API链接给您参考:
http://support.supermap.com.cn:8090/webgl/Build/Documentation/Entity.html?classFilter=entity

好的谢谢,我也试一下

您好,我提供一个思路您看能不能接近需要的效果:您现在已经有要飞到这个点的坐标了,所以可以跟据坐标添加一个不一样的entity,比如换一个billboard图标。现在主要就是如何控制这个图标显隐的问题,您可以输出一下添加的实体,拿billboard举例,可以看到它有show的属性,用true/false控制显隐。通过判断现在飞到或者离开的点来控制billboard的出现与否,相当于当飞到一个点:创建实体;离开这个点:隐藏实体这么一个思路。因为您说您有很多要飞到的点也有很多实体,所以加一个判断应该就可以实现这个功能。可能您已经想到这个方法了,如果效果不理想欢迎继续讨论。
 

// 飞到点的时候
let ENTITY_A = viewer.entities.add({
    position : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 100.0),
    billboard :{
    image : './images/p.png',
    width:30,
    height:40,
                        
    }
});

// 离开点的时候
ENTITY_A.billboard.show = false;

...