| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  | /** | 
					
						
							|  |  |  |  |  * @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' | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  | let positionType = '度' | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  | let _cartesian | 
					
						
							| 
									
										
										
										
											2025-09-12 19:18:07 +08:00
										 |  |  |  | let GroundCover = true | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  | 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') { | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  |               // 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 = `
 | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |                   <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> | 
					
						
							|  |  |  |  |                 `
 | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  |                   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; | 
					
						
							|  |  |  |  |               } | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |             else { | 
					
						
							| 
									
										
										
										
											2025-10-27 14:35:43 +08:00
										 |  |  |  |               // 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 = `
 | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |                   <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> | 
					
						
							|  |  |  |  |                 `
 | 
					
						
							| 
									
										
										
										
											2025-10-27 14:35:43 +08:00
										 |  |  |  |               } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         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') { | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  |     // 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 = `
 | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |                   <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> | 
					
						
							|  |  |  |  |                 `
 | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  |         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; | 
					
						
							|  |  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |   } | 
					
						
							|  |  |  |  |   else { | 
					
						
							| 
									
										
										
										
											2025-10-27 14:35:43 +08:00
										 |  |  |  |     // 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)) | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  |     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> | 
					
						
							|  |  |  |  |                 `
 | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-10-27 14:35:43 +08:00
										 |  |  |  | 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 | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  | 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) | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 16:17:11 +08:00
										 |  |  |  | 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 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-15 16:52:34 +08:00
										 |  |  |  | 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 } |