Cesium双屏联动,二三维联动

下面代码中实现的是左边三维,右边二维联动效果。如果需要两边三维的可以看着修改下就行了,也很简单

<body>
    <div class="viewer">
        <div id="left-viewer"></div>
        <div id="right-viewer"></div>
    </div>

    <script>
        const leftViewer = new Cesium.Viewer('left-viewer', {
            terrainProvider: Cesium.createWorldTerrain(),
            sceneModePicker: false,
            infoBox: false,
            shouldAnimate: true,
            timeline: false,
            animation: false,
        })

        const rightViewer = new Cesium.Viewer('right-viewer', {
            sceneMode: Cesium.SceneMode.SCENE2D, 
            terrainProvider: Cesium.createWorldTerrain(),
            sceneModePicker: false,
            infoBox: false,
            shouldAnimate: true,
            timeline: false,
            animation: false,
        })

        const MOUSE_TYPE = {
            LEFT: 0,
            RIGHT: 1
        }

        window.mouseType = MOUSE_TYPE.LEFT

        const leftHandler = new Cesium.ScreenSpaceEventHandler(leftViewer.canvas)
        leftHandler.setInputAction(() => {
            window.mouseType = MOUSE_TYPE.LEFT
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)

        leftViewer.scene.postRender.addEventListener(() => {
            if (window.mouseType === MOUSE_TYPE.RIGHT) return 

            const destination = Cesium.Cartographic.toCartesian(leftViewer.camera.positionCartographic)

            rightViewer.camera.setView({
                destination: new Cesium.Cartesian3(destination.x, destination.y, destination.z),
            })

        })

        const rightHandler = new Cesium.ScreenSpaceEventHandler(rightViewer.canvas)
        rightHandler.setInputAction(() => {
            window.mouseType = MOUSE_TYPE.RIGHT
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)

        rightViewer.scene.postRender.addEventListener(() => {
            if (window.mouseType === MOUSE_TYPE.LEFT) return 

            const destination = Cesium.Cartographic.toCartesian(rightViewer.camera.positionCartographic)

            leftViewer.camera.setView({
                destination: new Cesium.Cartesian3(destination.x, destination.y, destination.z),
                orientation: {
                    heading: leftViewer.camera.heading,
                    pitch: leftViewer.camera.pitch,
                    roll: leftViewer.camera.roll
                }
            })

        })

    </script>
</body>

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值