在vue上使用cesium开发三维地图-点位悬空

以前端webGIS开发工程师的角度,讲述关于GIS的知识,带大家快速了解下webGIS的知识。

在vue上使用cesium开发三维地图-点位悬空
推荐使用NSDT 3DConvert进行3D模型格式转换,支持glb、obj、stp、fbx、ifc等多种3D模型格式之间进行互相转换,在转换过程中,能够很好的保留模型原有的颜色、材质等信息。

之前,我们的点位是加载在地图上的,直白的讲,点位就是贴在地图上的。

但是我们这个地图是3维的,而且点位又是实体,那么他除了经纬度之外,有个高度,应该是合理的吧。

那么点位可不可以三维的显示在地图上,我们来查查,答案是可以的。

点位悬空

悬空设置

我们来找一找这个方法Cesium.Cartesian3.fromDegrees。

这样,点位就浮起来了。

增加引线

但是,只是浮起来,好像还是没那么好看,那我们接着加特效。

cesium的entitiesadd方法,不仅可以添加pointlabelbillboard,也可以添加线(polyline),我们这次增加线。

先看看效果:

实现:

在添加点位的方法中:

addMarker() {
      this.pointEntitiesLine = [];
       ...
      pointsInfo.forEach((pointObj) => {
        ...
        // 循环添加点位引线方法
        const labelEntityLine = this.loadFloatPoint(pointObj, pointObj.longitude * 1, pointObj.latitude * 1, 100);
       ...
        this.pointEntitiesLine.push(labelEntityLine);
      });
}

loadFloatPoint()方法 代码如下:

    // 加载高度线
    loadFloatPoint(pointObj, long, lat, height) {
      const Cesium = this.cesium;
      const lineColor = "#108de7";
      const entityLine = this.viewer.entities.add({
        name: 'line_' + pointObj.pointName,
        code: 'line_' + pointObj.pointCode,
        id: 'line_' + pointObj.pointCode,
        // 经度维度必须是数字
        // position: Cesium.Cartesian3.fromDegrees(120.42602, 31.92423),
        polyline: {
          positions: Cesium.Cartesian3.fromDegreesArrayHeights([
            long, lat, 0,
            long, lat, height,
          ]),
          width: 1,
          // 材质设置
          // material: Cesium.Color.DODGERBLUE,
          material: Cesium.Color.fromCssColorString(lineColor),
          // material : new Cesium.PolylineGlowMaterialProperty({ //发光线
          //     glowPower : 0.1,
          //     color : Cesium.Color.DODGERBLUE
          // })
        },
      });
      return entityLine;
    },

这样,点位引线就添加完成了。

提升

结束了吗?还没有。

虽然点位现在已经有3d的感觉了,但是点位弹框还在下面的位置,点位点击之前:

点位点击之后:

我们来给点位弹框一个俯视的角度,更加3d一点。

换最新的:

flyToFun()方法如下:

    // 飞入到点位方法
    flyToFun(long, lat, height) {
      const Cesium = this.cesium;
      const destination = Cesium.Cartesian3.fromDegrees(long, lat, height);
      this.viewer.scene.camera.flyTo({
        destination: destination,
      });
    },

效果出来了:

在vue上使用cesium开发三维地图 - 索引

在vue上使用cesium开发三维地图-常用地图开发框架

在vue上使用cesium开发三维地图-坐标系、webGIS简介

在vue上使用cesium开发三维地图-webgis功能介绍

在vue上使用cesium开发三维地图-地图加载

在vue上使用cesium开发三维地图-地图加载项目学习

在vue上使用cesium开发三维地图-点位加载

在vue上使用cesium开发三维地图-点位弹框

在vue上使用cesium开发三维地图-定位及优化

在vue上使用cesium开发三维地图-点击波纹特效

在vue上使用cesium开发三维地图-波纹特效偏移问题

在vue上使用cesium开发三维地图-点位悬空

在vue上使用cesium开发三维地图-加载三维数据

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号