首页 / 浏览问题 / 三维GIS / 问题详情
加载geojson,鼠标事件错乱
12EXP 2018年05月24日

加载GeoJson面数据后,设置MOUSE_MOVE、LEFT_CLICK等事件(展示面实体的属性信息)

----------------------------------------------------------------------------------

var promiseB = Cesium.GeoJsonDataSource.load(url, {
        clampToGround : true
    });

若是贴地模式加载,则 当鼠标不在面实体上时,仍然触发事件

----------------------------------------------------------------------------------

var promiseB = Cesium.GeoJsonDataSource.load(url, {
        clampToGround : false
    });

而非贴地模式就鼠标移动事件就能正常

----------------------------------------------------------------------------------

请问 怎么在 贴地模式下,使鼠标事件正常触发,

1个回答

您好,看您描述完全用的是原生接口,如果真如您描述所说,我们也没什么办法,如果您没用到我们产品的话(主要是iserver),建议可以用最新版原生cesium(我们webgl一般都会比最新的低上几个版本),看问题能否解决。或者您说说您是怎么根据返回点的位置去关联到它应该对应哪个实体的,我可以帮着您一起验证一下,看看有无解决办法,或者说用法是否合理。另外建议使用原生接口比较多的话,也可以多去其它论坛问问,特别是国外的某些论坛,也许更容易找到解决方案。
5,985EXP 2018年05月25日
iDesktop 加载json数据(面)后生成三维场景缓存,再用iServer发布,最后在webgl中使用。

如果在desktop里面,设置 面图层->风格设置->高度模式 选择'贴地'的话,在webgl中是显示不出来的(打客服电话确认过),而设置成'绝对高度'或者'相对地面'的话,在webgl中则能够显示,但是受到地面曲率的影响,会出现花斑,客服建议在3Dwebgl中直接加载json或者转成kml加载。

触发的方法:

var handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)
handler.setInputAction(function(movement) {

        var feature = viewer.scene.pick(movement.startPosition);
        if (!Cesium.defined(feature)) {
            return;
        }
        var entity = feature.id;
         //  实体操作。。。。。
        //entity.properties[keyName]._value   // 获取属性

},Cesium.ScreenSpaceEventType.MOUSE_MOVE);
行,我先测试一下

您好,刚刚试了一下,没有您说的这种现象,我这边结果是使用movement.startPosition将触发两次事件,使用movement.endPosition就只触发一次事件了,所以您可以改成movement.endPosition试试呢。下面附上我的测试代码:

 function onload(Cesium) {
        var viewer = new Cesium.Viewer('cesiumContainer',{
            //使用本地的一张图片初始化地球,建议图片长宽比2:1
            imageryProvider:new Cesium.SingleTileImageryProvider({
                url : './images/worldimage.jpg'
            })
        });

    viewer.dataSources.add(Cesium.GeoJsonDataSource.load('./SampleData/kml/New_Region.json', {
		clampToGround : true
			}));
     
       viewer.scene.camera.setView({
            //将经度、纬度、高度的坐标转换为笛卡尔坐标
            destination : new Cesium.Cartesian3.fromDegrees(98.2417177602722,37.1820292237238,100),
            orientation : {
                heading : 4.7793869967010565,
                pitch : -0.5899023527373464,
                roll : 8.539835505416704e-12
            }
        });


        $('#loadingbar').remove();
        var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
handler.setInputAction(function(movement) {

        var feature = viewer.scene.pick(movement.endPosition);
        if (!Cesium.defined(feature)) {
            return;
        }
        alert("文本")

},Cesium.ScreenSpaceEventType.MOUSE_MOVE);
    }

我封装了个js,然后添加两个图层,一个隐藏,一个显示,然后就出现鼠标错乱的问题,麻烦您了,谢谢

链接:https://pan.baidu.com/s/1JsGukecBJoNG_EDy_lGQEw 密码:svg0
刚刚看了,如果不加beijing.json就没有此问题,并且尽管设置了该图层不可见(确实看不到了),但是输出beijing.json的primitive._show还是为true(原生包也是如此),我们这边报缺陷处理。
...