/**
* @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 = `
经度:-
纬度:-
海拔高度:-
`
}
else {
infoElm.innerHTML = `
x:-
y:-
z:-
`
}
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 = `
经度:${Number(position.lng.toFixed(6))}°
纬度:${Number(position.lat.toFixed(6))}°
海拔高度:${Number(position.alt.toFixed(2))}米
`
}
else {
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
infoElm.innerHTML = `
x:${Number(result.points[0].x.toFixed(6))}
y:${Number(result.points[0].y.toFixed(6))}
z:${Number(result.points[0].z.toFixed(6))}
`
}
}
}
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 = `
经度:${Number(position.lng.toFixed(6))}°
纬度:${Number(position.lat.toFixed(6))}°
海拔高度:${Number(position.alt.toFixed(2))}米
`
}
else {
let result = proj.convert([{ x: position.lng, y: position.lat, z: position.alt }], 'EPSG:4326', coordinateSystem)
infoElm.innerHTML = `
x:${Number(result.points[0].x.toFixed(6))}
y:${Number(result.points[0].y.toFixed(6))}
z:${Number(result.points[0].z.toFixed(6))}
`
}
}
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 }