坐标类型

This commit is contained in:
2025-10-15 16:52:34 +08:00
parent 3e93971654
commit 073fa8702d
4 changed files with 200 additions and 52 deletions

View File

@ -2,7 +2,7 @@
* 鼠标坐标 * 鼠标坐标
*/ */
import Tools from "../../Tools"; import Tools from "../../Tools";
import { getCoordinateSystem } from "../../Global/global"; import { getCoordinateSystem, getDMS } from "../../Global/global";
import MouseEvent from '../../Event/index' import MouseEvent from '../../Event/index'
import { getSdk as get2DSdk } from '../../Global/MultiViewportMode' import { getSdk as get2DSdk } from '../../Global/MultiViewportMode'
import { getSdk as getSplitScreenSdk } from "../../Global/SplitScreen"; import { getSdk as getSplitScreenSdk } from "../../Global/SplitScreen";
@ -21,11 +21,12 @@ const MouseCoordinate = (sdk, status) => {
} }
targetSdk = sdk targetSdk = sdk
sdkD = get2DSdk().sdkD sdkD = get2DSdk().sdkD
if(!sdkD) { if (!sdkD) {
sdkD = getSplitScreenSdk().sdkD sdkD = getSplitScreenSdk().sdkD
} }
let tools = new Tools(sdk) let tools = new Tools(sdk)
let proj = sdk.proj
if (status) { if (status) {
if (event) { if (event) {
event.destroy() event.destroy()
@ -73,7 +74,7 @@ const MouseCoordinate = (sdk, status) => {
} }
let canvas = sdk.viewer._element.getElementsByTagName('canvas')[0] let canvas = sdk.viewer._element.getElementsByTagName('canvas')[0]
sdkD = get2DSdk().sdkD sdkD = get2DSdk().sdkD
if(!sdkD) { if (!sdkD) {
sdkD = getSplitScreenSdk().sdkD sdkD = getSplitScreenSdk().sdkD
} }
if (!event2 && sdkD) { if (!event2 && sdkD) {
@ -118,13 +119,27 @@ const MouseCoordinate = (sdk, status) => {
if (cartesian) { if (cartesian) {
let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer) let degrees = tools.cartesian3Towgs84(cartesian, sdk.viewer)
let coordinateSystem = getCoordinateSystem() let coordinateSystem = getCoordinateSystem()
let positionType = getDMS()
if (coordinateSystem === 'EPSG:4326') { if (coordinateSystem === 'EPSG:4326') {
position = { position = {
x: degrees.lng, x: degrees.lng,
y: degrees.lat, y: degrees.lat,
z: degrees.alt z: degrees.alt
} }
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${degrees.lng.toFixed(6)}°</p><p style='margin: 0;'>维度:${degrees.lat.toFixed(6)}°</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>` // contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${degrees.lng.toFixed(6)}°</p><p style='margin: 0;'>维度:${degrees.lat.toFixed(6)}°</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
switch (positionType || '度') {
case '度':
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${degrees.lng.toFixed(6)}°</p><p style='margin: 0;'>维度:${degrees.lat.toFixed(6)}°</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
break;
case '度分':
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${proj.degreesToDMS(degrees.lng, true)}</p><p style='margin: 0;'>维度:${proj.degreesToDMS(degrees.lat, true)}</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
break;
case '度分秒':
contentElm.innerHTML = `<div style='width: 150px;position: absolute; z-index: 777; color: #ff0000; font-size: 12px; left:${left + 20}px; top:${top + 10}px;'><p style='margin: 0;'>经度:${proj.degreesToDMS(degrees.lng, false)}</p><p style='margin: 0;'>维度:${proj.degreesToDMS(degrees.lat, false)}</p><p style='margin: 0;'>海拔:${degrees.alt.toFixed(2)} m</p></div>`
break;
default:
break;
}
} }
else { else {
let result = tools.convert([{ x: degrees.lng, y: degrees.lat, z: degrees.alt }], 'EPSG:4326', coordinateSystem) let result = tools.convert([{ x: degrees.lng, y: degrees.lat, z: degrees.alt }], 'EPSG:4326', coordinateSystem)

View File

@ -26,7 +26,12 @@ export default class Sunshine {
this.viewer = sdk.viewer this.viewer = sdk.viewer
this.options = { ...options } this.options = { ...options }
this.sdk = { ...sdk } 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.speed = options.speed || 1000
this.options.darkness = options.darkness || 0.4 this.options.darkness = options.darkness || 0.4
this.options.softShadow = options.softShadow || true this.options.softShadow = options.softShadow || true
@ -47,9 +52,16 @@ export default class Sunshine {
that.viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY that.viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY
that.viewer.shadowMap.darkness = 1.0 - that.options.darkness //阴影透明度--越大越透明 that.viewer.shadowMap.darkness = 1.0 - that.options.darkness //阴影透明度--越大越透明
const now = new Date(); // const now = new Date();
now.setHours(0, 0, 0, 0); // 设置为当天0点 // now.setHours(0, 0, 0, 0); // 设置为当天0点
that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(now); 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.clock.multiplier = that.options.speed;
that.viewer.shadowMap.softShadows = that.options.softShadow; that.viewer.shadowMap.softShadows = that.options.softShadow;
that.viewer.shadowMap.cascadesEnabled = true that.viewer.shadowMap.cascadesEnabled = true
@ -61,7 +73,7 @@ export default class Sunshine {
lightCamera.frustum.far = 10000; // 扩大远平面距离 lightCamera.frustum.far = 10000; // 扩大远平面距离
that.viewer.shadowMap.normalOffset = true; // 避免深度冲突导致的阴影闪烁 that.viewer.shadowMap.normalOffset = true; // 避免深度冲突导致的阴影闪烁
that.edit(true) // that.edit(true)
} }
get darkness() { get darkness() {
return this.options.darkness return this.options.darkness
@ -74,6 +86,27 @@ export default class Sunshine {
item.value = v 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() { get speed() {
return this.options.speed return this.options.speed
@ -85,7 +118,7 @@ export default class Sunshine {
item.value = v item.value = v
}) })
this.viewer.clock.multiplier = this.options.speed; this.viewer.clock.multiplier = this.options.speed;
this.timeLine.setSpeed(v) // this.timeLine.setSpeed(v)
} }
get softShadow() { get softShadow() {
return this.options.softShadow return this.options.softShadow
@ -115,41 +148,41 @@ export default class Sunshine {
if (state) { if (state) {
let _this = this let _this = this
this._DialogObject = await new Dialog(this.sdk, this.originalOptions, { // this._DialogObject = await new Dialog(this.sdk, this.originalOptions, {
title: '光照属性', left: '180px', top: '100px', // title: '光照属性', left: '180px', top: '100px',
// confirmCallBack: (options) => { // // confirmCallBack: (options) => {
// this.originalOptions = tools.deepCopyObj(this.options) // // this.originalOptions = tools.deepCopyObj(this.options)
// this._DialogObject.close() // // this._DialogObject.close()
// this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions) // // this.Dialog.confirmCallBack && this.Dialog.confirmCallBack(this.originalOptions)
// syncData(this.sdk, this.options.id) // // syncData(this.sdk, this.options.id)
// syncSplitData(this.sdk, this.options.id) // // syncSplitData(this.sdk, this.options.id)
// this.remove() // // this.remove()
// }, // // },
resetCallBack: () => { // resetCallBack: () => {
this.reset() // this.reset()
this.Dialog.resetCallBack && this.Dialog.resetCallBack() // this.Dialog.resetCallBack && this.Dialog.resetCallBack()
}, // },
// removeCallBack: () => { // // removeCallBack: () => {
// this.Dialog.removeCallBack && this.Dialog.removeCallBack() // // this.Dialog.removeCallBack && this.Dialog.removeCallBack()
// }, // // },
closeCallBack: () => { // closeCallBack: () => {
this.reset() // this.reset()
_this.remove() // _this.remove()
// this.entity.style = new Cesium.Cesium3DTileStyle({ // // this.entity.style = new Cesium.Cesium3DTileStyle({
// color: "color('rgba(255,255,255," + this.newData.transparency + ")')", // // color: "color('rgba(255,255,255," + this.newData.transparency + ")')",
// show: true, // // show: true,
// }); // // });
this.Dialog.closeCallBack && this.Dialog.closeCallBack() // this.Dialog.closeCallBack && this.Dialog.closeCallBack()
}, // },
showCallBack: (show) => { // showCallBack: (show) => {
this.show = show // this.show = show
this.Dialog.showCallBack && this.Dialog.showCallBack() // this.Dialog.showCallBack && this.Dialog.showCallBack()
} // }
}, true) // }, true)
this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' sun-shine-surface' // this._DialogObject._element.body.className = this._DialogObject._element.body.className + ' sun-shine-surface'
let contentElm = document.createElement('div'); // let contentElm = document.createElement('div');
contentElm.innerHTML = html() // contentElm.innerHTML = html()
this._DialogObject.contentAppChild(contentElm) // this._DialogObject.contentAppChild(contentElm)
//时间轴 //时间轴
let _that = this let _that = this
@ -159,8 +192,6 @@ export default class Sunshine {
let timeData = _that.time + " " + item let timeData = _that.time + " " + item
_that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData)); _that.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(timeData));
_that.viewer.scene.requestRender(); _that.viewer.scene.requestRender();
}) })
let jeDateObject let jeDateObject
let printDateElm = contentElm.getElementsByClassName('sunshine-date')[0] let printDateElm = contentElm.getElementsByClassName('sunshine-date')[0]
@ -228,7 +259,7 @@ export default class Sunshine {
this.viewer.clock.multiplier = 1.0 this.viewer.clock.multiplier = 1.0
this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date()); this.viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date());
this.entity = null this.entity = null
this.timeLine.clear() this.timeLine && this.timeLine.clear()
this.viewer.shadowMap.cascadesEnabled = false this.viewer.shadowMap.cascadesEnabled = false
this.viewer.shadowMap.size = 1024; this.viewer.shadowMap.size = 1024;

View File

@ -17,6 +17,7 @@ import { updateCluster } from './cluster/cluster'
import { getHost } from "../on"; import { getHost } from "../on";
let coordinateSystem = 'EPSG:4326' let coordinateSystem = 'EPSG:4326'
let positionType = '度'
let _cartesian let _cartesian
let GroundCover = true let GroundCover = true
let bimPickObject = {} let bimPickObject = {}
@ -197,14 +198,40 @@ function CesiumContainer(sdk, options) {
let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer) let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
// position.alt = height // position.alt = height
if (coordinateSystem === 'EPSG:4326') { if (coordinateSystem === 'EPSG:4326') {
infoElm.innerHTML = ` // infoElm.innerHTML = `
// <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
// <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
// <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
// `
switch (positionType || '度') {
case '度':
infoElm.innerHTML = `
<span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span> <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
<span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span> <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span> <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
` `
break;
case '度分':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
case '度分秒':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
default:
break;
}
} }
else { else {
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem) let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
console.log(result, 'result12');
infoElm.innerHTML = ` infoElm.innerHTML = `
<span>x</span><span>${Number(result.points[0].x.toFixed(6))}</span> <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;">y</span><span>${Number(result.points[0].y.toFixed(6))}</span>
@ -723,7 +750,6 @@ function splitScreen(sdk, status) {
item.entity && (item.entity.splitDirection = value) item.entity && (item.entity.splitDirection = value)
} }
} }
console.log()
}) })
} }
} }
@ -745,14 +771,40 @@ function setCoordinateSystem(sdk, epsg) {
let proj = sdk.proj let proj = sdk.proj
let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer) let position = tools.cartesian3Towgs84(_cartesian, sdk.viewer)
if (coordinateSystem === 'EPSG:4326') { if (coordinateSystem === 'EPSG:4326') {
infoElm.innerHTML = ` // infoElm.innerHTML = `
// <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
// <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
// <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
// `
switch (positionType || '度') {
case '度':
infoElm.innerHTML = `
<span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span> <span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
<span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span> <span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span> <span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
` `
break;
case '度分':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
case '度分秒':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
default:
break;
}
} }
else { else {
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem) let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
console.log(result, 'result')
infoElm.innerHTML = ` infoElm.innerHTML = `
<span>x</span><span>${Number(result.points[0].x.toFixed(6))}</span> <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;">y</span><span>${Number(result.points[0].y.toFixed(6))}</span>
@ -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 = `
<span>经度:</span><span>${Number(position.lng.toFixed(6))}° </span>
<span>纬度:</span><span>${Number(position.lat.toFixed(6))}° </span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
case '度分':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, true)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, true)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
case '度分秒':
infoElm.innerHTML = `
<span>经度:</span><span>${proj.degreesToDMS(position.lng, false)}</span>
<span>纬度:</span><span>${proj.degreesToDMS(position.lat, false)}</span>
<span>海拔高度:</span><span>${Number(position.alt.toFixed(2))}米</span>
`
break;
default:
break;
}
proj.degreesToDMS(position.lng, true)
}
function cameraChanged(sdk, cb) { function cameraChanged(sdk, cb) {
let tools = new Tools() let tools = new Tools()
//设置相机变化的监听事件 //设置相机变化的监听事件
@ -846,4 +944,4 @@ function enablePerspective(sdk, alpha = 1) {
sdk.viewer.scene.globe.translucency.frontFaceAlpha = alpha 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 }

View File

@ -17,6 +17,8 @@ import {
rotateAround, rotateAround,
getCoordinateSystem, getCoordinateSystem,
setCoordinateSystem, setCoordinateSystem,
getDMS,
setDMS,
cameraChanged, cameraChanged,
setMaximumRequestsPerServer, setMaximumRequestsPerServer,
setKeyboardEventActive, setKeyboardEventActive,
@ -324,6 +326,8 @@ if (!window.YJ) {
rotateAround, rotateAround,
getCoordinateSystem, getCoordinateSystem,
setCoordinateSystem, setCoordinateSystem,
getDMS,
setDMS,
DTH, DTH,
cameraChanged, cameraChanged,
setMaximumRequestsPerServer, setMaximumRequestsPerServer,