cesium中点击不同类型的entity,弹出不同弹框效果

1.封装场景点击的函数;

// 封装场景点击监听函数
//result为回调函数,将你所需要的信息传递出去,以便后续使用
    initSceneEvent(viewer, eventType, result) {
        this.handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas)
        this.handler.setInputAction(e => {
            if (e.position) {
                let position = viewer.scene.pickPosition(e.position);
                result(viewer.scene.pick(e.position), e, position);
            } else if (e.endPosition) {
                let position = viewer.scene.pickPosition(e.endPosition);
                result(viewer.scene.pick(e.endPosition), e, position);
            }
        }, Cesium.ScreenSpaceEventType[eventType])
    },

2.页面初始化时监听点击事件

//viewer为cesium创建的viewer对象
initSceneEvent(viewer,"LEFT_CLICK", (res, e, cartesian3) => {
    //每次点击弹框显示之前先移除之前的弹窗
      removeAllPopup();
      entity=viewer.selectedEntity;
      html=`<div class="popup-content tableTitle">
              <div  class="header" style="padding-top: 0px;">title</div>
              <div  class="content" style="padding-top: 0px;">other:${aaa} 
             </div>
            </div>
        `
      };
 show({
    position:cartesian3,
          html:html,
          onclose:false,
})
}

3.封装show函数

show(obj) {
        const config = {
            cartesian3: obj.position,
            width: obj.width || 350,
            offsets: obj.offsets || [175, 130],
            html: obj.html || "暂无数据",
            class: obj.class || "myPopup",
            onclose: obj.onclose,
            funcs: obj.func ? obj.func : null,
        };
//笛卡尔坐标转屏幕坐标
        let windowCoord = Cesium.SceneTransforms.wgs84ToWindowCoordinates(this.scene, config.cartesian3)
        let position = {
            x: windowCoord.x,
            y: windowCoord.y
        }
        let popup = $(
            `<div style="width: ${config.width * window.screen.width / 1920}px;height: ${config.height * window.screen.height / 1080}px;" class='${config.class}'>
            <i class="el-icon-close popupClose"></i>
            ${config.html}</div>'`
        );
        this.container.append(popup);
        popup.css({
            left: (position.x - config.offsets[0]) + "px",
            top: (position.y - config.offsets[1]) + "px"
        });
        this.popups.push({
            popup,
            config
        })
        // 绑定关闭事件
        $(".popupClose").click(function () {
            $(this)
                .parent()
                .remove();
            if (config.onclose) {
                config.onclose();
            }
        });
        if (config.funcs && config.funcs.length) {
            this.setFuncs(config.funcs)
        }
        // 显示父容器
        this.container.show();
    },

Cesium 是一个用于构建地理信息系统的开源 JavaScript 库。它提供了一种强大的平台,使开发者可以在浏览器创建令人印象深刻的三维地球和地理数据可视化效果。 在 Cesium ,通过编程方式将信息与点位关联是一种常见的需求。要实现点击点位时显示弹框,可以按照以下步骤操作: 首先,需要创建一个点位并将其添加到 Cesium 场景。点位可以是一个实体(entity)对象,其包含了点的位置、样式和其他属性。可以使用 Cesium.Entity 类来定义点位的属性。 接下来,设置点击事件监听器。Cesium 提供了 mouseDown 和 touchStart 等事件来检测用户点击或触摸屏幕的动作。可以通过在地球上注册这些事件的监听器来实现。 在点击事件监听器,可以获取点击或触摸事件的坐标。然后,通过调用 Cesium.Scene.pick 方法,可以获取被点击的点位实体对象。通过判断返回的实体对象是否存在,可以确定用户是否点击了一个点位。 如果返回的实体对象存在,就可以获取该点位的属性,比如位置、名称、描述等。根据需要,可以将这些属性显示在弹框弹框可以是一个自定义的 HTML 元素,也可以使用 Cesium 提供的弹框组件。 最后,将弹框添加到页面,以便在用户点击点位时显示。可以使用 DOM 操作方法将弹框元素插入到页面的适当位置。 通过以上步骤,就可以实现点击点位显示弹框的功能。当用户点击或触摸一个点位时,弹框会出现并显示与点位相关的信息。 总结:在 Cesium ,通过创建点位实体、注册点击事件监听器、判断点击的点位并获取其属性,最后将属性信息显示在弹框,就可以实现点击点位显示弹框效果。这种功能可以增强用户交互性和信息展示性,为地理信息系统的使用者提供更好的体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值