吉安感知网项目-前端
罗广辉
2026-01-27 b6d97f9b6a332825646d0a232a99acd848fca30c
applications/drone-command/src/utils/cesium/publicCesium.js
@@ -114,6 +114,9 @@
      this.handlerRightEvents = { handler: null }
      this.handlerMouseMoveEvents = { handler: null }
      this.viewer = null
      this.terrainProvider = null
      this.terrainLoading = null
      this.terrainEnabled = false
      this.globalBaseMapLayers = []
      this.boundary = null
      this.init(options)
@@ -177,16 +180,7 @@
      this.viewer?.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK) // 禁用双击
      if (terrain) {
         // 使用公司地形
         Cesium.CesiumTerrainProvider.fromUrl(`${import.meta.env.VITE_APP_TERRAIN_URL}ja_terrain`, {
            requestVertexNormals: true, // 启用地形法线增强立体感
            requestWaterMask: true, // 启用水体遮罩效果
         }).then(terrainProvider => {
            this.viewer.terrainProvider = terrainProvider
            terrainLoadCallback?.()
         })
      }
      this.setTerrainVisible(terrain, terrainLoadCallback)
      this.viewer.scene.screenSpaceCameraController.maximumZoomDistance = 4500000
      this.switchLayers(layerMode)
@@ -203,6 +197,40 @@
   getViewer () {
      return this.viewer
   }
   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
      }
   }
   // 销毁viewer
@@ -876,4 +904,4 @@
         this.viewer?.imageryLayers.remove(imageryLayers)
      }
   }
}
}