Cesium切换视图模式时保持视图范围不变Keep view boundingbox when change scenemode in cesium.

40 篇文章 0 订阅

Keep view boundingbox when change scenemode in cesium.在cesium中通过按钮切换视图的时候,保证视图范围不变。

Only keep when 2D to 3D or 3D to 2D.

var KeepView = Class.extend({
    init: function (viewer) {
        this._viewer = gviewer;
        this._2dPC = {time:Date.parse(new Date())};
        this._3dPC = {time:Date.parse(new Date())};
        this._t = undefined;

        let _nodes = this._viewer.sceneModePicker._wrapper.children;
        let _btn2D,_btn3D;
        if(_nodes[1].attributes["data-bind"].value.indexOf("SCENE2D") > -1){
            _btn2D = _nodes[1];
            _btn3D = _nodes[2];
        }
        else{
            _btn2D = _nodes[2];
            _btn3D = _nodes[1];
        }
        (function(obj,btnArr){
            for (let index = 0; index < btnArr.length; index++) {
                let _btn = btnArr[index];
                _btn.onmouseenter=function(){
                    obj.update();
                };
                _btn.onclick=function(){
                    obj.keep();
                };
            }
        })(this,[_btn2D,_btn3D]);
    },
    update:function(){
        let _pc = this._viewer.camera.positionCartographic.clone();
        let _curSceneMode = this._viewer.scene.mode;
        if(_curSceneMode == Cesium.SceneMode.SCENE2D ){
            this._2dPC = {
                pc:_pc,
                time:Date.parse(new Date())
            }
        }else if(_curSceneMode == Cesium.SceneMode.SCENE3D ){
            this._3dPC = {
                pc:_pc,
                time:Date.parse(new Date())
            }
        }
    },
    keep:function(){
        let _correctPC = this._3dPC;
        let _waitMode = undefined;
        if(this._2dPC.time > this._3dPC.time){
            _waitMode = Cesium.SceneMode.SCENE3D;
            _correctPC = this._2dPC.pc;
            this._3dPC = this._2dPC;
        }else if(this._2dPC.time < this._3dPC.time){
            _waitMode = Cesium.SceneMode.SCENE2D;
            _correctPC = this._3dPC.pc;
            this._2dPC = this._3dPC;
        }
        else{
            return;
        }
        this._waitMode = _waitMode;
        (function(obj,correctPC){
            if(obj._t != undefined) clearInterval(obj._t)
            obj._t = setInterval(function(){
                if(_waitMode === obj._viewer.scene.mode){
                    var c3 = new Cesium.Cartesian3.fromRadians(correctPC.longitude,correctPC.latitude,correctPC.height);
                    obj._viewer.camera.setView({destination: c3});
                    clearInterval(obj._t);
                }
            }, 100);})(this,_correctPC);
    }
});

调用,how to use:

var viewer = new Cesium.Viewer('cesiumContainer');
var _keepView = new KeepView(viewer);

一点说明note:

Class详见https://johnresig.com/blog/simple-javascript-inheritance/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丷丩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值