首页 / 浏览问题 / 三维GIS / 问题详情
三维webgl初始化setView定位不准确
106EXP 2021年05月27日

1.问题描述:使用10.1.2版本三维webgl开发包,场景初始化Cesium.when(promise, function (layers) {}中设置setView相机参数,场景定位不准确,存在较大偏移。如果将setView方法拿出来单独执行时,定位准确。想请教一下原因及解决办法?谢谢!

2.如下图所示:

1个回答

您好,请问您的setView的位置和iserver预览中位置一致吗,如果不一致的话,可能是因为在场景还没加载完的时候执行了setView方法,然后场景加载完又拉回到了场景定位点。
1,545EXP 2021年05月27日
我这边的iserver预览的位置一直都不准确,所以我都是直接通过代码加载场景来查看的。之前使用9d版本的开发包时,初始化场景如果不设置setView参数,场景是不能正确定位到桌面端场景最后保存的位置的,所以一直通过setView来设置场景的位置信息。现在换成10i版本的开发包了,在不设置setView参数时,是可以定位到桌面端场景最后保存的位置的,但我不能每次想改变初始化位置时都再去桌面端上修改一次,所以还想使用setView参数,在场景初始化时动态设置位置信息,就出现了上面提到的问题,当代码写在Cesium.when(promise, function (layers) {}中时,定位不准确。您上面提到的“可能是因为在场景还没加载完的时候执行了setView方法”问题,但场景加载完后也没有自动拉回到定位点,不考虑手动操作的可能,这个问题有解决的方法吗?
给setView方法设置一个延迟呢,例如

          setTimeout(function() {
                         scene.camera.setView({
                    destination : new Cesium.Cartesian3(0,4379023.266141494,4092583.575045952),
                    orientation : {
                        heading : 4.0392222751147955,
                        pitch :0.010279641987852584,
                        roll : 1.240962888005015e-11
                    }
                });
          }, 3000)
这是一个方法,我之前也有考虑过。就怕时间把握不好,设置的时间如果短了,场景没加载完,先执行了setView,就还是会定位不准确。如果时间设置长了,场景加载完了,可能就会有一个二次定位的感觉,内网开发还好,不知道如果实际换到外网环境中还是否好用。因为之前没遇到过这种情况,所以我一直认为写在Cesium.when(promise, function (layers) {}里面的代码就是在场景加载完成后才会执行的代码,现在看来好像不是。如果没有更好的方法,那就先按照这样设置一个延迟效果再看实际情况了。感谢您的回复。
...