Files
sdk4.0/src/Global/global.js
2025-07-11 17:50:52 +08:00

850 lines
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @name: global
* @author: Administrator
* @date: 2023-12-01 14:15
* @descriptionglobal
* @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 }