首页 / 浏览问题 / WebGIS / 问题详情
cesium能否将加载的s3m图层贴地
8EXP 2023年05月11日

我现在发布了三维空间的数据,加载到地图上是悬空的,跟高程数据不贴合,能否将加载的三维矢量瓦片服务贴和道地表上?加载三维矢量瓦片服务代码:

        url = import.meta.env.VITE_ISERVER_URL + "3D-G235/rest/realspace";
        var promise = scene.open(url, "LM@0G235", {
            autoSetView: true
        });
        Cesium.when.all(promise, async (layers) => {
            layers.map(item => {
                item.indexedDBSetting.isAttributesSave = true;
            })
            if (!scene.pickPositionSupported) {
                alert('不支持深度纹理,无法拾取位置!');
            }
        },
            function (e) {
                if (widget._showRenderLoopErrors) {
                    var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
                    widget.showErrorPanel(title, undefined, e);
                }
            });

加载后效果为:

1个回答

您好,可以对s3m图层进行贴地或者贴对象设置的。

S3MTilesLayer的style3d中设置高度模式altitudeMode为贴地即可,

主要具体设置的layer需要从 viewer.scene.layers里find出来。

http://support.supermap.com.cn:8090/webgl/docs/Documentation/S3MTilesLayer.html

http://support.supermap.com.cn:8090/webgl/docs/Documentation/Style3D.html

希望可以帮助到您。

9,543EXP 2023年05月11日
 url = import.meta.env.VITE_ISERVER_URL + "3D-G235/rest/realspace";
        var promise = scene.open(url, "LM@0G235", {
            autoSetView: true
        });
        Cesium.when.all(promise, async (layers) => {
            layers.map(item => {
                item.indexedDBSetting.isAttributesSave = true;
                var style3D = new Cesium.Style3D();
                style3D.altitudeMode  = 1;
                item.style3D = style3D;
            })
            mapLayer = [layers];
            getRoadPolygonData();
            if (!scene.pickPositionSupported) {
                alert('不支持深度纹理,无法拾取位置!');
            }
        },

您好,我这样设置了还是无效啊!

上面和您说了,layer要用find取,不要用回调的。

还有,贴地是 Cesium.HeightReference.CLAMP_TO_GROUND
names.map(name => {
        let layer = viewer.scene.layers.find(name);
        var style3D = layer.style3D;
        style3D.altitudeMode = Cesium.HeightReference.CLAMP_TO_GROUND;
        layer.style3D = style3D;
        layer.refresh();
    })

您好,我已经这么写了,还是没有效果,还是悬空的,不知道为什么

您好,有图吗,具体是什么数据呢,点线面或者带风格的点线面、或者模型数据集的话,可以生成缓存的时候就设置高度模式为贴地的。

就是简单的道路三维矢量数据,想缓存后加载到三维地图上贴着地表,怎么设置都没用。不知道我哪儿错了。

把需要贴的的图层的高度模式设置成贴地,你在桌面端看效果对了,保存场景,切场景缓存就行,不需要前端设置什么的。

或者使用iDesktop的三维数据-TIN工具-提取数据,把二维线对地形缓存提取高度,转为贴合地表的三维线然后配置场景风格切缓存一样可以的。

好的谢谢了,验证了的确贴地表了,但是我本意是我的道路面贴地表,其他道路的附属物,根据道路进行平移,意思就是其他附属物不想贴地,还是想离道路面有一定的距离,这个能实现吗?比如道路上有个监控点,贴地的话,这个监控点也在地表了,我想要他在跟随路面,实际离路面多高,贴地后还是离地多高!
高度模式是图层级的控制,你这个需求的话,建议拆分数据集,需要贴地的一个数据集,不需要贴地的另一个。

两个图层不同的高度模式来用。
...