SuitCim 模型

cesiumViewer

说明

模型 引入的开源前端js库cesium.js (opens new window)

# 使用

<template>
  <div class="testStyle">
    <cesium-viewer
      ref="cesium"
      :tileset="tileset"
      :symbol-list="symbolList"
      :image-type="imageType"
      @getLatitude="getLatitude"
      @getViewer="getViewer"
      :layers="layers"
      :symbol-img="symbolImg"
    ></cesium-viewer>
  </div>
</template>
<script>
import CesiumViewer from '@/components/CesiumViewer'
import { queryBimViews } from '@/api/project/bimViews'
const currentTileSets = null

export default {
  components: { CesiumViewer },
  data() {
    return {
      tileset: [],
      symbolList: [],
      imageType: null,
      layers: [0],
      symbolImg: {
        url: '../../static/point.png',
        width: 30,
        height: 30
      }
    }
  },
  methods: {
    /** 经纬度获取
     * @function getLatitude
     * @param {*} longitudeString
     * @param {*} latitudeString
     * @param {*} heightString
     */
    getLatitude({ longitudeString, latitudeString, heightString }) {
      const x = longitudeString
      const y = latitudeString
      const z = heightString
      console.log(x, y, z, '上述代')
    },
    async getViewer(viewer) {
      const back = await queryBimViews({
        linkType: 'shieldModel',
        sourceId: 1, // 盾构机的编码
        sourceType: 'Shield'
      })
      const result = back.result[0]
      const viewInfo = JSON.parse(result.viewInfo)
      const camera = JSON.parse(result.camera)
      const kmlList = camera.kmlList
        ? camera.kmlList.filter((item) => item)
        : []
      const sceneList = []
      for (const i in viewInfo) {
        sceneList.push({
          sceneId: i,
          sceneVersion: viewInfo[i].version,
          name: viewInfo[i].name
        })
      }
      // 视图加载处理
      this.getModel({ viewInfo, camera })
    },
    getModel({ viewInfo, camera }) {
      const tilesetVisibleArr = []
      let tileset = null
      for (const i in viewInfo) {
        const version = `${viewInfo[i].version ? viewInfo[i].version : '65536'}`
        const id = `${i}_${version}`
        try {
          if (this.$refs.cesium.getTileset(i)) {
            this.$refs.cesium.getTileset(i).show = true // 模型显示
            currentTileSets.push(i)
          } else {
            tileset = {
              name: i,
              url: `${this.$gisUrl}getModel?tileset=true&id=${id}`
            }
            const _tileset = this.$refs.cesium.addTileset(tileset)
            currentTileSets.push(_tileset)
          }
          // 设置sse 空间误差参数
          if (viewInfo[i].sse) {
            this.$refs.cesium.getTileset(i).maximumScreenSpaceError =
              viewInfo[i].sse
          }
          tilesetVisibleArr.push({
            tileset: this.$refs.cesium.getTileset(i),
            familyList: viewInfo[i].familyList,
            familyTypeList: viewInfo[i].familyTypeList,
            sceneId: i,
            version: viewInfo[i].version ? viewInfo[i].version : null,
            isVisable:
              typeof viewInfo[i].sceneVisable === 'undefined'
                ? true
                : viewInfo[i].sceneVisable,
            pellucidity: viewInfo[i].pellucidity ? viewInfo[i].pellucidity : 1
          })
        } catch (error) {
          console.log(error)
        }
      }
      this.$refs.cesium.flyTo(camera)
    }
  }
}
</script>
<style lang="scss">
.testStyle {
  .cesium-cesiumInspector-dropDown {
    display: none;
  }
  .cesium-3DTilesInspector {
    display: none;
  }
  .cesium-viewer-toolbar {
    display: none;
  }
}
</style>

# 参数说明

# 属性

属性 描述 类型 可选值 默认值
mapUrl 地图链接 String ''
tileset 模型的基本信息 Array[] []
layers 隐藏的图层级数 Array[] []
imageType 图片类型 String ''
symbolImg 标注点的图标样式 Object {}
symbolList 一组标注点的坐标 Array[] []
demonstrate --- Array[] []

