首页 / 浏览问题 / 三维GIS / 问题详情
CesiumLab倾斜摄影模型生成b3dm文件用超图发布后加载位置偏差
35EXP 2022年10月25日

使用产品:iserver 10i 操作系统:win11 x64
问题详细描述:使用CesiumLab处理倾斜摄影模型生成b3dm(3dtiles)文件,用超图iserver发布后加载有位置偏差,不进行高度设置的话,定位模型会定位到地下,进行高度设置的话,低于6000高度模型不可见,只有设置高度为6000时,模型才看见而且位置有很大偏移。
问题重现步骤:

1.不设置高度,模型的定位在地下,且不可见,而且定位有很大偏差

 var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: 'http://localhost:8090/iserver/services/3D-ThreeDTilesCache-tileset/rest/realspace/datas/tileset/config', isSuperMapiServer: true }))
            console.log(tileset);
            tileset.readyPromise.then(function () {
                var boundingSphere = tileset.boundingSphere;
                viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius));
                viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);


            }).otherwise(function (error) {
                throw (error);
            });

            viewer.zoomTo(tileset);

2.设置高度的话,模型可见,定位同样有很大偏差 

      var heightOffset = 6000.0;
                    // 计算tileset的绑定范围
                    var boundingSphere = tileset.boundingSphere;

                    //计算中心点位置
                    var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);

                    //计算中心点位置的地表坐标
                    var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);

                    //偏移后的坐标
                    var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);

                    var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());

                    //tileset.modelMatrix转换

                    tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);


                    // viewer.camera.flyTo({
                    //     destination: Cesium.Cartesian3.fromDegrees(105.43018982213219, 30.83879006845878, 177.4158198337222),
                    //     orientation: {
                    //         heading: 6.283185307179586,
                    //         pitch: -0.50001587749796,
                    //         roll: 6.283185307179586
                    //     }
                    // });

补充:之后通过测试,发现转换得到的3dtile在原生Cesium中通过本地调用的方法不会发生位置偏移,初始加载高度也正常,是supermap webgl使用的椭球不同的问题吗?但是我之前的功能都是基于超图实现的,所以想知道有转换的方法吗?

1个回答

您好,

您具体是怎么加载的呢?

CesiumLab 因为不是我们的软件,具体的处理结果的是否符合我们发布的需求不能确定

至于发布的 3dtiles 是怎么发布的呢,具体过程

原数据本身的位置,以及坐标系是否符合要求呢
4,151EXP 2022年10月25日

感谢回复!!!

发布服务是发布的3Dtiles服务:

调用的代码就是问题中附带的代码。

原数据本身是没有问题的,我在CesiumLab中进行预览位置是匹配的上的。

我用的网络客户端是10i的。

坐标系是什么坐标系呢?

或者能否方便提供数据呢?

如果方便,您网盘地址私信我即可。

您好,坐标系信息如上。

其实之所以想要以模型的形式导入,就是需要一个点击显示属性的效果,现在换了一种方式,通过示例代码中的动态单体化实现了,但是这个模型的加入还是有些问题。

如果是其他新的问题的话,建议您这边新发起一个新的问题。

如果是前端WebGL相关,选择三维GIS。如果是桌面问题,选择桌面GIS。

问题描述具体一些,如果有关键代码或者操作流程,能截图最好。
...