| | |
| | | |
| | | |
| | | // 确定缩放比例 |
| | | const determineScaling = () => { |
| | | const determineScaling = (currentState) => { |
| | | // console.log('确定缩放比例'); |
| | | if (!viewer) return |
| | | let height = viewer.camera.positionCartographic.height |
| | | // 根据高度展示对应的 gJson |
| | | for (let [index, item] of scalingJudgment.entries()) { |
| | | if (!item.show) return |
| | | if (height > item.value[0] && height <= item.value[1]) { |
| | | if (active === item.name) return |
| | | active = item.name |
| | | removeEntities() |
| | | removeLabel() |
| | | renderOutline(item) |
| | | if (!item.gJson && !item.splashedList?.length) return |
| | | item.gJson ? aggregation(item) : splashed(item) |
| | | break |
| | | return () => { |
| | | if (!viewer) return |
| | | let height = viewer.camera.positionCartographic.height |
| | | // 根据高度展示对应的 gJson |
| | | for (let [index, item] of scalingJudgment.entries()) { |
| | | if (!item.show) return |
| | | if (height > item.value[0] && height <= item.value[1]) { |
| | | if (active === item.name) return |
| | | active = item.name |
| | | removeEntities() |
| | | removeLabel() |
| | | renderOutline(item) |
| | | if (!item.gJson && !item.splashedList?.length) return |
| | | item.gJson ? aggregation(item, currentState.flyTo) : splashed(item) |
| | | |
| | | currentState.flyTo && currentState.stopFlyTo && (currentState.flyTo = false) |
| | | break |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | let currentState = { |
| | | flyTo: true, |
| | | stopFlyTo: false |
| | | } |
| | | const handlerDetermineScaling = () => determineScaling(currentState)() |
| | | |
| | | // 转换为目录结构, 返回数组, |
| | | function convertToHierarchy (code) { |
| | |
| | | selectedAreaCode, |
| | | async (newValue, oldValue) => { |
| | | if (!viewer) return |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | currentState.flyTo = true |
| | | |
| | | viewer.scene.postRender.removeEventListener(handlerDetermineScaling) |
| | | initMapData(newValue).then(() => { |
| | | viewer.scene.postRender.addEventListener(determineScaling) |
| | | viewer.scene.postRender.addEventListener(handlerDetermineScaling) |
| | | }) |
| | | }, |
| | | { deep: true } |
| | |
| | | |
| | | // 移除所有监听事件,变量置空 |
| | | const removeAll = () => { |
| | | currentState.flyTo = false |
| | | |
| | | if (!viewer) return |
| | | removeEntities() |
| | | removeLabel() |
| | | // viewer.camera.moveEnd.removeEventListener(determineScaling); |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | viewer.scene.postRender.removeEventListener(handlerDetermineScaling) |
| | | handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) |
| | | handler?.destroy() |
| | | viewer = null |
| | |
| | | currentEntity = null |
| | | } |
| | | const init = () => { |
| | | currentState.flyTo = true |
| | | currentState.stopFlyTo = true |
| | | |
| | | viewer = window.$viewer |
| | | viewer.scene.postRender.removeEventListener(determineScaling) |
| | | viewer.scene.postRender.removeEventListener(handlerDetermineScaling) |
| | | initMapData(selectedAreaCode.value || userAreaCode.value).then(() => { |
| | | viewer.scene.postRender.addEventListener(determineScaling) |
| | | viewer.scene.postRender.addEventListener(handlerDetermineScaling) |
| | | }) |
| | | handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) |
| | | handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK) |