From 073fa8702db49b7a71d86d948e7a5349c12fbfe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=A4=A7=E8=83=86?= <1101282782@qq.com> Date: Wed, 15 Oct 2025 16:52:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9D=90=E6=A0=87=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Global/MouseCoordinate/index.js | 23 +++++- src/Global/efflect/Sunshine/index.js | 119 +++++++++++++++++---------- src/Global/global.js | 106 +++++++++++++++++++++++- src/In/index.js | 4 + 4 files changed, 200 insertions(+), 52 deletions(-) diff --git a/src/Global/MouseCoordinate/index.js b/src/Global/MouseCoordinate/index.js index 147f96a..d1fa1dd 100644 --- a/src/Global/MouseCoordinate/index.js +++ b/src/Global/MouseCoordinate/index.js @@ -2,7 +2,7 @@ * 鼠标坐标 */ import Tools from "../../Tools"; -import { getCoordinateSystem } from "../../Global/global"; +import { getCoordinateSystem, getDMS } from "../../Global/global"; import MouseEvent from '../../Event/index' import { getSdk as get2DSdk } from '../../Global/MultiViewportMode' import { getSdk as getSplitScreenSdk } from "../../Global/SplitScreen"; @@ -21,11 +21,12 @@ const MouseCoordinate = (sdk, status) => { } targetSdk = sdk sdkD = get2DSdk().sdkD - if(!sdkD) { + if (!sdkD) { sdkD = getSplitScreenSdk().sdkD } let tools = new Tools(sdk) + let proj = sdk.proj if (status) { if (event) { event.destroy() @@ -73,7 +74,7 @@ const MouseCoordinate = (sdk, status) => { } let canvas = sdk.viewer._element.getElementsByTagName('canvas')[0] sdkD = get2DSdk().sdkD - if(!sdkD) { + if (!sdkD) { sdkD = getSplitScreenSdk().sdkD } if (!event2 && sdkD) { @@ -118,13 +119,27 @@ const MouseCoordinate = (sdk, status) => { if (cartesian) { let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer) let coordinateSystem = getCoordinateSystem() + let positionType = getDMS() if (coordinateSystem === 'EPSG:4326') { position = { x: degrees.lng, y: degrees.lat, z: degrees.alt } - contentElm.innerHTML = `

经度:${degrees.lng.toFixed(6)}°

维度:${degrees.lat.toFixed(6)}°

海拔:${degrees.alt.toFixed(2)} m

` + // contentElm.innerHTML = `

经度:${degrees.lng.toFixed(6)}°

维度:${degrees.lat.toFixed(6)}°

海拔:${degrees.alt.toFixed(2)} m

` + switch (positionType || '度') { + case '度': + contentElm.innerHTML = `

经度:${degrees.lng.toFixed(6)}°

维度:${degrees.lat.toFixed(6)}°

海拔:${degrees.alt.toFixed(2)} m

` + break; + case '度分': + contentElm.innerHTML = `

经度:${proj.degreesToDMS(degrees.lng, true)}

维度:${proj.degreesToDMS(degrees.lat, true)}

海拔:${degrees.alt.toFixed(2)} m

` + break; + case '度分秒': + contentElm.innerHTML = `

经度:${proj.degreesToDMS(degrees.lng, false)}

维度:${proj.degreesToDMS(degrees.lat, false)}

海拔:${degrees.alt.toFixed(2)} m

` + break; + default: + break; + } } else { let result = tools.convert([{ x: degrees.lng, y: degrees.lat, z: degrees.alt }], 'EPSG:4326', coordinateSystem) diff --git a/src/Global/efflect/Sunshine/index.js b/src/Global/efflect/Sunshine/index.js index 4a921a1..df260a1 100644 --- a/src/Global/efflect/Sunshine/index.js +++ b/src/Global/efflect/Sunshine/index.js @@ -26,7 +26,12 @@ export default class Sunshine { this.viewer = sdk.viewer this.options = { ...options } this.sdk = { ...sdk } - this.options.time = options.time || new Date() + + + const now = new Date(); + now.setHours(0, 0, 0, 0); // 设置为当天0点 + this.options.time = options.time + this.options.hour = options.hour this.options.speed = options.speed || 1000 this.options.darkness = options.darkness || 0.4 this.options.softShadow = options.softShadow || true @@ -47,9 +52,16 @@ export default class Sunshine { that.viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY that.viewer.shadowMap.darkness = 1.0 - that.options.darkness //阴影透明度--越大越透明 - const now = new Date(); - now.setHours(0, 0, 0, 0); // 设置为当天0点 - that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(now); + // const now = new Date(); + // now.setHours(0, 0, 0, 0); // 设置为当天0点 + let date + if (that.options.time && that.options.hour) { + date = new Date(that.options.time + " " + that.options.hour) + } else { + date = new Date(); + date.setHours(0, 0, 0, 0); // 设置为当天0点 + } + that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(date); that.viewer.clock.multiplier = that.options.speed; that.viewer.shadowMap.softShadows = that.options.softShadow; that.viewer.shadowMap.cascadesEnabled = true @@ -61,7 +73,7 @@ export default class Sunshine { lightCamera.frustum.far = 10000; // 扩大远平面距离 that.viewer.shadowMap.normalOffset = true; // 避免深度冲突导致的阴影闪烁 - that.edit(true) + // that.edit(true) } get darkness() { return this.options.darkness @@ -74,6 +86,27 @@ export default class Sunshine { item.value = v }) } + get time() { + return this.options.time + } + set time(v) { + this.options.time = v + const now = new Date(); + let timeData = now.setHours(0, 0, 0, 0); // 设置为当天0点 + this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData)); + + // _that.timeLine.updateTime(timeData) + } + set timeBar(v) { + let timeData = this.time + " " + v + this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData)); + this.viewer.scene.requestRender(); + } + set realTime(v) { + const now = new Date(); + this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(now); + } + get speed() { return this.options.speed @@ -85,7 +118,7 @@ export default class Sunshine { item.value = v }) this.viewer.clock.multiplier = this.options.speed; - this.timeLine.setSpeed(v) + // this.timeLine.setSpeed(v) } get softShadow() { return this.options.softShadow @@ -115,41 +148,41 @@ export default class Sunshine { if (state) { let _this = this - this._DialogObject = await new Dialog(this.sdk, this.originalOptions, { - title: '光照属性', left: '180px', top: '100px', - // confirmCallBack: (options) => { - // this.originalOptions = tools.deepCopyObj(this.options) - // this._DialogObject.close() - // this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) - // syncData(this.sdk, this.options.id) - // syncSplitData(this.sdk, this.options.id) - // this.remove() - // }, - resetCallBack: () => { - this.reset() - this.Dialog.resetCallBack && this.Dialog.resetCallBack() - }, - // removeCallBack: () => { - // this.Dialog.removeCallBack && this.Dialog.removeCallBack() - // }, - closeCallBack: () => { - this.reset() - _this.remove() - // this.entity.style = new Cesium.Cesium3DTileStyle({ - // color: "color('rgba(255,255,255," + this.newData.transparency + ")')", - // show: true, - // }); - this.Dialog.closeCallBack && this.Dialog.closeCallBack() - }, - showCallBack: (show) => { - this.show = show - this.Dialog.showCallBack && this.Dialog.showCallBack() - } - }, true) - this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' sun-shine-surface' - let contentElm = document.createElement('div'); - contentElm.innerHTML = html() - this._DialogObject.contentAppChild(contentElm) + // this._DialogObject = await new Dialog(this.sdk, this.originalOptions, { + // title: '光照属性', left: '180px', top: '100px', + // // confirmCallBack: (options) => { + // // this.originalOptions = tools.deepCopyObj(this.options) + // // this._DialogObject.close() + // // this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) + // // syncData(this.sdk, this.options.id) + // // syncSplitData(this.sdk, this.options.id) + // // this.remove() + // // }, + // resetCallBack: () => { + // this.reset() + // this.Dialog.resetCallBack && this.Dialog.resetCallBack() + // }, + // // removeCallBack: () => { + // // this.Dialog.removeCallBack && this.Dialog.removeCallBack() + // // }, + // closeCallBack: () => { + // this.reset() + // _this.remove() + // // this.entity.style = new Cesium.Cesium3DTileStyle({ + // // color: "color('rgba(255,255,255," + this.newData.transparency + ")')", + // // show: true, + // // }); + // this.Dialog.closeCallBack && this.Dialog.closeCallBack() + // }, + // showCallBack: (show) => { + // this.show = show + // this.Dialog.showCallBack && this.Dialog.showCallBack() + // } + // }, true) + // this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' sun-shine-surface' + // let contentElm = document.createElement('div'); + // contentElm.innerHTML = html() + // this._DialogObject.contentAppChild(contentElm) //时间轴 let _that = this @@ -159,8 +192,6 @@ export default class Sunshine { let timeData = _that.time + " " + item _that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData)); _that.viewer.scene.requestRender(); - - }) let jeDateObject let printDateElm = contentElm.getElementsByClassName('sunshine-date')[0] @@ -228,7 +259,7 @@ export default class Sunshine { this.viewer.clock.multiplier = 1.0 this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date()); this.entity = null - this.timeLine.clear() + this.timeLine && this.timeLine.clear() this.viewer.shadowMap.cascadesEnabled = false this.viewer.shadowMap.size = 1024; diff --git a/src/Global/global.js b/src/Global/global.js index 9cbaa08..630f0d0 100644 --- a/src/Global/global.js +++ b/src/Global/global.js @@ -17,6 +17,7 @@ import { updateCluster } from './cluster/cluster' import { getHost } from "../on"; let coordinateSystem = 'EPSG:4326' +let positionType = '度' let _cartesian let GroundCover = true let bimPickObject = {} @@ -197,14 +198,40 @@ function CesiumContainer(sdk, options) { let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer) // position.alt = height if (coordinateSystem === 'EPSG:4326') { - infoElm.innerHTML = ` + // infoElm.innerHTML = ` + // 经度:${Number(position.lng.toFixed(6))}° + // 纬度:${Number(position.lat.toFixed(6))}° + // 海拔高度:${Number(position.alt.toFixed(2))}米 + // ` + switch (positionType || '度') { + case '度': + infoElm.innerHTML = ` 经度:${Number(position.lng.toFixed(6))}° 纬度:${Number(position.lat.toFixed(6))}° 海拔高度:${Number(position.alt.toFixed(2))}米 ` + break; + case '度分': + infoElm.innerHTML = ` + 经度:${proj.degreesToDMS(position.lng, true)} + 纬度:${proj.degreesToDMS(position.lat, true)} + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + case '度分秒': + infoElm.innerHTML = ` + 经度:${proj.degreesToDMS(position.lng, false)} + 纬度:${proj.degreesToDMS(position.lat, false)} + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + default: + break; + } } else { let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem) + console.log(result, 'result12'); infoElm.innerHTML = ` x:${Number(result.points[0].x.toFixed(6))} y:${Number(result.points[0].y.toFixed(6))} @@ -723,7 +750,6 @@ function splitScreen(sdk, status) { item.entity && (item.entity.splitDirection = value) } } - console.log() }) } } @@ -745,14 +771,40 @@ function setCoordinateSystem(sdk, epsg) { let proj = sdk.proj let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer) if (coordinateSystem === 'EPSG:4326') { - infoElm.innerHTML = ` + // infoElm.innerHTML = ` + // 经度:${Number(position.lng.toFixed(6))}° + // 纬度:${Number(position.lat.toFixed(6))}° + // 海拔高度:${Number(position.alt.toFixed(2))}米 + // ` + switch (positionType || '度') { + case '度': + infoElm.innerHTML = ` 经度:${Number(position.lng.toFixed(6))}° 纬度:${Number(position.lat.toFixed(6))}° 海拔高度:${Number(position.alt.toFixed(2))}米 ` + break; + case '度分': + infoElm.innerHTML = ` + 经度:${proj.degreesToDMS(position.lng, true)} + 纬度:${proj.degreesToDMS(position.lat, true)} + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + case '度分秒': + infoElm.innerHTML = ` + 经度:${proj.degreesToDMS(position.lng, false)} + 纬度:${proj.degreesToDMS(position.lat, false)} + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + default: + break; + } } else { let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem) + console.log(result, 'result') infoElm.innerHTML = ` x:${Number(result.points[0].x.toFixed(6))} y:${Number(result.points[0].y.toFixed(6))} @@ -761,6 +813,52 @@ function setCoordinateSystem(sdk, epsg) { } } +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 = ` + 经度:${Number(position.lng.toFixed(6))}° + 纬度:${Number(position.lat.toFixed(6))}° + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + case '度分': + infoElm.innerHTML = ` + 经度:${proj.degreesToDMS(position.lng, true)} + 纬度:${proj.degreesToDMS(position.lat, true)} + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + case '度分秒': + infoElm.innerHTML = ` + 经度:${proj.degreesToDMS(position.lng, false)} + 纬度:${proj.degreesToDMS(position.lat, false)} + 海拔高度:${Number(position.alt.toFixed(2))}米 + ` + break; + default: + break; + } + proj.degreesToDMS(position.lng, true) +} + function cameraChanged(sdk, cb) { let tools = new Tools() //设置相机变化的监听事件 @@ -846,4 +944,4 @@ function enablePerspective(sdk, 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 } +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 } diff --git a/src/In/index.js b/src/In/index.js index f9a78fa..2caa374 100644 --- a/src/In/index.js +++ b/src/In/index.js @@ -17,6 +17,8 @@ import { rotateAround, getCoordinateSystem, setCoordinateSystem, + getDMS, + setDMS, cameraChanged, setMaximumRequestsPerServer, setKeyboardEventActive, @@ -324,6 +326,8 @@ if (!window.YJ) { rotateAround, getCoordinateSystem, setCoordinateSystem, + getDMS, + setDMS, DTH, cameraChanged, setMaximumRequestsPerServer,