# 事件

事件名称 说明 回调参数
getLatitude 当用户点击地图中的位置时,会返回相应的经纬度 { longitudeString, latitudeString, heightString }返回的分别是经度、纬度、高度
getTileset 得到视图的tileset 接受一个参数[String类型],返回符合筛选条件的参数tileset
addTileset 为视图增加一个tileset 接受的参数[String类型]会用于new Cesium.Cesium3DTileset(参数)中
resizeEvent 监听事件,判断视图是否为全屏模式 --
draw 暂定 --
clearPolygon 清除面,调用的entities.remove(),清除集合中的实例数组 --
disableDraw 禁用画面功能 --
showPolygon 添加多边形以及设置标签 (data, text),第一个参数可以是数组/字符串;第二个参数是标签显示的文本
zoomToPolygon 定位面 接受一个参数,该参数是showPolygon()返回的多边形结果。
getViewer 页面一加载的时候走这个方法,利用$emit()方法将viewer(查看器)传递给父组件 返回参数: viewer
destroyViewer 销毁查看器 --
photoAlphaHandler 设置倾斜摄影透明度 接受一个参数[String类型]
groundAlpha 设置地图透明度 接受一个参数[String类型]
initMeasureHandler 初始化测量 --
activateMeasureHandler 测量功能 --
deactivateMeasureHandler 禁用测量功能 --
clickPick3DTileFeature 拾取高亮模型 --
reversalClip3DTileset 反转按钮,跟水平剖切关联 --
mileagePolyline 里程线的绘制 --
addMarker 添加标注点 --
deactiveMaker 禁用标注点 --
getMarker 获取添加的标注的坐标,获取之后会清空 --
flyToMarker 视图飞到相应的标注点 接受一个对象[Object类型],对象中包括经纬度和高度的值
synchroCamera 同步视图 --
addMarkerToMap 在地图上添加实体 接受实体的位置、实体的标签内容、flag作为实体图片大小的判断、imageType实体的图片名称、options中包括该实体需要的其它属性
displayMarker 获取指定的实体 接受第一个position位置参数[Object]用于实体定位,接受第二个参数show[Boolean]判断该实体是否展示
getMarkerById 根据id获取Marker 接受一个参数 -- id[String]
removeMarker 移除标签 接受一个position参数[Object]
clearMarker 清理标注点 --
tilesetVisible tileset 的隐藏和显示 接受第一个参数[Object类型]包括tileset等,接受第二个参数isClear判断该tilset是否展示
tilesetPellucidity 设置tileset透明度 接受第一个参数
debugProcessTilesetRequest 点击结束标注按钮时调用的方法 --
getTileset 根据编码来获得tilset 接受一个参数name
removeTileset 移除该tileset 接受需要删除的tilset
flyToTileset 视图飞到相应的tileset处 接受一个tileset参数
setColor 着色和取消着色 接受一个参数state[Boolean]
addSymbol 添加标记, 结束时移除标记 接受一个参数state[Boolean]
selectedSymbol 点击标注点列表下拉框触发的方法 --
saveSymbol 保存标记点 --
showSymbol 显示标注点 接受一个参数img[Object],其中包括图片的样式宽高
showSelfWindow 显示自定义弹窗 接受三个参数:_this, position, html。分别代表vue的实例、弹窗的位置、弹窗的内容
selectFeature 选中模型 接受两个参数,第一个参数state[Boolean]如果为false表示取消单个选中。第二个参数type表示模型类型
hidden 隐藏模型 接受一个参数state[Boolean]
fly 点击飞行按钮时触发的方法 接受一个data参数
saveViewPoint 保存当前视图 ---
flyTo 将相机从当前位置飞到新位置 接受两个参数,第一个参数viewPoint[Object]包括相机位置、航向等, complete作为一个回调函数使用
addHtml addHtml 接受一个对象,包含四个值:{ position, offset, render, callBack }
flyToEntity 视图飞入相应的实体处 接受一个entity参数

# 源码及综合示例参考

组件源码 (opens new window)