吉安感知网项目-前端
shuishen
2026-01-31 f3e09a76a7f5147072374b80285901ff69ee2cfe
applications/task-work-order/src/utils/cesium/publicCesium.js
@@ -146,52 +146,7 @@
      this.viewer?.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK) // 禁用双击
      if (terrain) {
         try {
            const noTerrainMechanism = ['1962779164650135554']
            if (noTerrainMechanism.includes(store.state.user.userInfo?.deptId)) {
               // 使用Cesium World Terrain
               Cesium.createWorldTerrainAsync({
                  requestWaterMask: false,    // 请求水域效果
                  requestVertexNormals: true // 请求光照和地形法线
               }).then(terrainProvider => {
                  this.viewer.terrainProvider = terrainProvider
                  terrainLoadCallback?.()
               })
            } else {
               /*// 正则:第一位非0,第二位任意数字,后10位都是0
               const re = /^[1-9]\d0{10}$/
               let result = null
               // 1️⃣先判断 areaCode
               if (re.test(store.state.user.userInfo.detail.areaCode)) {
                  result = store.state.user.userInfo.detail.areaCode.slice(0, 6)
               } else {
                  // 2️⃣如果不满足,从 ancestors 里找
                  const matchedItems = store.state.user.userInfo.detail.ancestors
                     .split(',')
                     .filter(item => re.test(item)) // 过滤出符合条件的
                  // 取第一个符合条件的前6位(可以改成 last one 看需求)
                  if (matchedItems.length > 0) {
                     result = matchedItems[0].slice(0, 6)
                  }
               }
               // 使用公司地形
               Cesium.CesiumTerrainProvider.fromUrl(`${import.meta.env.VITE_APP_TERRAIN_URL}${result}`, {
                  requestVertexNormals: true, // 启用地形法线增强立体感
                  requestWaterMask: true, // 启用水体遮罩效果
               }).then(terrainProvider => {
                  this.viewer.terrainProvider = terrainProvider
                  terrainLoadCallback?.()
               })*/
            }
         } catch (error) {
            console.error('地形加载失败:', error)
         }
      }
      this.setTerrainVisible(terrain, terrainLoadCallback)
      this.viewer.scene.screenSpaceCameraController.maximumZoomDistance = 4500000
      this.switchLayers(layerMode)
@@ -205,6 +160,39 @@
         this.viewer.resolutionScale = dpr // 设置分辨率缩放比例
      }
   }
   async ensureTerrainProvider () {
      if (this.terrainProvider) return this.terrainProvider
      if (this.terrainLoading) return this.terrainLoading
      this.terrainLoading = Cesium.CesiumTerrainProvider.fromUrl(
         `${import.meta.env.VITE_APP_TERRAIN_URL}ja_terrain`,
         {
            requestVertexNormals: true, // 启用地形法线增强立体感
            requestWaterMask: true, // 启用水体遮罩效果
         }
      ).then(provider => {
         this.terrainProvider = provider
         return provider
      })
      return this.terrainLoading
   }
   async setTerrainVisible (visible, terrainLoadCallback) {
      if (!this.viewer) return
      if (!visible) {
         this.viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider()
         this.terrainEnabled = false
         return
      }
      try {
         const provider = await this.ensureTerrainProvider()
         if (!this.viewer) return
         this.viewer.terrainProvider = provider
         this.terrainEnabled = true
         terrainLoadCallback?.()
      } catch (error) {
         this.terrainEnabled = false
      }
   }
   getViewer () {
      return this.viewer