Установка положения камеры после смены сцен

В приложении Cesium Sandcastle я отредактировал руководство по работе с камерой, включив в него приведенный ниже фрагмент кода:

window.scene = scene;
scene.morphComplete.addEventListener(function (){
    console.log('Morph completed...');
    var west = Cesium.Math.toRadians(10);
    var east = Cesium.Math.toRadians(40);
    var south = Cesium.Math.toRadians(35);
    var north = Cesium.Math.toRadians(45);
    var rectangle = new Cesium.Rectangle(west,south,east,north);    
    window.scene.camera.viewRectangle(rectangle);
    console.log('Camera view rectangle updated...');    
});

Приведенный выше код подключается к событию завершения преобразования, и как только переход сцены завершен, прямоугольник просмотра устанавливается в регион в Европе. По крайней мере, это мое ожидаемое поведение. Наблюдаемое поведение после завершения преобразования, прямоугольник просмотра Cesium находится за границей. Мой вопрос: как я могу установить прямоугольник просмотра карты после перехода сцены?


person Bulent Ozhorasan    schedule 16.10.2014    source источник
comment
Какова цель windows.scene = scene? Вы могли бы просто использовать scene вместо windows.scene в обработчике событий... Но все же у меня та же проблема, он правильно регистрирует сообщения, но положение камеры не меняется, это по умолчанию (для 3D-просмотра) где-то в Карибском море . И тебе того же? Или вы находитесь в положении, отличном от положения по умолчанию и того, которое вы ожидаете?   -  person dgiugg    schedule 16.10.2014
comment
window.scene избыточно, вы правы. Да где-то в Карибском море по моему тоже конец.   -  person Bulent Ozhorasan    schedule 23.10.2014


Ответы (1)


Похоже, это ошибка в нашей обработке камеры, по-видимому, мы установили камеру в последний раз после запуска события morphComplete.

Вы можете обойти это, подождав, пока пройдет один кадр анимации, прежде чем взять на себя управление камерой. Например:

scene.morphComplete.addEventListener(function (){
    Cesium.requestAnimationFrame(function() {   // This is the workaround.
        console.log('Morph completed...');
        var west = Cesium.Math.toRadians(10);
        var east = Cesium.Math.toRadians(40);
        var south = Cesium.Math.toRadians(35);
        var north = Cesium.Math.toRadians(45);
        var rectangle = new Cesium.Rectangle(west,south,east,north);
        window.scene.camera.viewRectangle(rectangle);
        console.log('Camera view rectangle updated...');
    });
});

Я только что зарегистрировал для этого Issue #2203.

person emackey    schedule 17.10.2014