代码迁移
This commit is contained in:
825
src/Global/global.js
Normal file
825
src/Global/global.js
Normal file
@ -0,0 +1,825 @@
|
||||
/**
|
||||
* @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'
|
||||
|
||||
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()
|
||||
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
|
||||
event.mouse_move((movement, cartesian) => {
|
||||
_cartesian = cartesian
|
||||
update()
|
||||
})
|
||||
function update() {
|
||||
if (!_cartesian) {
|
||||
return
|
||||
}
|
||||
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>
|
||||
`
|
||||
}
|
||||
}
|
||||
}
|
||||
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'
|
||||
}
|
||||
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