首页 / 浏览问题 / 三维GIS / 问题详情
三维地图转二维地图之后,使用相机获取的参数不同
6EXP 2024年11月20日

三维地图切换到二维地图代码:viewer.scene.mode = SuperMap3D.SceneMode.COLUMBUS_VIEW

二维地图切换到三维地图代码viewer.scene.mode = SuperMap3D.SceneMode.SCENE3D;

坐标值是使用camera获取的,这时候去获取scene.camera.position相机参数,三维地图和二维地图不一样

scene.camera.position的值跟三维的不同;

做了一个实验,点击同一个地方获取视角值,值是不一样的,这个是什么情况

1个回答

您好,这是因为在3D模式和哥伦布模式中,空间参考是不一样的,球面场景以球心空间直角坐标系为参考,哥伦布模式将地球展开后,以地图0,0,0点为参考点计算位置
927EXP 2024年11月20日
那2D的坐标有办法改成和3D一样的吗
无论实在2D模式,2.5D模式还是3D模式,相机和鼠标获取的坐标都是笛卡尔3(xyz)坐标,这里是没有区别的,在3D球面模式我们更倾向于使用经纬度来表达坐标。所以无论在何种模式下,我们在相同位置获取的坐标都是一样的。您问题描述的相机位置不同,是因为切换场景后相机默认定位到全局视角,相机位置发生了改变,您可以在每次切换场景后通过scene.camera.setView()固定相机位置和视角
非常感谢你的回答。你的意思是切换模式之后,再去设置固定的相机位置和视角。

我这边是想做一个,在三维模式下,比如说我把地图移动到了北京市,这时候我切换哥伦布模式,为了还是保持在北京的位置,我只想要改一下heading的值,于是我需要去获取哥伦布模式下的相机参数,这个时候的参数,是和我在三维模式下获取的参数不一致的,

所以我在切换哥伦布模式之后获取参数,并且修改了heading值之后,相机是发生了变化的,

是因为上面我说的两个模式下同一个位置的参数不同。因为每次切换哥伦布模式之后,视角需要和在三维模式下的视角是保持一致的,都是随机的,所以切到哥伦布模式是不能去固定视角的。如果我想实现这个功能,有什么方式可以解决吗
1、我解释一下切换模式的流程,先销毁当前场景,再初始化一个新的场景,这时相机会缩放到全球视角。

2、切换模式的时候,相机视角已经拉到全球视角了,相机位置已经发生了改变,切换模式后再获取当前视角也是全球位置的视角

3、根据您的业务,我举一个例子:在3D模式下定位到数据,获取并记录当前相机position、heading、pitch、roll等参数,切换为2.5D模式后,这时就不应该去获取相机位置了,因为切换后相机视角已经拉高到全球视角,应该根据上面记录的相机参数进行定位即可

4、您提到的两个模式下同一位置参数不同,应该不存在这样的问题。您可以尝试下在地图中找一个目标,在两个模式下分别用鼠标点击目标,获取鼠标的位置,看是不是一样的
...