Cesium 之解析supermap iserver rest api几何体为Cesium实体(含多面体、带孔洞的转换)

        可参考上一篇文章arcgis server rest api的几何体转为cesium实体https://blog.csdn.net/wokao253615105/article/details/123595805文章中实现了GeoJson转为Entity,本篇只介绍如何将supermap iserver rest api几何体转为GeoJson,超图几何体格式如下:

Cesium 之解析supermap iserver rest api几何体为Cesium实体(含多面体、带孔洞的转换)_第1张图片

 本来想通过直接写代码实现转换为GeoJson,但是发现转换不完整。无奈还是通过官方提供的iClient实现。

官方api帮助地址

https://iclient.supermap.io/libs/iclient8c/apidoc/files/SuperMap/REST/ServerType/ServerGeometry-js.html

本文使用了SuperMap-8.1.1-17729版本的js,实际使用时,只需引入文件夹下的SuperMap.Include.js

Cesium 之解析supermap iserver rest api几何体为Cesium实体(含多面体、带孔洞的转换)_第2张图片

 代码片段如下:

                        geometry = feature.geometry;
                        if (!geometry || geometry.points.length == 0) break;
                        // 临时缓存坐标数据
                        let smPoints = [];
                        feature.geometry.points.forEach(p => {
                            smPoints.push({
                                x: p.x,
                                y: p.y
                            })
                        })
                        var superRestGeomtry = new SuperMap.REST.ServerGeometry(geometry)
                        // 执行该步后multi的geometry会为空,暂不清楚原因
                        var supergeometry = superRestGeomtry.toGeometry();
                        var smGeoJSON = new SuperMap.Format.GeoJSON();
                        var smGeoJSONStr = smGeoJSON.write(supergeometry);
                        featureJson = JSON.parse(smGeoJSONStr);
                        // 重置数据
                        feature.geometry.points = smPoints;

 var supergeometry = superRestGeomtry.toGeometry();执行该步后multi的geometry会为空,暂不清楚原因,有知道的朋友帮忙解答下。

你可能感兴趣的:(Cesium开发,cesium,超图iserver,ServerGeometry,geojson转entity,孔洞多面体多线多点)