智慧园区前端大屏
linwe
2024-12-03 39d91d2b2042e86a45c8b56b53f35d4a8b53b365
src/pages/map/components/scomponents/layersControl.vue
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2024-10-31 10:47:29
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2024-12-02 22:20:32
 * @LastEditTime: 2024-12-03 12:51:24
 * @FilePath: \bigScreen\src\pages\map\components\scomponents\layersControl.vue
 * @Description:
 *
@@ -109,23 +109,23 @@
    subType: '3Dtile',
    urlData: [
      {
        url: VITE_APP_BASE + 'newMx/mx/tile_01/tileset.json',
        url: VITE_APP_BASE + 'mx/tile_01/tileset.json',
        label: 'tile_01'
      },
      {
        url: VITE_APP_BASE + 'newMx/mx/tile_02/tileset.json',
        url: VITE_APP_BASE + 'mx/tile_02/tileset.json',
        label: 'tile_02'
      },
      {
        url: VITE_APP_BASE + 'newMx/mx/tile_03/tileset.json',
        url: VITE_APP_BASE + 'mx/tile_03/tileset.json',
        label: 'tile_03'
      },
      {
        url: VITE_APP_BASE + 'newMx/mx/tile_04/tileset.json',
        url: VITE_APP_BASE + 'mx/tile_04/tileset.json',
        label: 'tile_04'
      },
      {
        url: VITE_APP_BASE + 'newMx/mx/tile_05/tileset.json',
        url: VITE_APP_BASE + 'mx/tile_05/tileset.json',
        label: 'tile_05'
      },
    ],
@@ -172,10 +172,11 @@
          if (!attrParams.firmName) {
            return
          }
          addPopLayers[attrParams.name] = new DC.HtmlLayer(attrParams.name)
          window.$viewer.addLayer(addPopLayers[attrParams.name])
          addPopLayers[attrParams.id] = new DC.HtmlLayer(attrParams.id)
          window.$viewer.addLayer(addPopLayers[attrParams.id])
          let iconEl = `<div class="marsBlueGradientPnl">
            <div>${attrParams.firmName}</div>
            <div>${attrParams.mainFuncName}</div>
                </div>`
          let divIcon = new DC.DivIcon(
            new DC.Position(attrParams.lng, attrParams.lat, attrParams.ele || 64),
@@ -187,7 +188,7 @@
            destroyPop()
          }
          divIcon.on(DC.MouseEventType.CLICK, incident)
          addPopLayers[attrParams.name].addOverlay(divIcon)
          addPopLayers[attrParams.id].addOverlay(divIcon)
        }
      },
      {
@@ -211,10 +212,11 @@
          if (!attrParams.firmName) {
            return
          }
          addPopLayers[attrParams.name] = new DC.HtmlLayer(attrParams.name)
          window.$viewer.addLayer(addPopLayers[attrParams.name])
          addPopLayers[attrParams.id] = new DC.HtmlLayer(attrParams.id)
          window.$viewer.addLayer(addPopLayers[attrParams.id])
          let iconEl = `<div class="marsBlueGradientPnl">
                  <div>${attrParams.firmName}</div>
            <div>${attrParams.firmName}</div>
            <div>${attrParams.mainFuncName}</div>
                </div>`
          let divIcon = new DC.DivIcon(
            new DC.Position(attrParams.lng, attrParams.lat, attrParams.ele || 64),
@@ -226,7 +228,7 @@
            destroyPop()
          }
          divIcon.on(DC.MouseEventType.CLICK, incident)
          addPopLayers[attrParams.name].addOverlay(divIcon)
          addPopLayers[attrParams.id].addOverlay(divIcon)
        }
      },
@@ -386,7 +388,8 @@
          addPopLayers[attrParams.name] = new DC.HtmlLayer(attrParams.name)
          window.$viewer.addLayer(addPopLayers[attrParams.name])
          let iconEl = `<div class="marsBlueGradientPnl">
                  <div>${attrParams.firmName}</div>
            <div>${attrParams.firmName}</div>
            <div>${attrParams.mainFuncName}</div>
                </div>`
          let divIcon = new DC.DivIcon(
            new DC.Position(attrParams.lng, attrParams.lat, attrParams.ele || 64),
@@ -692,13 +695,32 @@
          addTileLayers[item.layerName] = []
          item.urlData.forEach((m, ind) => {
            addTileLayers[item.layerName][ind] = new DC.Tileset(m.url, {
              maximumMemoryUsage: 1024,
              maximumScreenSpaceError: 8,
              skipLevels: 5,
              // maximumMemoryUsage: 1024,
              // maximumScreenSpaceError: 8,
              // skipLevels: 5,
              // skipLevelOfDetail: true,
              // skipScreenSpaceErrorFactor: 128,
              // progressiveResolutionHeightFraction: 0.5,
              // baseScreenSpaceError: 1024
              skipLevelOfDetail: true,
              baseScreenSpaceError: 1024,
              maximumScreenSpaceError: 16, // 数值加大,能让最终成像变模糊
              skipScreenSpaceErrorFactor: 128,
              progressiveResolutionHeightFraction: 0.5,
              baseScreenSpaceError: 1024
              skipLevels: 5,
              immediatelyLoadDesiredLevelOfDetail: false,
              loadSiblings: true, // 如果为true则不会在已加载完概况房屋后,自动从中心开始超清化房屋
              cullWithChildrenBounds: true,
              cullRequestsWhileMoving: true,
              cullRequestsWhileMovingMultiplier: 10, // 值越小能够更快的剔除
              preloadWhenHidden: true,
              preferLeaves: true,
              maximumMemoryUsage: 64, // 内存分配变小有利于倾斜摄影数据回收,提升性能体验
              progressiveResolutionHeightFraction: 0.5, // 数值偏于0能够让初始加载变得模糊
              dynamicScreenSpaceErrorDensity: 0.5, // 数值加大,能让周边加载变快
              dynamicScreenSpaceErrorFactor: 1, // 不知道起了什么作用没,反正放着吧先
              dynamicScreenSpaceError: true, // 根据测试,有了这个后,会在真正的全屏加载完之后才清晰化房屋
            })
            // tile.setHeight(-420)
            tileLayers.addOverlay(addTileLayers[item.layerName][ind])
@@ -962,26 +984,29 @@
// 销毁
function destroyPop () {
  let arr = Object.keys(addPopLayers)
  arr.filter(i => i != 'hgyq').forEach(i => {
  if(arr.length > 0){
    arr.forEach(i => {
    addPopLayers[i] && window.$viewer && window.$viewer.removeLayer(addPopLayers[i])
    addPopLayers[i] = null
    delete addPopLayers[i]
  })
  addPopLayers = {}
  }
}
onUnmounted(() => {
  let arr = Object.keys(addTileLayers)
  arr.forEach(i => {
    if (i == 'hgyq') {
      tileLayers.removeOverlay(addTileLayers[i])
      addTileLayers[i] = null
      delete addTileLayers[i]
      addTileLayers[i].forEach(t => {
        tileLayers.removeOverlay(t)
        t = null
      })
    } else {
      addTileLayers[i] && window.$viewer && window.$viewer.removeLayer(addTileLayers[i])
      addTileLayers[i] = null
      delete addTileLayers[i]
    }
    addTileLayers[i] = null
    delete addTileLayers[i]
  })
  addTileLayers = null