1002 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1002 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | ||
|  * @name: global
 | ||
|  * @author: Administrator
 | ||
|  * @date: 2023-12-01 14:15
 | ||
|  * @description:global
 | ||
|  * @update: 2023-12-01 14:15
 | ||
|  */
 | ||
| 
 | ||
| /*获取当前视角*/
 | ||
| import MouseEvent from '../Event/index'
 | ||
| import Tools from "../Tools";
 | ||
| import { Proj } from "../Tools/proj";
 | ||
| import { getTheme, setTheme } from "../Obj/Element/theme";
 | ||
| import { setActiveViewer as setMultiViewportActiveViewer } from './MultiViewportMode'
 | ||
| import { setActiveViewer as setSplitActiveViewer, getSdk } from './SplitScreen'
 | ||
| import { updateCluster } from './cluster/cluster'
 | ||
| import { getHost } from "../on";
 | ||
| 
 | ||
| let coordinateSystem = 'EPSG:4326'
 | ||
| let positionType = '度'
 | ||
| let _cartesian
 | ||
| let GroundCover = true
 | ||
| let bimPickObject = {}
 | ||
| let containerObject = {}
 | ||
| let rotateAroundObject = {}
 | ||
| function getCurrentView(sdk) {
 | ||
|   let tools = new Tools()
 | ||
|   let viewer = sdk.viewer
 | ||
|   return JSON.parse(JSON.stringify({
 | ||
|     // heading: viewer.camera.heading,
 | ||
|     // pitch: viewer.camera.pitch,
 | ||
|     // roll: viewer.camera.roll,
 | ||
|     position: tools.cartesian3Towgs84(viewer.camera.position, viewer),
 | ||
|     orientation: {
 | ||
|       heading: Cesium.Math.toDegrees(viewer.camera.heading),
 | ||
|       pitch: Cesium.Math.toDegrees(viewer.camera.pitch),
 | ||
|       roll: Cesium.Math.toDegrees(viewer.camera.roll)
 | ||
|     }
 | ||
|   }))
 | ||
| }
 | ||
| 
 | ||
| /*设置默认视角*/
 | ||
