init
This commit is contained in:
		
							
								
								
									
										849
									
								
								src/Global/global.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										849
									
								
								src/Global/global.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,849 @@ | ||||
| /** | ||||
|  * @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 _cartesian | ||||
| let GroundCover = false | ||||
| 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> | ||||
|                 ` | ||||
|             } | ||||
|             else { | ||||
|               let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem) | ||||
|               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) | ||||
|         } | ||||
|       } | ||||
|       console.log() | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  | ||||
| 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> | ||||
|                 ` | ||||
|   } | ||||
|   else { | ||||
|     let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem) | ||||
|     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 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, cameraChanged, setMaximumRequestsPerServer, setKeyboardEventActive, getTheme, setTheme, getCesiumIndexedDBMaxSize, setCesiumIndexedDBMaxSize, getCesiumManageIndexexDBState, setCesiumManageIndexexDBState, getCesiumIndexedDBCurrentSize, setActiveViewer, enablePerspective } | ||||
		Reference in New Issue
	
	Block a user