您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页cesium键盘控制漫游

cesium键盘控制漫游

来源:化拓教育网
 <script>
    const viewer = new Cesium.Viewer("cesiumContainer", {
            shouldAnimate: true,
        });
        function keyboardMapRoamingInit(_viewer) {
            // 添加键盘监听事件
            document.addEventListener('keydown', keyDown, false);
            document.addEventListener('keyup', keyUp, false);
            // 为每一帧添加监听事件
            _viewer.clock.onTick.addEventListener(function () {
                keyboardMapRoamingRender(_viewer);
            });
        }
        // 定义事件组
        let flags = {
            // 相机位置
            moveForward: false,
            moveBackward: false,
            moveLeft: false,
            moveRight: false,
            moveUp: false,
            moveDown: false,
            // 相机姿态
            lookUp: false,
            lookDown: false,
            lookLeft: false,
            lookRight: false,
            twistLeft: false,
            twistRight: false,
            // 缩放
            zoomIn: false,
            zoomOut: false
        }
        // 相机位置:W:向前;S:向后;D:向右;A:向左;Q:升高;E:降低;
        // 相机姿态:↑:抬头;↓:低头;←:左转;→:右转;0:顺时针;.:逆时针
        // 缩放:+:放大,-:缩小;
        function getFlagFromKeyboard(key) {
            switch (key) {
                // 按字符的Unicode编码
                // 相机位置
                case 87:
                    return 'moveForward';
                case 83:
                    return 'moveBackward';
                case 68:
                    return 'moveRight';
                case 65:
                    return 'moveLeft';
                case 81:
                    return 'moveUp';
                case 69:
                    return 'moveDown';
                // 相机姿态 
                case 38:
                    return 'lookUp';
                case 40:
                    return 'lookDown';
                case 37:
                    return 'lookLeft';
                case 39:
                    return 'lookRight';
                case 96:
                    return 'twistLeft';
                case 110:
                    return 'twistRight';
                // 缩放
                case 107:
                    return 'zoomIn';
                case 109:
                    return 'zoomOut';
                default:
                    return undefined;
            }
        }
        //键盘按下
        function keyDown(event) {
            console.log(event)
            let flagName = getFlagFromKeyboard(event.keyCode);
            if (typeof flagName !== 'undefined') {
                flags[flagName] = true;
            }
        }

        //键盘弹起
        function keyUp(event) {
            let flagName = getFlagFromKeyboard(event.keyCode);
            if (typeof flagName !== 'undefined') {
                flags[flagName] = false;
            }
        }
        // 根据事件调整相机
        function keyboardMapRoamingRender(_viewer) {
            let camera = _viewer.camera;
            let ellipsoid = _viewer.scene.globe.ellipsoid;
            let cameraHeight = ellipsoid.cartesianToCartographic(camera.position).height;

            // 根据相机高度设置移动距离,比默认距离移动效果更好
            let moveRate = cameraHeight / 220.0;

            if (flags.moveForward) {
                camera.moveForward(moveRate);
            }
            if (flags.moveBackward) {
                camera.moveBackward(moveRate);
            }
            if (flags.moveLeft) {
                camera.moveLeft(moveRate);
            }
            if (flags.moveRight) {
                camera.moveRight(moveRate);
            }
            if (flags.moveUp) {
                camera.moveUp(moveRate);
            }
            if (flags.moveDown) {
                camera.moveDown(moveRate);
            }
            if (flags.lookUp) {
                camera.lookUp();
            }
            if (flags.lookDown) {
                camera.lookDown();
            }
            if (flags.lookLeft) {
                camera.lookLeft();
            }
            if (flags.lookRight) {
                camera.lookRight();
            }
            if (flags.twistLeft) {
                camera.twistLeft();
            }
            if (flags.twistRight) {
                camera.twistRight();
            }
            // 根据相机高度设置缩放参数
            if (flags.zoomIn) {
                camera.zoomIn(cameraHeight / 22);
            }
            if (flags.zoomOut) {
                camera.zoomOut(cameraHeight / 2);
            }
        }
        // 键盘控制漫游
        keyboardMapRoamingInit(viewer);

    </script>

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务