| function setDefaultView(sdk, options) {
 | ||
|   let viewer = sdk.viewer
 | ||
|   if (options) {
 | ||
|     viewer.CAMERA_DEFAULT_VIEW_RECTANGLE = {
 | ||
|       destination: options.destination || {},
 | ||
|       orientation: options.orientation || {}
 | ||
|     }
 | ||
|   }
 | ||
|   else {
 | ||
|     viewer.CAMERA_DEFAULT_VIEW_RECTANGLE = undefined
 | ||
|     //设置cesium的默认视角
 | ||
|     Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(
 | ||
|       //西边的经度
 | ||
|       89.5,
 | ||
|       //南边的纬度
 | ||
|       10.4,
 | ||
|       //东边的经度
 | ||
|       110.4,
 | ||
|       //北边的维度
 | ||
|       61.2
 | ||
|     )
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| /*定位到指定视角*/
 | ||
| async function flyTo(sdk, options, duration = 3) {
 | ||
|   let tools = new Tools(sdk)
 | ||
|   let destination
 | ||
|   let orientation = options.orientation
 | ||
|   if (options.position) {
 | ||
|     if (options.position.alt !== 0 && !options.position.alt) {
 | ||
|       options.position.alt = await tools.getClampToHeight(options.position)
 | ||
|     }
 | ||
|     let h = 0
 | ||
|     if (!orientation) {
 | ||
|       h = 500
 | ||
|     }
 | ||
|     destination = Cesium.Cartesian3.fromDegrees(options.position.lng, options.position.lat, options.position.alt + h)
 | ||
|   }
 | ||
|   else {
 | ||
|     let bbox = tools.cal_envelope(options.positions)
 | ||
|     destination = new Cesium.Rectangle(
 | ||
|       Cesium.Math.toRadians(bbox[3][0]),
 | ||
|       Cesium.Math.toRadians(bbox[3][1]),
 | ||
|       Cesium.Math.toRadians(bbox[1][0]),
 | ||
|       Cesium.Math.toRadians(bbox[1][1])
 | ||
|     )
 | ||
|   }
 | ||
|   closeRotateAround(sdk)
 | ||
|   sdk.viewer.camera.flyTo({ destination, duration, orientation, complete: options.complete, })
 | ||
| }
 | ||
| 
 | ||
| /*相机锁定*/
 | ||
| function CameraController(sdk, status = true) {
 | ||
|   if (!sdk || !sdk.viewer) {
 | ||
|     return
 | ||
|   }
 | ||
|   let viewer = sdk.viewer
 | ||
|   viewer.scene.screenSpaceCameraController.enableRotate = status;
 | ||
|   viewer.scene.screenSpaceCameraController.enableTranslate = status;
 | ||
|   viewer.scene.screenSpaceCameraController.enableZoom = status;
 | ||
|   viewer.scene.screenSpaceCameraController.enableTilt = status;
 | ||
|   viewer.scene.screenSpaceCameraController.enableLook = status;
 | ||
| }
 | ||
| 
 | ||
| /*控件显隐*/
 | ||
| function CesiumContainer(sdk, options) {
 | ||
|   if (!sdk || !sdk.viewer) {
 | ||
|     return
 | ||
|   }
 | ||
|   containerObject[sdk.viewer._element.className] || (containerObject[sdk.viewer._element.className] = {})
 | ||
|   containerObject[sdk.viewer._element.className].event && containerObject[sdk.viewer._element.className].event.destroy()
 | ||
|   let tools = new Tools(sdk)
 | ||
|   let element = sdk.viewer._element
 | ||
|   let proj = sdk.proj
 | ||
|   for (let key in options) {
 | ||
|     switch (key) {
 | ||
|       case 'compass':
 | ||
|         let compass = element.getElementsByClassName('compass')[0]
 | ||
|         let navigation = element.getElementsByClassName('navigation-controls')[0]
 | ||
|         if (options[key]) {
 | ||
|           compass && (compass.style.display = 'block')
 | ||
|           navigation && (navigation.style.display = 'flex')
 | ||
|         }
 | ||
|         else {
 | ||
|           compass && (compass.style.display = 'none')
 | ||
|           navigation && (navigation.style.display = 'none')
 | ||
|         }
 | ||
|         break;
 | ||
|       case 'legend':
 | ||
|         let distanceLegend = element.getElementsByClassName('distance-legend')[0]
 | ||
|         if (options[key]) {
 | ||
|           distanceLegend && (distanceLegend.parentNode.style.display = 'block')
 | ||
|         }
 | ||
|         else {
 | ||
|           distanceLegend && (distanceLegend.parentNode.style.display = 'none')
 | ||
|         }
 | ||
|         break;
 | ||
|       case 'info':
 | ||
|         let infoElm = element.getElementsByClassName('cesium-info')[0]
 | ||
|         if (options[key]) {
 | ||
|           if (infoElm) {
 | ||
|             update()
 | ||
|             infoElm.style.display = 'block'
 | ||
|           }
 | ||
|           else {
 | ||
|             infoElm = document.createElement('div');
 | ||
|             infoElm.className = "cesium-info"
 | ||
|             infoElm.style.position = 'absolute';
 | ||
|             infoElm.style.bottom = '32px';
 | ||
|             infoElm.style.right = '240px';
 | ||
|             infoElm.style['font-size'] = '14px';
 | ||
|             infoElm.style['background-color'] = 'rgba(47,53,60,.8)';
 | ||
|             infoElm.style.color = '#fff';
 | ||
|             infoElm.style.padding = '4px 10px';
 | ||
|             infoElm.style['border-radius'] = '18px';
 | ||
| 
 | ||
|             if (coordinateSystem === 'EPSG:4326') {
 | ||
|               infoElm.innerHTML = `
 | ||
|                 <span>经度:</span><span>-</span>
 | ||
|                 <span>纬度:</span><span>-</span>
 | ||
|                 <span>海拔高度:</span><span>-</span>
 | ||
|               `
 | ||
|             }
 | ||
|             else {
 | ||
|               infoElm.innerHTML = `
 | ||
|                 <span>x:</span><span>-</span>
 | ||
|                 <span>y:</span><span>-</span>
 | ||
|                 <span>z:</span><span>-</span>
 | ||
|               `
 | ||
|             }
 | ||
|             sdk.viewer._element.appendChild(infoElm)
 | ||
|           }
 | ||
|           let event = new MouseEvent(sdk)
 | ||
|           containerObject[sdk.viewer._element.className].event = event
 | ||
|           let lastPickTime = 0;
 | ||
|           let timeoutEvent
 | ||
|           event.mouse_move((movement, cartesian) => {
 | ||
|             _cartesian = cartesian
 | ||
|             // const now = Date.now();
 | ||
|             // if (now - lastPickTime < 500) {
 | ||
|             //   clearTimeout(timeoutEvent)
 | ||
|             //   timeoutEvent = setTimeout(() => {
 | ||
|             //     update()
 | ||
|             //   }, 500);
 | ||
|             //   return
 | ||
|             // }
 | ||
|             // lastPickTime = now;
 | ||
|             update()
 | ||
|           })
 | ||
|           async function update() {
 | ||
|             if (!_cartesian) {
 | ||
|               return
 | ||
|             }
 | ||
|             // let pos = sdk.viewer.scene.clampToHeight(_cartesian)
 | ||
|             let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
 | ||
|             // position.alt = height
 | ||
|             if (coordinateSystem === 'EPSG:4326') {
 | ||
|               // infoElm.innerHTML = `
 | ||
|               //     <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
 | ||
|               //     <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
 | ||
|               //     <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|               //   `
 | ||
|               switch (positionType || '度') {
 | ||
|                 case '度':
 | ||
|                   infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
 | ||
|                   <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|                   break;
 | ||
|                 case '度分':
 | ||
|                   infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
 | ||
|                   <span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|                   break;
 | ||
|                 case '度分秒':
 | ||
|                   infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
 | ||
|                   <span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|                   break;
 | ||
|                 default:
 | ||
|                   break;
 | ||
|               }
 | ||
|             }
 | ||
|             else {
 | ||
|               // let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
 | ||
|               let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', posiToCoordinate(coordinateSystem, position))
 | ||
|               if (result.points.length) {
 | ||
|                 infoElm.innerHTML = `
 | ||
|                   <span>x:</span><span>${Number(result.points[0].x.toFixed(6))}</span>
 | ||
|                   <span style="margin-left: 5px;">y:</span><span>${Number(result.points[0].y.toFixed(6))}</span>
 | ||
|                   <span style="margin-left: 5px;">z:</span><span>${Number(result.points[0].z.toFixed(6))}</span>
 | ||
|                 `
 | ||
|               }
 | ||
| 
 | ||
|             }
 | ||
|           }
 | ||
|         }
 | ||
|         else {
 | ||
|           infoElm && (infoElm.style.display = 'none')
 | ||
|         }
 | ||
|         break;
 | ||
|       case 'frame':
 | ||
|         if (options[key]) {
 | ||
|           sdk.viewer.scene.debugShowFramesPerSecond = true;
 | ||
|           setTimeout(() => {
 | ||
|             let cesiumWidgetContainerElm = sdk.viewer._element.getElementsByClassName('cesium-viewer-cesiumWidgetContainer')[0]
 | ||
|             let defaultContainer = cesiumWidgetContainerElm.getElementsByClassName('cesium-performanceDisplay-defaultContainer')[0]
 | ||
|             if (defaultContainer) {
 | ||
|               cesiumWidgetContainerElm.appendChild(defaultContainer)
 | ||
|             }
 | ||
|           }, 50);
 | ||
|         }
 | ||
|         else {
 | ||
|           sdk.viewer.scene.debugShowFramesPerSecond = false;
 | ||
|         }
 | ||
|         break;
 | ||
|     }
 | ||
|   }
 | ||
|   // let compass = element.getElementsByClassName('compass')[0]
 | ||
|   // let navigation = element.getElementsByClassName('navigation-controls')[0]
 | ||
|   // let distanceLegend = element.getElementsByClassName('distance-legend')[0]
 | ||
|   // if(status) {
 | ||
|   //   compass && (compass.style.display = 'block')
 | ||
|   //   navigation && (navigation.style.display = 'block')
 | ||
|   //   distanceLegend && (distanceLegend.style.display = 'block')
 | ||
|   // }
 | ||
|   // else {
 | ||
|   //   compass && (compass.style.display = 'none')
 | ||
|   //   navigation && (navigation.style.display = 'none')
 | ||
|   //   distanceLegend && (distanceLegend.style.display = 'none')
 | ||
|   //   viewer.cesiumNavigation.distanceLegendViewModel.destroy()
 | ||
|   // }
 | ||
| }
 | ||
| 
 | ||
| /*设置广告牌默认图标*/
 | ||
| function setBillboardDefaultUrl(url, name) {
 | ||
|   if (name) {
 | ||
|     name = 'billboard_default_url_' + name
 | ||
|   }
 | ||
|   else {
 | ||
|     name = 'billboard_default_url'
 | ||
|   }
 | ||
|   let host = getHost()
 | ||
|   if (!url.startsWith("http")) {
 | ||
|     //说明是本地的json,在磁盘中存在的
 | ||
|     if (!url.includes(":")) {
 | ||
|       if (host) {
 | ||
|         let o = new URL(url, host)
 | ||
|         url = o.href
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
|   localStorage.setItem(name, url);
 | ||
| }
 | ||
| /*获取广告牌默认图标*/
 | ||
| function getBillboardDefaultUrl(name) {
 | ||
|   if (name) {
 | ||
|     name = 'billboard_default_url_' + name
 | ||
|   }
 | ||
|   else {
 | ||
|     name = 'billboard_default_url'
 | ||
|   }
 | ||
|   return localStorage.getItem(name);
 | ||
| }
 | ||
| 
 | ||
| /*设置高度参考*/
 | ||
| function setGroundCover(sdk, status) {
 | ||
|   GroundCover = status ? true : false
 | ||
|   updateCluster(sdk.viewer)
 | ||
| }
 | ||
| 
 | ||
| /*获取高度参考*/
 | ||
| function getGroundCover() {
 | ||
|   return GroundCover
 | ||
| }
 | ||
| 
 | ||
| function setBimPickStatus(sdk, status) {
 | ||
|   if (!sdk || !sdk.viewer) {
 | ||
|     return
 | ||
|   }
 | ||
|   bimPickObject[sdk.viewer._element.className] || (bimPickObject[sdk.viewer._element.className] = {})
 | ||
|   bimPickObject[sdk.viewer._element.className].status = status
 | ||
|   if (bimPickObject[sdk.viewer._element.className].MoveHandler) {
 | ||
|     bimPickObject[sdk.viewer._element.className].MoveHandler.destroy()
 | ||
|   }
 | ||
|   if (!status) {
 | ||
|     return
 | ||
|   }
 | ||
|   bimPickObject[sdk.viewer._element.className].MoveHandler = new Cesium.ScreenSpaceEventHandler(sdk.viewer.canvas)
 | ||
|   bimPickObject[sdk.viewer._element.className].MoveHandler.setInputAction(function (movement) {
 | ||
|     const pick = sdk.viewer.scene.pick(movement.endPosition);
 | ||
|     let selectedId = bimPickObject[sdk.viewer._element.className].selectedId
 | ||
|     let that = sdk.entityMap.get(bimPickObject[sdk.viewer._element.className].id)
 | ||
|     // if (selectedFeatureId) {
 | ||
|     //   let color = '#fff'
 | ||
|     //   let state = selectedFeature.getProperty('state')
 | ||
|     //   switch (state) {
 | ||
|     //     case '0':
 | ||
|     //       color = '#fff'
 | ||
|     //       break;
 | ||
|     //     case '1':
 | ||
|     //       color = '#f00'
 | ||
|     //       break;
 | ||
|     //     case '2':
 | ||
|     //       color = '#0f0'
 | ||
|     //       break;
 | ||
|     //     case '3':
 | ||
|     //       color = '#00f'
 | ||
|     //       break;
 | ||
|     //     default:
 | ||
|     //   }
 | ||
|     //   selectedFeature.color = Cesium.Color.fromCssColorString(color).withAlpha(selectedFeature.tileset.transparency)
 | ||
|     // }
 | ||
|     if (that) {
 | ||
|       if (that.features.has(selectedId)) {
 | ||
|         let features = that.features.get(selectedId).features
 | ||
|         for (let key in features) {
 | ||
|           if (features[key].content._model) {
 | ||
|             let color = features[key].customColor || Cesium.Color.fromCssColorString('#fff')
 | ||
|             features[key].color = Cesium.Color.fromCssColorString(`rgba(${Cesium.Color.floatToByte(color.red)},${Cesium.Color.floatToByte(color.green)},${Cesium.Color.floatToByte(color.blue)},${color.alpha * ((features[key].customAlpha || features[key].customAlpha === 0) ? features[key].customAlpha : 1)})`)
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|     if (pick && pick.content) {
 | ||
|       let obj = sdk.getIncetance(pick.content.tileset.id)
 | ||
|       if (obj.type === 'bim') {
 | ||
|         if (pick.primitive && pick.primitive.id) {
 | ||
|           let that = sdk.entityMap.get(pick.primitive.id)
 | ||
|           selectedId = pick.getProperty('id')
 | ||
|           if (that.features.has(selectedId)) {
 | ||
|             let features = that.features.get(selectedId).features
 | ||
|             for (let key in features) {
 | ||
|               if (features[key].content._model) {
 | ||
|                 features[key].color = Cesium.Color.fromCssColorString('#ffeb3b')
 | ||
|               }
 | ||
|             }
 | ||
|           }
 | ||
|           bimPickObject[sdk.viewer._element.className].id = pick.primitive.id
 | ||
|           bimPickObject[sdk.viewer._element.className].selectedId = selectedId
 | ||
|         }
 | ||
|       }
 | ||
|       else {
 | ||
|         pick.primitive.id = null
 | ||
|       }
 | ||
|     }
 | ||
|   }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
 | ||
| }
 | ||
| 
 | ||
| function getBimPickStatus(sdk) {
 | ||
|   if (!sdk || !sdk.viewer) {
 | ||
|     return
 | ||
|   }
 | ||
|   return bimPickObject[sdk.viewer._element.className] ? bimPickObject[sdk.viewer._element.className].status : false
 | ||
| }
 | ||
| 
 | ||
| /* 围绕坐标旋转 */
 | ||
| function rotateAround(sdk, position) {
 | ||
|   if (!sdk || !sdk.viewer) {
 | ||
|     return
 | ||
|   }
 | ||
|   setActiveViewer(0)
 | ||
|   sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
 | ||
|   // 关闭Controller
 | ||
|   sdk.entityMap.forEach((item) => {
 | ||
|     item.editObj && item.editObj.destroy()
 | ||
|     item.ControllerObject && item.ControllerObject.destroy()
 | ||
|   })
 | ||
|   rotateAroundObject[sdk.viewer._element.className] || (rotateAroundObject[sdk.viewer._element.className] = {})
 | ||
|   rotateAroundObject[sdk.viewer._element.className].animate && TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate)
 | ||
|   rotateAroundObject[sdk.viewer._element.className].event && rotateAroundObject[sdk.viewer._element.className].event.destroy()
 | ||
|   if (!position) {
 | ||
|     CameraController(sdk, true)
 | ||
|     return
 | ||
|   }
 | ||
| 
 | ||
|   let point = Cesium.Cartesian3.fromDegrees(position.lng, position.lat, position.alt)
 | ||
|   let angle = Cesium.Math.toDegrees(sdk.viewer.camera.heading)
 | ||
|   let range = Cesium.Cartesian3.distance(sdk.viewer.camera.position, point);
 | ||
|   CameraController(sdk, false)
 | ||
|   let pitch = sdk.viewer.camera.pitch
 | ||
|   let degrees = Cesium.Math.toDegrees(pitch)
 | ||
|   if (degrees < -89.99) {
 | ||
|     pitch = Cesium.Math.toRadians(-89.99)
 | ||
|   }
 | ||
|   rotateAroundObject[sdk.viewer._element.className].animate = new TWEEN.Tween({ angle: angle }).to({ angle: angle - 360 }, 30000).easing(TWEEN.Easing.Linear.None).repeat(Infinity).onUpdate(async (r, a) => {
 | ||
|     if (!sdk.viewer) {
 | ||
|       TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate)
 | ||
|       return
 | ||
|     }
 | ||
|     sdk.viewer.camera.lookAt(
 | ||
|       point,
 | ||
|       new Cesium.HeadingPitchRange(Cesium.Math.toRadians(r.angle), pitch, range)
 | ||
|     )
 | ||
| 
 | ||
|     sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
 | ||
|   }).start()
 | ||
| 
 | ||
|   let event = new MouseEvent(sdk)
 | ||
|   rotateAroundObject[sdk.viewer._element.className].event = event
 | ||
|   event.mouse_left_down(() => {
 | ||
|     rotateAroundObject[sdk.viewer._element.className].animate && TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate)
 | ||
|     rotateAroundObject[sdk.viewer._element.className].event && rotateAroundObject[sdk.viewer._element.className].event.destroy()
 | ||
|     CameraController(sdk, true)
 | ||
|     sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
 | ||
|   })
 | ||
| }
 | ||
| 
 | ||
| /* 关闭围绕坐标旋转 */
 | ||
| function closeRotateAround(sdk) {
 | ||
|   if (!sdk || !sdk.viewer) {
 | ||
|     return
 | ||
|   }
 | ||
|   if (rotateAroundObject[sdk.viewer._element.className]) {
 | ||
|     rotateAroundObject[sdk.viewer._element.className].animate && TWEEN.remove(rotateAroundObject[sdk.viewer._element.className].animate)
 | ||
|     rotateAroundObject[sdk.viewer._element.className].event && rotateAroundObject[sdk.viewer._element.className].event.destroy()
 | ||
|     CameraController(sdk, true)
 | ||
|     sdk.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| function closeViewFollow(sdk) {
 | ||
|   if (sdk && sdk.entityMap) {
 | ||
|     let entityMap = sdk.entityMap
 | ||
|     for (let [key, value] of entityMap) {
 | ||
|       if (value.type === 'TrajectoryMotion' && value.viewFollow) {
 | ||
|         value.viewFollow = false
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| /* 方里网状态开关 */
 | ||
| function FlwStatusSwitch(sdk, status) {
 | ||
|   if (!sdk) {
 | ||
|     return
 | ||
|   }
 | ||
|   let layer
 | ||
|   let sdkD = getSdk().sdkD
 | ||
|   if (sdkD && sdk !== sdkD) {
 | ||
|     FlwStatusSwitch(sdkD, status)
 | ||
|   }
 | ||
|   for (let i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {
 | ||
|     if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw') {
 | ||
|       layer = sdk.viewer.imageryLayers._layers[i]
 | ||
|       break
 | ||
|     }
 | ||
|   }
 | ||
|   if (layer) {
 | ||
|     sdk.viewer.imageryLayers.remove(layer)
 | ||
|   }
 | ||
|   if (status) {
 | ||
|     sdk.viewer.imageryLayers.addImageryProvider(new Cesium.TileCoordinatesImageryProviderFlw(
 | ||
|       {
 | ||
|         tileWidth: 128,
 | ||
|         tileHeight: 128,
 | ||
|       }
 | ||
|     ));
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| function getFlwStatus(sdk) {
 | ||
|   let status = false
 | ||
|   for (let i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {
 | ||
|     if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'flw') {
 | ||
|       status = true
 | ||
|       break
 | ||
|     }
 | ||
|   }
 | ||
|   return status
 | ||
| }
 | ||
| 
 | ||
| /* 经纬网状态开关 */
 | ||
| function JwwStatusSwitch(sdk, status) {
 | ||
|   if (!sdk) {
 | ||
|     return
 | ||
|   }
 | ||
|   let layer
 | ||
|   let sdkD = getSdk().sdkD
 | ||
|   if (sdkD && sdk !== sdkD) {
 | ||
|     JwwStatusSwitch(sdkD, status)
 | ||
|   }
 | ||
|   for (let i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {
 | ||
|     if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww') {
 | ||
|       layer = sdk.viewer.imageryLayers._layers[i]
 | ||
|       break
 | ||
|     }
 | ||
|   }
 | ||
|   if (layer) {
 | ||
|     sdk.viewer.imageryLayers.remove(layer)
 | ||
|   }
 | ||
|   if (status) {
 | ||
|     sdk.viewer.imageryLayers.addImageryProvider(new Cesium.TileCoordinatesImageryProviderJww());
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| function getJwwStatus(sdk) {
 | ||
|   let status = false
 | ||
|   for (let i = 0; i < sdk.viewer.imageryLayers._layers.length; i++) {
 | ||
|     if (sdk.viewer.imageryLayers._layers[i]._imageryProvider && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type && sdk.viewer.imageryLayers._layers[i]._imageryProvider._type === 'jww') {
 | ||
|       status = true
 | ||
|       break
 | ||
|     }
 | ||
|   }
 | ||
|   return status
 | ||
| }
 | ||
| 
 | ||
| function splitScreen2(sdk, status) {
 | ||
|   let sliderElm = sdk.viewer._element.getElementsByClassName('YJ-custom-slider')[0]
 | ||
|   let leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0]
 | ||
|   let rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0]
 | ||
|   if (sliderElm) {
 | ||
|     sdk.viewer._element.removeChild(sliderElm)
 | ||
|     sdk.viewer._element.removeChild(leftElm)
 | ||
|     sdk.viewer._element.removeChild(rightElm)
 | ||
|   }
 | ||
|   if (status) {
 | ||
|     sliderElm = document.createElement('div');
 | ||
|     sliderElm.className = 'YJ-custom-slider'
 | ||
|     sliderElm.style.position = 'absolute'
 | ||
|     sliderElm.style.left = '50%'
 | ||
|     sliderElm.style.top = '0px'
 | ||
| 
 | ||
|     leftElm = document.createElement('input');
 | ||
|     leftElm.className = 'YJ-custom-checkbox-left'
 | ||
|     leftElm.type = 'checkbox'
 | ||
|     leftElm.style.position = 'absolute'
 | ||
|     leftElm.style.left = 'calc(50% - 50px)'
 | ||
|     rightElm = document.createElement('input');
 | ||
|     rightElm.className = 'YJ-custom-checkbox-right'
 | ||
|     rightElm.type = 'checkbox'
 | ||
|     rightElm.style.position = 'absolute'
 | ||
|     rightElm.style.right = 'calc(50% - 50px)'
 | ||
|     sdk.viewer._element.appendChild(leftElm)
 | ||
|     sdk.viewer._element.appendChild(rightElm)
 | ||
| 
 | ||
|     leftElm.checked = true
 | ||
|     leftElm.addEventListener('change', (e) => {
 | ||
|       if (!e.target.checked) {
 | ||
|         if (!rightElm.checked) {
 | ||
|           rightElm.checked = true
 | ||
|         }
 | ||
|       }
 | ||
|       changeEntitySplitStatus()
 | ||
|     })
 | ||
|     rightElm.addEventListener('change', (e) => {
 | ||
|       if (!e.target.checked) {
 | ||
|         if (!leftElm.checked) {
 | ||
|           leftElm.checked = true
 | ||
|         }
 | ||
|       }
 | ||
|       changeEntitySplitStatus()
 | ||
|     })
 | ||
| 
 | ||
|     sliderElm.addEventListener('mousedown', () => {
 | ||
|       document.body.addEventListener('mousemove', mousemove)
 | ||
|       sliderElm.addEventListener('mouseup', () => {
 | ||
|         document.body.removeEventListener('mousemove', mousemove)
 | ||
|       })
 | ||
|     })
 | ||
|     function mousemove(a, b) {
 | ||
|       if (sdk.viewer._element.getElementsByTagName('canvas')[0] === a.target) {
 | ||
|         sliderElm.style.left = (a.offsetX / sdk.viewer._element.scrollWidth * 100) + '%'
 | ||
|         sdk.viewer.scene.splitPosition = a.offsetX / sdk.viewer._element.scrollWidth
 | ||
|       }
 | ||
|     }
 | ||
|     sdk.viewer._element.appendChild(sliderElm)
 | ||
|     sdk.viewer.scene.splitStatus = status
 | ||
|     sdk.viewer.scene.splitPosition = 0.5
 | ||
|     changeEntitySplitStatus()
 | ||
|   }
 | ||
|   else {
 | ||
|     sdk.viewer.scene.splitPosition = 0
 | ||
|     changeEntitySplitStatus(0)
 | ||
|     sdk.viewer.scene.splitStatus = status
 | ||
|   }
 | ||
| 
 | ||
|   function changeEntitySplitStatus(v) {
 | ||
|     let value
 | ||
|     if (v === undefined || v === null) {
 | ||
|       if (leftElm.checked && rightElm.checked) {
 | ||
|         value = 0
 | ||
|       }
 | ||
|       else {
 | ||
|         if (leftElm.checked) {
 | ||
|           value = -1
 | ||
|         }
 | ||
|         if (rightElm.checked) {
 | ||
|           value = 1
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|     else {
 | ||
|       value = v
 | ||
|     }
 | ||
| 
 | ||
|     sdk.entityMap.forEach((item, key) => {
 | ||
|       if (sdk.viewer.scene.splitStatus) {
 | ||
|         if (item.entity.billboard) {
 | ||
|           item.entity.billboard.splitDirection = value
 | ||
|         }
 | ||
|         else {
 | ||
|           item.entity && (item.entity.splitDirection = value)
 | ||
|         }
 | ||
|       }
 | ||
|       console.log()
 | ||
|     })
 | ||
|   }
 | ||
| }
 | ||
| function splitScreen(sdk, status) {
 | ||
|   let sliderElm = sdk.viewer._element.getElementsByClassName('YJ-custom-slider')[0]
 | ||
|   let leftElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-left')[0]
 | ||
|   let rightElm = sdk.viewer._element.getElementsByClassName('YJ-custom-checkbox-right')[0]
 | ||
|   if (sliderElm) {
 | ||
|     sdk.viewer._element.removeChild(sliderElm)
 | ||
|     sdk.viewer._element.removeChild(leftElm)
 | ||
|     sdk.viewer._element.removeChild(rightElm)
 | ||
|   }
 | ||
|   if (status) {
 | ||
|     sliderElm = document.createElement('div');
 | ||
|     sliderElm.className = 'YJ-custom-slider'
 | ||
|     sliderElm.style.position = 'absolute'
 | ||
|     sliderElm.style.left = '50%'
 | ||
|     sliderElm.style.top = '0px'
 | ||
| 
 | ||
|     leftElm = document.createElement('input');
 | ||
|     leftElm.className = 'YJ-custom-checkbox-left'
 | ||
|     leftElm.type = 'checkbox'
 | ||
|     leftElm.style.position = 'absolute'
 | ||
|     leftElm.style.left = 'calc(50% - 50px)'
 | ||
|     rightElm = document.createElement('input');
 | ||
|     rightElm.className = 'YJ-custom-checkbox-right'
 | ||
|     rightElm.type = 'checkbox'
 | ||
|     rightElm.style.position = 'absolute'
 | ||
|     rightElm.style.right = 'calc(50% - 50px)'
 | ||
|     sdk.viewer._element.appendChild(leftElm)
 | ||
|     sdk.viewer._element.appendChild(rightElm)
 | ||
| 
 | ||
|     leftElm.checked = true
 | ||
|     leftElm.addEventListener('change', (e) => {
 | ||
|       if (!e.target.checked) {
 | ||
|         if (!rightElm.checked) {
 | ||
|           rightElm.checked = true
 | ||
|         }
 | ||
|       }
 | ||
|       changeEntitySplitStatus()
 | ||
|     })
 | ||
|     rightElm.addEventListener('change', (e) => {
 | ||
|       if (!e.target.checked) {
 | ||
|         if (!leftElm.checked) {
 | ||
|           leftElm.checked = true
 | ||
|         }
 | ||
|       }
 | ||
|       changeEntitySplitStatus()
 | ||
|     })
 | ||
| 
 | ||
|     sliderElm.addEventListener('mousedown', () => {
 | ||
|       document.body.addEventListener('mousemove', mousemove)
 | ||
|       sliderElm.addEventListener('mouseup', () => {
 | ||
|         document.body.removeEventListener('mousemove', mousemove)
 | ||
|       })
 | ||
|     })
 | ||
|     function mousemove(a, b) {
 | ||
|       if (sdk.viewer._element.getElementsByTagName('canvas')[0] === a.target) {
 | ||
|         sliderElm.style.left = (a.offsetX / sdk.viewer._element.scrollWidth * 100) + '%'
 | ||
|         sdk.viewer.scene.splitPosition = a.offsetX / sdk.viewer._element.scrollWidth
 | ||
|       }
 | ||
|     }
 | ||
|     sdk.viewer._element.appendChild(sliderElm)
 | ||
|     sdk.viewer.scene.splitStatus = status
 | ||
|     sdk.viewer.scene.splitPosition = 0.5
 | ||
|     changeEntitySplitStatus()
 | ||
|   }
 | ||
|   else {
 | ||
|     sdk.viewer.scene.splitPosition = 0
 | ||
|     changeEntitySplitStatus(0)
 | ||
|     sdk.viewer.scene.splitStatus = status
 | ||
|   }
 | ||
| 
 | ||
|   function changeEntitySplitStatus(v) {
 | ||
|     let value
 | ||
|     if (v === undefined || v === null) {
 | ||
|       if (leftElm.checked && rightElm.checked) {
 | ||
|         value = 0
 | ||
|       }
 | ||
|       else {
 | ||
|         if (leftElm.checked) {
 | ||
|           value = -1
 | ||
|         }
 | ||
|         if (rightElm.checked) {
 | ||
|           value = 1
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|     else {
 | ||
|       value = v
 | ||
|     }
 | ||
| 
 | ||
|     sdk.entityMap.forEach((item, key) => {
 | ||
|       if (sdk.viewer.scene.splitStatus) {
 | ||
|         if (item.entity.billboard) {
 | ||
|           item.entity.billboard.splitDirection = value
 | ||
|         }
 | ||
|         else {
 | ||
|           item.entity && (item.entity.splitDirection = value)
 | ||
|         }
 | ||
|       }
 | ||
|     })
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| function getCoordinateSystem() {
 | ||
|   return coordinateSystem
 | ||
| }
 | ||
| 
 | ||
| function setCoordinateSystem(sdk, epsg) {
 | ||
|   coordinateSystem = epsg || 'EPSG:4326'
 | ||
|   if (!sdk || !sdk.viewer || !sdk.viewer._element) {
 | ||
|     return
 | ||
|   }
 | ||
|   let infoElm = sdk.viewer._element.getElementsByClassName('cesium-info')[0]
 | ||
|   if (!_cartesian || !infoElm) {
 | ||
|     return
 | ||
|   }
 | ||
|   let tools = new Tools()
 | ||
|   let proj = sdk.proj
 | ||
|   let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
 | ||
|   if (coordinateSystem === 'EPSG:4326') {
 | ||
|     // infoElm.innerHTML = `
 | ||
|     //               <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
 | ||
|     //               <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
 | ||
|     //               <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|     //             `
 | ||
|     switch (positionType || '度') {
 | ||
|       case '度':
 | ||
|         infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
 | ||
|                   <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|         break;
 | ||
|       case '度分':
 | ||
|         infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
 | ||
|                   <span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|         break;
 | ||
|       case '度分秒':
 | ||
|         infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
 | ||
|                   <span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|         break;
 | ||
|       default:
 | ||
|         break;
 | ||
|     }
 | ||
|   }
 | ||
|   else {
 | ||
|     // let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
 | ||
|     let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', posiToCoordinate(coordinateSystem, position))
 | ||
|     infoElm.innerHTML = `
 | ||
|                   <span>x:</span><span>${Number(result.points[0].x.toFixed(6))}</span>
 | ||
|                   <span style="margin-left: 5px;">y:</span><span>${Number(result.points[0].y.toFixed(6))}</span>
 | ||
|                   <span style="margin-left: 5px;">z:</span><span>${Number(result.points[0].z.toFixed(6))}</span>
 | ||
|                 `
 | ||
|   }
 | ||
| }
 | ||
| function posiToCoordinate(coordinateSystem, position) {
 | ||
|   let type
 | ||
|   switch (coordinateSystem) {
 | ||
|     case 'EPSG:32601'://WGS84 通用横轴墨卡托投影
 | ||
|       //带号 = ⌊(经度 + 180)/6⌋ + 1
 | ||
|       var dh = Math.floor((position.lng + 180) / 6 + 1)
 | ||
| 
 | ||
|       if (position.lat > 0) {//北纬
 | ||
|         type = 32600 + dh
 | ||
|         type = 'EPSG:' + type
 | ||
|       } else {//南纬
 | ||
|         type = 32700 + dh
 | ||
|         type = 'EPSG:' + type
 | ||
|       }
 | ||
|       break;
 | ||
|     case 'EPSG:4534'://2000 坐标 3 度不带代号
 | ||
|       //N = round(经度/3)
 | ||
|       //EPSG = N - 25 + 4534
 | ||
| 
 | ||
|       var dh3y = Math.round(position.lng / 3)
 | ||
|       type = dh3y - 25 + 4534
 | ||
|       type = 'EPSG:' + type
 | ||
|       break;
 | ||
|     case 'EPSG:4513'://2000 坐标 3 度带代号
 | ||
|       //N = round(经度/3)
 | ||
|       //EPSG = N - 25 + 4513
 | ||
|       var dh3w = Math.round(position.lng / 3)
 | ||
|       type = dh3w - 25 + 4513
 | ||
|       type = 'EPSG:' + type
 | ||
|       break;
 | ||
|     case 'EPSG:4502'://2000 坐标 6 度不带代号
 | ||
|       let zoneNumber = Math.floor(position.lng / 6) + 31
 | ||
|       // 中国区域6度带带号范围为13-23
 | ||
|       if (zoneNumber < 13) zoneNumber = 13;
 | ||
|       if (zoneNumber > 23) zoneNumber = 23;
 | ||
|       type = (zoneNumber - 13) + 4502
 | ||
|       type = 'EPSG:' + type
 | ||
|       break;
 | ||
|     case 'EPSG:4491'://2000 坐标 6 度带代号
 | ||
|       //N = floor(longitude/6) + 31
 | ||
|       var dh6 = Math.floor(position.lng / 6) + 31
 | ||
|       // 中国区域6度带带号范围为13-23
 | ||
|       if (dh6 < 13) dh6 = 13;
 | ||
|       if (dh6 > 23) dh6 = 23;
 | ||
|       type = (dh6 - 13) + 4491
 | ||
|       type = 'EPSG:' + type
 | ||
|       break;
 | ||
|     default:
 | ||
|       break;
 | ||
|   }
 | ||
|   return type
 | ||
| }
 | ||
| function getDMS() {
 | ||
|   return positionType
 | ||
| }
 | ||
| function setDMS(sdk, type) {
 | ||
|   if (coordinateSystem !== 'EPSG:4326') {
 | ||
|     return
 | ||
|   }
 | ||
|   positionType = type
 | ||
|   if (!sdk || !sdk.viewer || !sdk.viewer._element) {
 | ||
|     return
 | ||
|   }
 | ||
|   let infoElm = sdk.viewer._element.getElementsByClassName('cesium-info')[0]
 | ||
|   if (!_cartesian || !infoElm) {
 | ||
|     return
 | ||
|   }
 | ||
|   let tools = new Tools()
 | ||
|   let proj = sdk.proj
 | ||
|   let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
 | ||
|   switch (type) {
 | ||
|     case '度':
 | ||
|       infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
 | ||
|                   <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|       break;
 | ||
|     case '度分':
 | ||
|       infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
 | ||
|                   <span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|       break;
 | ||
|     case '度分秒':
 | ||
|       infoElm.innerHTML = `
 | ||
|                   <span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
 | ||
|                   <span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
 | ||
|                   <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
 | ||
|                 `
 | ||
|       break;
 | ||
|     default:
 | ||
|       break;
 | ||
|   }
 | ||
|   proj.degreesToDMS(position.lng, true)
 | ||
| }
 | ||
| 
 | ||
| function cameraChanged(sdk, cb) {
 | ||
|   let tools = new Tools()
 | ||
|   //设置相机变化的监听事件
 | ||
|   let removeChanged = sdk.viewer.camera.changed.addEventListener(percentage => {
 | ||
|     cb({
 | ||
|       position: tools.cartesian3Towgs84(sdk.viewer.camera.position, sdk.viewer),
 | ||
|       orientation: {
 | ||
|         heading: sdk.viewer.camera.heading,
 | ||
|         pitch: sdk.viewer.camera.pitch,
 | ||
|         roll: sdk.viewer.camera.roll
 | ||
|       }
 | ||
|     })
 | ||
|   })
 | ||
|   return removeChanged
 | ||
| }
 | ||
| 
 | ||
| function setMaximumRequestsPerServer(v) {
 | ||
|   if (typeof v == 'number')
 | ||
|     Cesium.RequestScheduler.maximumRequestsPerServer = v
 | ||
| }
 | ||
| 
 | ||
| /* 键盘事件 */
 | ||
| function setKeyboardEventActive(sdk, status) {
 | ||
|   if (!sdk) {
 | ||
|     return
 | ||
|   }
 | ||
|   if (status) {
 | ||
|     sdk.viewer._disableKeyboardEvent = false
 | ||
|   }
 | ||
|   else {
 | ||
|     sdk.viewer._disableKeyboardEvent = true
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| function getCesiumIndexedDBMaxSize() {
 | ||
|   const baseUnit = 1024 * 1024 * 1024
 | ||
|   let size = Number(Number(localStorage.getItem('IndexedDBMaxSize')).toFixed(0))
 | ||
|   if (isNaN(size) || size < baseUnit) {
 | ||
|     size = baseUnit
 | ||
|   }
 | ||
|   return size
 | ||
| }
 | ||
| function setCesiumIndexedDBMaxSize(v) {
 | ||
|   const baseUnit = 1024 * 1024 * 1024
 | ||
|   let maxSize = Number(Number(v).toFixed(0))
 | ||
|   if (isNaN(maxSize) || maxSize < baseUnit) {
 | ||
|     maxSize = baseUnit
 | ||
|   }
 | ||
|   Cesium.ManageIndexedDB && Cesium.ManageIndexedDB.SetIndexedDBMaxSize(maxSize)
 | ||
|   localStorage.setItem('IndexedDBMaxSize', maxSize)
 | ||
| }
 | ||
| 
 | ||
| function getCesiumManageIndexexDBState() {
 | ||
|   let state = localStorage.getItem('ManageIndexexDBState')
 | ||
|   if (state === 'false') {
 | ||
|     return false
 | ||
|   }
 | ||
|   return Boolean(state)
 | ||
| }
 | ||
| function setCesiumManageIndexexDBState(v) {
 | ||
|   if (typeof v === "boolean") {
 | ||
|     Cesium.ManageIndexedDB && Cesium.ManageIndexedDB.SetManageIndexexDBState(v)
 | ||
|     localStorage.setItem('ManageIndexexDBState', v)
 | ||
|   } else {
 | ||
|     console.error("参数必须为boolean")
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| function getCesiumIndexedDBCurrentSize() {
 | ||
|   return Cesium.ManageIndexedDB && Cesium.ManageIndexedDB.GetIndexedDBCurrentSize()
 | ||
| }
 | ||
| 
 | ||
| function setActiveViewer(v) {
 | ||
|   setMultiViewportActiveViewer(v)
 | ||
|   setSplitActiveViewer(v)
 | ||
| }
 | ||
| 
 | ||
| // 设置地球透明度
 | ||
| function enablePerspective(sdk, alpha = 1) {
 | ||
|   if (!alpha && alpha != 0) {
 | ||
|     alpha = 1
 | ||
|   }
 | ||
|   sdk.viewer.scene.globe.translucency.frontFaceAlpha = alpha
 | ||
| }
 | ||
| 
 | ||
| export { getCurrentView, setDefaultView, flyTo, CameraController, CesiumContainer, setBillboardDefaultUrl, getBillboardDefaultUrl, setGroundCover, getGroundCover, getBimPickStatus, setBimPickStatus, rotateAround, closeRotateAround, closeViewFollow, FlwStatusSwitch, JwwStatusSwitch, getFlwStatus, getJwwStatus, getCoordinateSystem, setCoordinateSystem, getDMS, setDMS, cameraChanged, setMaximumRequestsPerServer, setKeyboardEventActive, getTheme, setTheme, getCesiumIndexedDBMaxSize, setCesiumIndexedDBMaxSize, getCesiumManageIndexexDBState, setCesiumManageIndexexDBState, getCesiumIndexedDBCurrentSize, setActiveViewer, enablePerspective }
 |