Cesium对实体元素鼠标点击popup div信息框

一、简介

设置div信息框模板,给实体元素绑定事件,同步空间位置,然后在回调函数弹出信息框。

二、示例源码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>鼠标单击Popup信息框</title>
    <script src="./js/config.js"></script>
    <script src="./scripts/vue.min.js"></script>
    <link rel="stylesheet" href="./css/common.css">
    <script type="text/javascript" src="../anov-gis-sdk/index.js"></script>
    <link rel="stylesheet" href="../anov-gis-sdk/index.css">
    <link rel="stylesheet" href="./css/htmllayer.css">
</head>

<body>
    <div id="global">

    </div>
    <script>
        new Vue({
            el: '#global',
            template: `<div id="cesiumContainer"></div>`,
            mounted() {
                this.init3D();
            },
            methods: {
                init3D() {
                    window.viewer = new ANOVGIS.Viewer("cesiumContainer");
                    viewer.scene.debugShowFramesPerSecond=true; 
                    viewer.imageryLayers.addImageryProvider(
                        ANOVGIS.ImageryLayerFactory.createImageryLayer(ANOVGIS.ImageryType.TDT, {
                            style: "img",
                            key: globalConfig.tdtKey
                        }));
                    let layer = new ANOVGIS.VectorLayer({id:'layer'});
                    viewer.addLayer(layer);
                    
                    let positions = globalConfig.generatePosition(4);
                    this.addData(layer, positions);
                    viewer.flyTo(layer);
                },
                addData(l, positions) {
                    this.addOne(l, positions[0]);
                    this.addTwo(l, positions[1]);
                    this.addThree(l, positions[2]);
                    // this.addFour(l, positions[3]);
                },
                addOne(layer, position) {
                    let option = {
                        color: ANOVGIS.Color.WHITE,
                        pixelSize: 12,
                        outlineColor: ANOVGIS.Color.BLUE,
                        outlineWidth: 2,
                        label: {
                            text: '文字标签',
                            font: '25px sans-serif',
                            color: "#ffff00",
                            clampToGround: true,
                            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                            pixelOffset: new Cesium.Cartesian2(0.0, -12)
                        }
                    }
                    let v = new ANOVGIS.Point(position, option);
                    v.bindPopup({
                        viewer: viewer,
                        useDefaultHtmlTemplate: true,//是否用默认模板
                    });
                    v.addEventListener(ANOVGIS.MouseEventType.CLICK, (e) => {
                        v.popup.show(e.position, '文本字符串');
                        console.log(e);
                    })
                    layer.addGraphic(v);
                },
                addTwo(layer, position) {
                    let pointOption = {
                        color: ANOVGIS.Color.WHITE,
                        pixelSize: 12,
                        outlineColor: ANOVGIS.Color.BLUE,
                        outlineWidth: 2,
                        label: {
                            text: '文字标签',
                            font: '25px sans-serif',
                            color: "#ffff00",
                            clampToGround: true,
                            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                            pixelOffset: new Cesium.Cartesian2(0.0, -12)
                        },
                        infoData: {
                            title: '带标题的默认模板',
                            fieldsMap: [{
                                nameC: '编号',
                                value: 123
                            },
                            {
                                nameC: '姓名',
                                value: '单位名称'
                            },
                            {
                                nameC: '备注',
                                value: '2023年'
                            }]
                        }
                    }
                    let v = new ANOVGIS.Point(position, pointOption);
                    v.bindPopup({
                        viewer: viewer,
                        showTitle: true,
                        useDefaultHtmlTemplate: true,//是否用默认模板
                    });
                    v.addEventListener(ANOVGIS.MouseEventType.CLICK, (e) => {
                        v.popup.show(e.position, e.graphic.infoData);
                        console.log(e);
                    })
                    layer.addGraphic(v);
                },
                addThree(l, position) {
                    let option = {
                        color: ANOVGIS.Color.WHITE,
                        pixelSize: 12,
                        outlineColor: ANOVGIS.Color.BLUE,
                        outlineWidth: 2,
                        label: {
                            text: '点及Popup',
                            font: '25px sans-serif',
                            color: "#ffff00",
                            clampToGround: true,
                            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                            pixelOffset: new Cesium.Cartesian2(0.0, -12)
                        }
                    }
                    let v = new ANOVGIS.Point(position, option);
                    v.bindPopup({
                        viewer: viewer,
                        horizontalOrigin: 'CENTER',
                        verticalOrigin: 'TOP',
                        offsetX: 0,
                        offsetY: -60,
                        pointerEvents: true,
                        scaleByDistance: {
                            near: 0,
                            nearValue: 1.0,
                            far: 150000,
                            farValue: 0.0
                        },
                        useDefaultHtmlTemplate: false,//是否用默认模板
                    });
                    v.addEventListener(ANOVGIS.MouseEventType.CLICK, (e) => {
                        let str = `<div class="anovBlueGradientPnl">
                                        <div>ssss</div>
                                    </div>`;
                        v.popup.show(e.position, str);
                        console.log(e);
                    })
                    l.addGraphic(v);
                },
                addFour(l, position) {
                    
                },

            }
        });
    </script>
</body>

</html>

要在 Cesium 中为 Entity 添加一个弹出信息Popup),你可以使用 Cesium 的 InfoBox 组件或者自定义的 HTML 元素来实现。 使用 Cesium 的 InfoBox 组件: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); var position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); var entity = viewer.entities.add({ position: position, label: { text: 'Click me!' } }); viewer.selectedEntity = entity; viewer.screenSpaceEventHandler.setInputAction(function(click) { var pickedObject = viewer.scene.pick(click.position); if (Cesium.defined(pickedObject) && pickedObject.id === entity) { var infoBox = viewer.infoBox; infoBox.viewModel.isCollapsed = false; // 展开 InfoBox infoBox.viewModel.titleText = 'Popup Title'; // 设置标题 infoBox.viewModel.descriptionText = 'Popup Content'; // 设置内容 } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); ``` 在上面的代码中,我们首先创建了一个 Cesium.Viewer 对象,并指定了 HTML 中的容器元素 `cesiumContainer`。然后,通过 `Cesium.Cartesian3.fromDegrees()` 方法创建了一个位置坐标 `position`。 接下来,使用 `viewer.entities.add()` 方法创建了一个实体,并为该实体设置了一个标签(Label),以显示一个标签文本。 然后,通过将 `viewer.selectedEntity` 设置为该实体,来使该实体能够被选中。 接着,使用 `viewer.screenSpaceEventHandler.setInputAction()` 方法监听鼠标左键点击事件,并在点击实体时显示 InfoBox。通过设置 `viewer.infoBox` 的相关属性来设置 InfoBox 的标题和内容。 使用自定义 HTML 元素: 如果你想自定义弹出信息的样式和显示内容,你可以在点击实体时创建一个自定义的 HTML 元素,然后添加到页面中,或者使用第三方库来实现弹出的功能,例如 Bootstrap 的 Modal。 希望以上信息能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹果园dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值