将卫星图片改为3D模型
After Width: | Height: | Size: 16 MiB |
After Width: | Height: | Size: 12 MiB |
After Width: | Height: | Size: 14 MiB |
After Width: | Height: | Size: 22 MiB |
After Width: | Height: | Size: 22 MiB |
After Width: | Height: | Size: 7.3 MiB |
After Width: | Height: | Size: 14 MiB |
After Width: | Height: | Size: 14 MiB |
After Width: | Height: | Size: 16 MiB |
After Width: | Height: | Size: 9.4 MiB |
|
@ -1,42 +1,69 @@
|
|||
import { app, globalShortcut, BrowserWindow, dialog } from 'electron'
|
||||
import { app, globalShortcut, BrowserWindow, ipcMain, dialog } from 'electron'
|
||||
import { join } from 'path'
|
||||
|
||||
const child_process = require('child_process')
|
||||
const crypto = require('crypto')
|
||||
|
||||
function queryKeys(keyPath: string, value: string) {
|
||||
function queryPass(passPath: string, passValue: string) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
try {
|
||||
child_process.exec(`reg query ${keyPath} /v ${value}`, (error: Error, stdout: string, stderr: string) => {
|
||||
child_process.exec(`reg query ${passPath} /v ${passValue}`, (error: Error, stdout: string, stderr: string) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
reject(error)
|
||||
return
|
||||
}
|
||||
resolve({stdout, stderr});
|
||||
resolve({stdout, stderr})
|
||||
});
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
reject(error)
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
const keyPath = 'HKEY_CURRENT_USER\\SOFTWARE\\HwaSmart'
|
||||
const value = 'global-navigation-satellite-system'
|
||||
function queryKey(keyPath: string, keyValue: string) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
try {
|
||||
child_process.exec(`reg query ${keyPath} /v ${keyValue}`, (error: Error, stdout: string, stderr: string) => {
|
||||
if (error) {
|
||||
reject(error)
|
||||
return
|
||||
}
|
||||
resolve({stdout, stderr})
|
||||
})
|
||||
} catch (error) {
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function cryptMD5(GUID: string) {
|
||||
let md5 = crypto.createHash('md5')
|
||||
let ciphertext = md5.update(GUID).digest('hex')
|
||||
return ciphertext.slice(0,8)+'-'+ciphertext.slice(8,12)+'-'+ciphertext.slice(12,16)+'-'+ciphertext.slice(16,20)+'-'+ciphertext.slice(20,32)
|
||||
}
|
||||
|
||||
const passPath = 'HKEY_CURRENT_USER\\SOFTWARE\\HwaSmart'
|
||||
const passValue = 'BDAuthorization'
|
||||
const keyPath = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography'
|
||||
const keyValue = 'MachineGuid'
|
||||
|
||||
async function checkLaunchEnv() {
|
||||
try {
|
||||
const result: any = await queryKeys(keyPath, value);
|
||||
// console.log('stdout', result.stdout);
|
||||
const passResult: any = await queryPass(passPath, passValue)
|
||||
const keyResult: any = await queryKey(keyPath, keyValue)
|
||||
if(cryptMD5(keyResult.stdout.slice(83,119) + 'BD') == passResult.stdout.slice(72,108)){
|
||||
return true
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
// 成功
|
||||
// 查询到 有这个app启动项
|
||||
} catch (error) {
|
||||
// 没有查询到该app启动项目
|
||||
// console.log('error :>> ', error);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function createWindow() {
|
||||
const win = new BrowserWindow({
|
||||
fullscreen: true,
|
||||
|
@ -53,13 +80,33 @@ function createWindow() {
|
|||
} else {
|
||||
win.loadFile('dist/render/index.html')
|
||||
}
|
||||
|
||||
ipcMain.on('CLOSE', (event) => {
|
||||
const res = dialog.showMessageBox({
|
||||
type: 'warning',
|
||||
title: '警告',
|
||||
message: '确定要关闭软件吗?',
|
||||
detail: '关闭软件',
|
||||
cancelId: 1, // 按esc默认点击索引按钮
|
||||
defaultId: 0, // 默认高亮的按钮下标
|
||||
buttons: ['确认', '取消'], // 按钮按索引从右往左排序
|
||||
})
|
||||
|
||||
res.then((data)=>{
|
||||
if(data.response == 0){
|
||||
win.close()
|
||||
}else{
|
||||
console.log('not close software')
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
async function main() {
|
||||
// 异步代码
|
||||
const checkReault: any = await checkLaunchEnv()
|
||||
console.log('env right:', checkReault);
|
||||
console.log('env right:', checkReault)
|
||||
|
||||
// 异步代码执行完毕后执行的代码
|
||||
if (checkReault) {
|
||||
|
@ -88,4 +135,4 @@ async function main() {
|
|||
}
|
||||
}
|
||||
|
||||
main();
|
||||
main()
|
||||
|
|
|
@ -1,42 +1,382 @@
|
|||
<template>
|
||||
<vc-viewer class="vc-viewer" :animation="true" :showCredit="false" :shouldAnimate="true" :sceneModePicker="true" @ready="onViewerReady">
|
||||
<vc-viewer
|
||||
class="vc-viewer"
|
||||
:animation="true"
|
||||
:showCredit="false"
|
||||
:shouldAnimate="true"
|
||||
:sceneModePicker="true"
|
||||
@ready="onViewerReady"
|
||||
>
|
||||
<vc-layer-imagery>
|
||||
<vc-provider-imagery-singletile :url="earth" />
|
||||
</vc-layer-imagery>
|
||||
|
||||
<vc-navigation :offset="[10, 40]" :position="'top-left'" :printOpts="false" :locationOpts="false" :otherOpts="false" />
|
||||
<vc-navigation
|
||||
:offset="[10, 40]"
|
||||
:position="'top-left'"
|
||||
:printOpts="false"
|
||||
:locationOpts="false"
|
||||
:otherOpts="false"
|
||||
/>
|
||||
<SatelliteSystemView />
|
||||
</vc-viewer>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import earth from '../assets/earth.jpg'
|
||||
import SatelliteSystemView from './SatelliteSystemView.vue';
|
||||
import { defineAsyncComponent, ref, watch } from "vue";
|
||||
import earth from "../assets/earth.jpg";
|
||||
|
||||
// 由于组件 SatelliteSystemView 加载的数据量较大,会影响到卫星模型加载的速度,因此使用 defineAsyncComponent 来延迟加载组件 SatelliteSystemView
|
||||
const SatelliteSystemView = defineAsyncComponent(
|
||||
() => import("./SatelliteSystemView.vue")
|
||||
);
|
||||
|
||||
// 初始化视图参数
|
||||
const onViewerReady = ({ viewer }) => {
|
||||
viewer.scene.debugShowFramesPerSecond = false
|
||||
window.viewer = viewer;
|
||||
|
||||
const scene = viewer.scene;
|
||||
const camera = viewer.camera;
|
||||
|
||||
// 显示FPS的控件,便于优化
|
||||
scene.debugShowFramesPerSecond = true;
|
||||
|
||||
// 设置单一光源,解决模型光照受时间影响问题
|
||||
// DirectionalLight 表示 从无限远的地方向单一方向发射的光。
|
||||
scene.light = new Cesium.DirectionalLight({
|
||||
direction: new Cesium.Cartesian3(0.354925, -0.890918, -0.283358),
|
||||
});
|
||||
|
||||
// 引入常用卫星模型
|
||||
// 设置 minimumPixelSize 和 maximumPixelSize 都为 0 , show 为 false,使常用卫星模型无法被观察到
|
||||
// 此处利用了缓存机制,提前加载模型,之后在子组件中再次加载并引用时速度会加快
|
||||
// 模型对象构造方法
|
||||
class Model {
|
||||
constructor(modelUrl) {
|
||||
const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
|
||||
Cesium.Cartesian3.fromDegrees(108.55, 34.32, 0.0)
|
||||
);
|
||||
this.model = viewer.scene.primitives.add(
|
||||
Cesium.Model.fromGltf({
|
||||
url: `./models/geo/${modelUrl}.glb`,
|
||||
modelMatrix: modelMatrix,
|
||||
minimumPixelSize: 0,
|
||||
maximumPixelSize: 0,
|
||||
show: false,
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const GEOModel = new Model("BeidouGEO");
|
||||
const MEOModel = new Model("BeidouMEO");
|
||||
const IGSOModel = new Model("BeidouIGSO");
|
||||
const GPSIIFModel = new Model("GPSII-F");
|
||||
const GPSIIRModel = new Model("GPSII-R");
|
||||
const GPSIIIAModel = new Model("GPSIII-A");
|
||||
const GPSIIRMModel = new Model("GPSIIR-M");
|
||||
const GLONASSGLOKModel = new Model("GLONASSGLO-K");
|
||||
const GLONASSGLOMModel = new Model("GLONASSGLO-M");
|
||||
const GalileoMEOModel = new Model("GalileoMEO");
|
||||
|
||||
class CustomPrimitive {
|
||||
constructor(options) {
|
||||
this.show = options.show;
|
||||
this._primitives = options._primitives;
|
||||
}
|
||||
update(frameState) {
|
||||
if (!this.show) {
|
||||
return;
|
||||
}
|
||||
for (var t = this._primitives, i = 0; i < t.length; ++i) {
|
||||
t[i].update(frameState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CustomPolyline {
|
||||
constructor(options) {
|
||||
this.show = options.show;
|
||||
this._polylines = options._polylines;
|
||||
this.modelMatrix = options.modelMatrix;
|
||||
this._batchTable = options._batchTable;
|
||||
this._createBatchTable = options._createBatchTable;
|
||||
this._createVertexArray = options._createVertexArray;
|
||||
this._external = options._external;
|
||||
this._highlightColor = options._highlightColor;
|
||||
this._mode = options._mode;
|
||||
this._modelMatrix = options._modelMatrix;
|
||||
this._opaqueRS = options._opaqueRS;
|
||||
this._polylineBuckets = options._polylineBuckets;
|
||||
this._polylinesRemoved = options._polylinesRemoved;
|
||||
this._polylinesToUpdate = options._polylinesToUpdate;
|
||||
this._polylinesUpdated = options._polylinesUpdated;
|
||||
this._positionBuffer = options._positionBuffer;
|
||||
this._positionBufferUsage = options._positionBufferUsage;
|
||||
this._propertiesChanged = options._propertiesChanged;
|
||||
this._texCoordExpandAndBatchIndexBuffer =
|
||||
options._texCoordExpandAndBatchIndexBuffer;
|
||||
this._translucentRS = options._translucentRS;
|
||||
this._uniformMap = options._uniformMap;
|
||||
this._useHighlightColor = options._useHighlightColor;
|
||||
this._vertexArrays = options._vertexArrays;
|
||||
this.mymark = true;
|
||||
this._colorCommands = [];
|
||||
options._colorCommands.forEach((element) => {
|
||||
let adrawcommand = new Cesium.DrawCommand(element);
|
||||
this._colorCommands.push(adrawcommand);
|
||||
});
|
||||
}
|
||||
|
||||
update(frameState) {
|
||||
if (!this.show) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if(this._mode !== viewer.scene._mode){
|
||||
// this._colorCommands.forEach(item => {
|
||||
// if(viewer.scene._mode == 0){
|
||||
// item.boundingVolume = this._vertexArrays[0].buckets[0].bucket.polylines[0]._boundingVolume
|
||||
// }
|
||||
// else if(viewer.scene._mode == 1){
|
||||
// item.boundingVolume = this._vertexArrays[0].buckets[0].bucket.polylines[0]._boundingVolume2D
|
||||
// }
|
||||
// else if(viewer.scene._mode == 3){
|
||||
// item.boundingVolume = this._vertexArrays[0].buckets[0].bucket.polylines[0]._boundingVolumeWC
|
||||
// }
|
||||
// })
|
||||
// this._mode = viewer.scene._mode
|
||||
// }
|
||||
|
||||
this._colorCommands.forEach((item) => {
|
||||
frameState.commandList.push(item);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 限定缩放大小
|
||||
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 10000000 // 相机高度的最小值设定为 10000000 米
|
||||
scene.screenSpaceCameraController.minimumZoomDistance = 10000000; // 相机高度的最小值设定为 10000000 米
|
||||
scene.screenSpaceCameraController.maximumZoomDistance = 200000000; // 相机高度的最大值设定为 200000000 米
|
||||
|
||||
const clickStatus = ref();
|
||||
const clickName = ref("cesium-sceneModePicker-button3D");
|
||||
const infoBox = viewer.infoBox.frame;
|
||||
|
||||
let initialPosition = "";
|
||||
let initialDirection = "";
|
||||
|
||||
// 修改infobox的样式
|
||||
const infoBox = viewer.infoBox.frame;
|
||||
infoBox.setAttribute('sandbox', 'allow-same-origin allow-scripts allow-popups allow-forms')
|
||||
infoBox.setAttribute('src', '') //必须设置src为空 否则不会生效
|
||||
infoBox.addEventListener('load', function () {
|
||||
const infoBoxDescriptionElement = infoBox.contentWindow.document.getElementsByClassName('cesium-infoBox-description')[0]
|
||||
infoBoxDescriptionElement.style.fontSize = 'larger'
|
||||
infoBoxDescriptionElement.style.paddingLeft = '20px'
|
||||
infoBoxDescriptionElement.style.paddingRight = '20px'
|
||||
})
|
||||
}
|
||||
infoBox.setAttribute(
|
||||
"sandbox",
|
||||
"allow-same-origin allow-scripts allow-popups allow-forms"
|
||||
);
|
||||
infoBox.setAttribute("src", ""); // 必须设置src为空 否则不会生效
|
||||
|
||||
infoBox.addEventListener("load", function () {
|
||||
clickStatus.value = JSON.stringify(camera.position);
|
||||
viewer.infoBox.container
|
||||
.getElementsByClassName("cesium-infoBox-camera")[0]
|
||||
.addEventListener("click", () => {
|
||||
// 完成当前相机飞行并立即将相机移动到最终目的地。
|
||||
camera.completeFlight();
|
||||
// 在相机停止移动时再进行操作,防止相机位置的抖动
|
||||
let removeChanged = camera.moveEnd.addEventListener(() => {
|
||||
clickStatus.value = JSON.stringify(camera.position);
|
||||
// 调整相机到初始位置后移除监听事件
|
||||
removeChanged();
|
||||
});
|
||||
});
|
||||
|
||||
const infoBoxDescriptionElement = infoBox.contentWindow.document.getElementsByClassName(
|
||||
"cesium-infoBox-description"
|
||||
)[0];
|
||||
infoBoxDescriptionElement.style.fontSize = "larger";
|
||||
infoBoxDescriptionElement.style.paddingLeft = "20px";
|
||||
infoBoxDescriptionElement.style.paddingRight = "20px";
|
||||
infoBoxDescriptionElement.style.paddingBottom = "10px";
|
||||
|
||||
// 关闭按钮的样式
|
||||
const InfoBoxClose = viewer.infoBox.container.getElementsByClassName(
|
||||
"cesium-infoBox-close"
|
||||
)[0];
|
||||
InfoBoxClose.style.padding = 0;
|
||||
InfoBoxClose.style.width = "30px";
|
||||
InfoBoxClose.style.height = "30px";
|
||||
InfoBoxClose.style.position = "absolute";
|
||||
InfoBoxClose.style.top = 0;
|
||||
InfoBoxClose.style.left = "30px";
|
||||
InfoBoxClose.style.zIndex = 99;
|
||||
});
|
||||
|
||||
// 改变相机位置
|
||||
const allfly = (x, y, z, h, p, r) => {
|
||||
camera.flyTo({
|
||||
destination: Cesium.Cartesian3.fromDegrees(x, y, z),
|
||||
orientation: {
|
||||
heading: Cesium.Math.toRadians(h), // 方向,以弧度为单位的航向角。
|
||||
pitch: Cesium.Math.toRadians(p), // 倾斜角度,以弧度为单位的俯仰角。
|
||||
roll: r,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const waitit = (waitallow, waitTime, x, y, z, h, p, r, buttonName) => {
|
||||
if (waitallow) {
|
||||
setTimeout(() => {
|
||||
allfly(x, y, z, h, p, r);
|
||||
if (buttonName == "cesium-sceneModePicker-button2D") {
|
||||
scene.camera.position.z = 63781370;
|
||||
// 相机高度问题,scene.mapProjection.ellipsoid.maximumRadius是个常数,API解释为获取椭球的最大半径为6,378,137,此处为地球半径。
|
||||
// 所以三维转二维相机高度一直为12756274米,如果超过这个数值的话就不会显示模型。
|
||||
// 解决办法为初始化后手动设置相机z值,具体大小视情况而定
|
||||
}
|
||||
}, waitTime);
|
||||
} else {
|
||||
allfly(x, y, z, h, p, r);
|
||||
}
|
||||
};
|
||||
|
||||
// 各视图的初始化相机位置
|
||||
// window.document.getElementsByClassName('cesium-toolbar-button')[1].classList[2] 可以获取到选择后当前视图按钮的名称
|
||||
const elementsFly = (waitallow) => {
|
||||
if (
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2] ==
|
||||
"cesium-sceneModePicker-button3D"
|
||||
) {
|
||||
waitit(
|
||||
waitallow,
|
||||
2500,
|
||||
108.55,
|
||||
34.32,
|
||||
100000000,
|
||||
0,
|
||||
-90,
|
||||
0,
|
||||
"cesium-sceneModePicker-button3D"
|
||||
);
|
||||
}
|
||||
if (
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2] ==
|
||||
"cesium-sceneModePicker-button2D"
|
||||
) {
|
||||
waitit(
|
||||
waitallow,
|
||||
3500,
|
||||
0,
|
||||
0,
|
||||
40000000,
|
||||
0,
|
||||
-90,
|
||||
0,
|
||||
"cesium-sceneModePicker-button2D"
|
||||
);
|
||||
}
|
||||
if (
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2] ==
|
||||
"cesium-sceneModePicker-buttonColumbusView"
|
||||
) {
|
||||
waitit(
|
||||
waitallow,
|
||||
4500,
|
||||
0,
|
||||
-90,
|
||||
40000000,
|
||||
0,
|
||||
-45,
|
||||
0,
|
||||
"cesium-sceneModePicker-buttonColumbusView"
|
||||
);
|
||||
}
|
||||
initialPosition = JSON.stringify(camera.position);
|
||||
initialDirection = JSON.stringify(camera.direction);
|
||||
};
|
||||
|
||||
// 单击视图按钮时触发
|
||||
window.document
|
||||
.getElementsByClassName("cesium-toolbar-button")[0]
|
||||
.addEventListener("click", () => {
|
||||
if (
|
||||
clickName.value !==
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2]
|
||||
) {
|
||||
clickName.value = window.document.getElementsByClassName(
|
||||
"cesium-toolbar-button"
|
||||
)[1].classList[2];
|
||||
elementsFly(true);
|
||||
// 使用宏任务等待 _primitives 数组内容更新后再操作内容
|
||||
setTimeout(() => {
|
||||
let mypolylines;
|
||||
mypolylines =
|
||||
viewer.scene.primitives._primitives[
|
||||
viewer.scene.primitives._primitives.length - 1
|
||||
];
|
||||
// console.log(window.nowModel)
|
||||
// console.log(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1])
|
||||
// if(window.nowModel == 'Beidou'){
|
||||
// mypolylines = window.BeidouPolylines[0]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// else if(window.nowModel == 'GPS'){
|
||||
// mypolylines = window.GPSPolylines[0]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// else if(window.nowModel == 'Galileo'){
|
||||
// mypolylines = window.GalileoPolylines[0]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// else if(window.nowModel == 'Glonass'){
|
||||
// mypolylines = window.GlonassPolylines[0]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// mypolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1].constructor.name == 'PolylineCollection'){
|
||||
viewer.scene.primitives.show = false;
|
||||
// viewer.scene.primitives._primitives.pop()
|
||||
let polylineowner = new CustomPolyline(mypolylines);
|
||||
let newprimitive = new CustomPrimitive(viewer.scene.primitives._primitives[10]);
|
||||
// viewer.scene.primitives._primitives.pop()
|
||||
viewer.scene.primitives._primitives[10] = newprimitive;
|
||||
viewer.scene.primitives._primitives.forEach((item, index) => {
|
||||
if (item.mymark !== undefined) {
|
||||
viewer.scene.primitives._primitives.splice(index, 1);
|
||||
}
|
||||
});
|
||||
// viewer.scene.primitives._primitives.pop()
|
||||
// viewer.scene.primitives._primitives.push(polylineowner)
|
||||
viewer.scene.primitives.show = true;
|
||||
// console.log(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1])
|
||||
// }
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
|
||||
// 在组件内部双击时触发
|
||||
window.document
|
||||
.getElementsByClassName("vc-viewer")[0]
|
||||
.addEventListener("dblclick", () => {
|
||||
if (initialDirection !== "") {
|
||||
elementsFly(false);
|
||||
}
|
||||
});
|
||||
|
||||
// 相机位置发生变化时触发
|
||||
watch(clickStatus, (value) => {
|
||||
if (value !== initialPosition) {
|
||||
elementsFly(false);
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* 隐藏动画仪表盘中的日期和时间 */
|
||||
.vc-viewer .cesium-viewer .cesium-viewer-animationContainer svg > g > g text:not(:last-of-type) {
|
||||
.vc-viewer
|
||||
.cesium-viewer
|
||||
.cesium-viewer-animationContainer
|
||||
svg
|
||||
> g
|
||||
> g
|
||||
text:not(:last-of-type) {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div v-show="!!src">
|
||||
<img :src="src">
|
||||
<img :src="src" @dblclick="close">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -10,6 +10,10 @@ import { useStore } from 'vuex'
|
|||
|
||||
const store = useStore()
|
||||
const src = computed(() => './image/flag/' + store.getters["satelliteSystem/name"] + '.png')
|
||||
|
||||
const close = () => {
|
||||
window.ipcRenderer.send('CLOSE')
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -2,44 +2,325 @@
|
|||
<vc-datasource-czml v-if="czml" :czml="czml" @ready="onDataSourceReady" />
|
||||
</template>
|
||||
|
||||
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue'
|
||||
import { useStore } from 'vuex'
|
||||
import entity from '../api/entity'
|
||||
import { computed } from "vue";
|
||||
import { useStore } from "vuex";
|
||||
import entity from "../api/entity";
|
||||
|
||||
// 卫星轨道数据处理
|
||||
let vcViewerInstance: any = null
|
||||
const store = useStore()
|
||||
const czml = computed(() => './CZML/' + store.getters["satelliteSystem/name"] + '.czml')
|
||||
const onDataSourceReady = ({ viewer, cesiumObject }) => {
|
||||
if (!vcViewerInstance) vcViewerInstance = viewer
|
||||
let vcViewerInstance: any = null;
|
||||
const store = useStore();
|
||||
const czml = computed(() => "./CZML/" + store.getters["satelliteSystem/name"] + ".czml");
|
||||
|
||||
viewer.flyTo(cesiumObject)
|
||||
entity.load(cesiumObject.entities.values)
|
||||
const onDataSourceReady = ({ viewer, cesiumObject }) => {
|
||||
if (!vcViewerInstance) vcViewerInstance = viewer;
|
||||
|
||||
// 引入常用卫星模型
|
||||
// 设置 minimumPixelSize 和 maximumPixelSize 都为 0 , show 为 false,使常用卫星模型无法被观察到
|
||||
// 此处利用了缓存机制,因为在父组件中模型已经加载过一次了,所以在此处再次加载模型并引用时速度会加快
|
||||
// 模型对象构造方法
|
||||
class Model {
|
||||
constructor(modelUrl) {
|
||||
const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
|
||||
Cesium.Cartesian3.fromDegrees(108.55, 34.32, 0.0)
|
||||
);
|
||||
this.model = viewer.scene.primitives.add(
|
||||
Cesium.Model.fromGltf({
|
||||
url: `./models/geo/${modelUrl}.glb`,
|
||||
modelMatrix: modelMatrix,
|
||||
minimumPixelSize: 0,
|
||||
maximumPixelSize: 0,
|
||||
show: false,
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const GEOModel = new Model("BeidouGEO");
|
||||
const MEOModel = new Model("BeidouMEO");
|
||||
const IGSOModel = new Model("BeidouIGSO");
|
||||
const GPSIIFModel = new Model("GPSII-F");
|
||||
const GPSIIRModel = new Model("GPSII-R");
|
||||
const GPSIIIAModel = new Model("GPSIII-A");
|
||||
const GPSIIRMModel = new Model("GPSIIR-M");
|
||||
const GLONASSGLOKModel = new Model("GLONASSGLO-K");
|
||||
const GLONASSGLOMModel = new Model("GLONASSGLO-M");
|
||||
const GalileoMEOModel = new Model("GalileoMEO");
|
||||
|
||||
// cesiumObject.entities.values[i].model.uri._value 存放czml文件加载的卫星模型数据
|
||||
// model._resource 存放上方代码加载的卫星模型数据
|
||||
// cesiumObject.entities.values[i].model.uri._value 模型加载地址为 http://localhost:3000/models/geo/geo.glb
|
||||
// model._resource 模型加载地址为 ../../../public/models/geo/geo.glb
|
||||
// model._resource 的模型加载速度快于 cesiumObject.entities.values[i].model.uri._value 且在数据改变时不需要重复加载
|
||||
// 此处使用了提前加载一个不可观察的常用模型对象后复用该模型对象的办法来优化模型的加载速度
|
||||
|
||||
class CustomPrimitive {
|
||||
constructor(options) {
|
||||
this.show = options.show;
|
||||
this._primitives = options._primitives;
|
||||
}
|
||||
update(frameState) {
|
||||
if (!this.show) {
|
||||
return;
|
||||
}
|
||||
for (var t = this._primitives, i = 0; i < t.length; ++i) {
|
||||
t[i].update(frameState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CustomPolyline {
|
||||
constructor(options) {
|
||||
this.show = options.show;
|
||||
this._polylines = options._polylines;
|
||||
this.modelMatrix = options.modelMatrix;
|
||||
this._batchTable = options._batchTable;
|
||||
this._createBatchTable = options._createBatchTable;
|
||||
this._createVertexArray = options._createVertexArray;
|
||||
this._external = options._external;
|
||||
this._highlightColor = options._highlightColor;
|
||||
this._mode = options._mode;
|
||||
this._modelMatrix = options._modelMatrix;
|
||||
this._opaqueRS = options._opaqueRS;
|
||||
this._polylineBuckets = options._polylineBuckets;
|
||||
this._polylinesRemoved = options._polylinesRemoved;
|
||||
this._polylinesToUpdate = options._polylinesToUpdate;
|
||||
this._polylinesUpdated = options._polylinesUpdated;
|
||||
this._positionBuffer = options._positionBuffer;
|
||||
this._positionBufferUsage = options._positionBufferUsage;
|
||||
this._propertiesChanged = options._propertiesChanged;
|
||||
this._texCoordExpandAndBatchIndexBuffer =
|
||||
options._texCoordExpandAndBatchIndexBuffer;
|
||||
this._translucentRS = options._translucentRS;
|
||||
this._uniformMap = options._uniformMap;
|
||||
this._useHighlightColor = options._useHighlightColor;
|
||||
this._vertexArrays = options._vertexArrays;
|
||||
this.mymark = true;
|
||||
this._colorCommands = [];
|
||||
options._colorCommands.forEach((element) => {
|
||||
// console.log(element)
|
||||
// let adrawcommand = new Cesium.DrawCommand(element)
|
||||
this._colorCommands.push(element);
|
||||
});
|
||||
}
|
||||
|
||||
update(frameState) {
|
||||
if (!this.show) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if(this._mode !== viewer.scene._mode){
|
||||
// this._colorCommands.forEach(item => {
|
||||
// if(viewer.scene._mode == 0){
|
||||
// item.boundingVolume = this._vertexArrays[0].buckets[0].bucket.polylines[0]._boundingVolume
|
||||
// }
|
||||
// else if(viewer.scene._mode == 1){
|
||||
// item.boundingVolume = this._vertexArrays[0].buckets[0].bucket.polylines[0]._boundingVolume2D
|
||||
// }
|
||||
// else if(viewer.scene._mode == 3){
|
||||
// item.boundingVolume = this._vertexArrays[0].buckets[0].bucket.polylines[0]._boundingVolumeWC
|
||||
// }
|
||||
// })
|
||||
// this._mode = viewer.scene._mode
|
||||
// }
|
||||
|
||||
this._colorCommands.forEach((item) => {
|
||||
frameState.commandList.push(item);
|
||||
// console.log(frameState.commandList)
|
||||
});
|
||||
|
||||
// for(let s = 0, l = !0, p = 0; p < this._vertexArrays.length; ++p) {
|
||||
// for(let q = 0; q < this._vertexArrays[p].buckets.length; ++q) {
|
||||
// for (let v, C, P = 0, d = 0; d < this._vertexArrays[p].buckets[q].bucket.polylines.length; ++d) {
|
||||
|
||||
// // let I = v.isTranslucent();
|
||||
// // return e.color.alpha>0&&e.color.alpha<1
|
||||
// s >= this._colorCommands.length ? (C = new Cesium.DrawCommand({ owner: this }), this._colorCommands.push(C)) : C = this._colorCommands[s],
|
||||
// ++s,
|
||||
// // T = Cesium.combine$2(d(v._uniforms), this._uniformMap),
|
||||
// C.boundingVolume = Cesium.BoundingSphere.clone(new Cesium.BoundingSphere, C.boundingVolume),
|
||||
// C.modelMatrix = Cesium.Matrix4.IDENTITY,
|
||||
// C.shaderProgram = this._vertexArrays[p].buckets[q].bucket.shaderProgram,
|
||||
// C.vertexArray = this._vertexArrays[p].buckets.va,
|
||||
// C.renderState = this._opaqueRS,
|
||||
// C.pass = Cesium.Pass.OPAQUE,
|
||||
// C.debugShowBoundingVolume = this.debugShowBoundingVolume,
|
||||
// C.pickId = "v_pickColor",
|
||||
// C.uniformMap = this._uniformMap,
|
||||
// C.count = P,
|
||||
// C.offset = this._vertexArrays[p].buckets[q].offset,
|
||||
// this._vertexArrays[p].buckets[q].offset += P,
|
||||
// P = 0,
|
||||
// l = !0,
|
||||
// frameState.commandList.push(C)
|
||||
// console.log(frameState.commandList)
|
||||
|
||||
// for (var R, b = 0; b < this._vertexArrays[p].buckets[q].bucket.polylines[d]._locatorBuckets.length; ++b) {
|
||||
// this._vertexArrays[p].buckets[q].bucket.polylines[d]._locatorBuckets[b].locator === this._vertexArrays[p].buckets[q] && (P += this._vertexArrays[p].buckets[q].bucket.polylines[d]._locatorBuckets[b].count)
|
||||
// }
|
||||
// frameState.mode === 3 ? R = this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolumeWC : frameState.mode === 0 ? R = this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolume2D : frameState.mode === 1 ? defined(this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolume2D) && ((R = BoundingSphere.clone(this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolume2D, boundingSphereScratch2)).center.x = 0) : defined(this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolumeWC) && defined(this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolume2D) && (R = Cesium.BoundingSphere.union(this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolumeWC, this._vertexArrays[p].buckets[q].bucket.polylines[d]._boundingVolume2D, new Cesium.BoundingSphere)),
|
||||
// l ? (l = !1, Cesium.BoundingSphere.clone(R, new Cesium.BoundingSphere)) : Cesium.BoundingSphere.union(R, new Cesium.BoundingSphere, new Cesium.BoundingSphere)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
// 使用宏任务等待 _primitives 数组内容更新后再操作内容
|
||||
setTimeout(() => {
|
||||
let mypolylines;
|
||||
mypolylines =
|
||||
viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length - 1];
|
||||
// console.log(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]._polylines[0]._id.entityCollection._owner)
|
||||
// console.log(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1].constructor.name)
|
||||
// if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]._polylines[0]._id.entityCollection._owner._documentPacket.name == 'BEIDOU CZML Model'){
|
||||
// window.nowModel = 'Beidou'
|
||||
// window.BeidouPolylines = [viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]]
|
||||
// if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1].constructor.name == 'PolylineCollection'){
|
||||
// mypolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// }
|
||||
// else if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]._polylines[0]._id.entityCollection._owner._documentPacket.name == 'GPS CZML Model'){
|
||||
// window.nowModel = 'GPS'
|
||||
// window.GPSPolylines = [viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]]
|
||||
// if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1].constructor.name == 'PolylineCollection'){
|
||||
// mypolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// }
|
||||
// else if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]._polylines[0]._id.entityCollection._owner._documentPacket.name == 'GALILEO CZML Model'){
|
||||
// window.nowModel = 'Galileo'
|
||||
// window.GalileiPolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1].constructor.name == 'PolylineCollection'){
|
||||
// mypolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// }
|
||||
// else if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]._polylines[0]._id.entityCollection._owner._documentPacket.name == 'GLONASS CZML Model'){
|
||||
// window.nowModel = 'Glonass'
|
||||
// window.GlonassPolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// if(viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1].constructor.name == 'PolylineCollection'){
|
||||
// mypolylines = viewer.scene.primitives._primitives[viewer.scene.primitives._primitives.length-1]
|
||||
// console.log(mypolylines)
|
||||
// }
|
||||
// }
|
||||
viewer.scene.primitives.show = false;
|
||||
let polylineowner = new CustomPolyline(mypolylines);
|
||||
let newprimitive = new CustomPrimitive(viewer.scene.primitives._primitives[10]);
|
||||
viewer.scene.primitives._primitives[10] = newprimitive;
|
||||
viewer.scene.primitives._primitives.forEach((item, index) => {
|
||||
if (item.mymark) {
|
||||
viewer.scene.primitives._primitives.splice(index, 1);
|
||||
}
|
||||
});
|
||||
// viewer.scene.primitives._primitives.pop()
|
||||
// viewer.scene.primitives._primitives.push(polylineowner)
|
||||
viewer.scene.primitives.show = true;
|
||||
}, 0);
|
||||
|
||||
cesiumObject.entities.values.forEach((element) => {
|
||||
if (element.model !== undefined) {
|
||||
// 调整卫星名称显示位置
|
||||
element.label.pixelOffset._value = new Cesium.Cartesian2(12, 21);
|
||||
// 根据卫星系统名称为其替换不同的卫星模型
|
||||
if (element.properties.satelliteType._value == "Beidou") {
|
||||
if (element.description._value.indexOf("GEO") !== -1) {
|
||||
element.model.uri._value = GEOModel.model._resource;
|
||||
} else if (element.description._value.indexOf("MEO") !== -1) {
|
||||
element.model.uri._value = MEOModel.model._resource;
|
||||
} else if (element.description._value.indexOf("IGSO") !== -1) {
|
||||
element.model.uri._value = IGSOModel.model._resource;
|
||||
}
|
||||
} else if (element.properties.satelliteType._value == "GPS") {
|
||||
// 指定基于漫反射和镜面反射图像的照明的贡献,调整模型亮度
|
||||
element.model.imageBasedLightingFactor = new Cesium.Cartesian2(20, 1);
|
||||
if (element.description._value.indexOf("II-F") !== -1) {
|
||||
element.model.uri._value = GPSIIFModel.model._resource;
|
||||
}
|
||||
if (element.description._value.indexOf("II-R") !== -1) {
|
||||
element.model.uri._value = GPSIIRModel.model._resource;
|
||||
}
|
||||
if (element.description._value.indexOf("III-A") !== -1) {
|
||||
element.model.uri._value = GPSIIIAModel.model._resource;
|
||||
}
|
||||
if (element.description._value.indexOf("IIR-M") !== -1) {
|
||||
element.model.uri._value = GPSIIRMModel.model._resource;
|
||||
}
|
||||
} else if (element.properties.satelliteType._value == "GLONASS") {
|
||||
// 指定基于漫反射和镜面反射图像的照明的贡献,调整模型亮度
|
||||
element.model.imageBasedLightingFactor = new Cesium.Cartesian2(10, 1);
|
||||
if (element.description._value.indexOf("GLO-K") !== -1) {
|
||||
element.model.uri._value = GLONASSGLOKModel.model._resource;
|
||||
}
|
||||
if (element.description._value.indexOf("GLO-M") !== -1) {
|
||||
element.model.uri._value = GLONASSGLOMModel.model._resource;
|
||||
}
|
||||
} else if (element.properties.satelliteType._value == "Galileo") {
|
||||
// 指定基于漫反射和镜面反射图像的照明的贡献,调整模型亮度
|
||||
element.model.imageBasedLightingFactor = new Cesium.Cartesian2(20, 1);
|
||||
if (element.description._value.indexOf("MEO") !== -1) {
|
||||
element.model.uri._value = GalileoMEOModel.model._resource;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
entity.load(cesiumObject.entities.values);
|
||||
|
||||
// 显示卫星导航系统的科普信息
|
||||
viewer.selectedEntity = entity.find('Constellation')
|
||||
}
|
||||
viewer.selectedEntity = entity.find("Constellation");
|
||||
|
||||
// 设置相机初始位置
|
||||
const allfly = (x, y, z, h, p, r) => {
|
||||
viewer.camera.flyTo({
|
||||
destination: Cesium.Cartesian3.fromDegrees(x, y, z),
|
||||
orientation: {
|
||||
heading: Cesium.Math.toRadians(h), // 方向,以弧度为单位的航向角。
|
||||
pitch: Cesium.Math.toRadians(p), // 倾斜角度,以弧度为单位的俯仰角。
|
||||
roll: r,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
if (
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2] ==
|
||||
"cesium-sceneModePicker-button3D"
|
||||
) {
|
||||
allfly(108.55, 34.32, 100000000, 0, -90, 0);
|
||||
}
|
||||
if (
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2] ==
|
||||
"cesium-sceneModePicker-button2D"
|
||||
) {
|
||||
allfly(0, 0, 40000000, 0, -90, 0);
|
||||
viewer.scene.camera.position.z = 63781370;
|
||||
}
|
||||
if (
|
||||
window.document.getElementsByClassName("cesium-toolbar-button")[1].classList[2] ==
|
||||
"cesium-sceneModePicker-buttonColumbusView"
|
||||
) {
|
||||
allfly(0, -90, 40000000, 0, -45, 0);
|
||||
}
|
||||
};
|
||||
|
||||
// 显示/隐藏、跟踪卫星等交互操作
|
||||
store.subscribeAction(({ type, payload }) => {
|
||||
// 显示/隐藏卫星
|
||||
if (type === 'satelliteSystem/toggleShow') {
|
||||
const satellite = entity.get(payload)
|
||||
if (!satellite) return
|
||||
if (type === "satelliteSystem/toggleShow") {
|
||||
const satellite = entity.get(payload);
|
||||
if (!satellite) return;
|
||||
|
||||
satellite.show = !satellite.show
|
||||
satellite.show = !satellite.show;
|
||||
}
|
||||
|
||||
// 跟踪卫星
|
||||
if (type === 'satelliteSystem/track') {
|
||||
const satellite = entity.get(payload)
|
||||
if (!satellite || !vcViewerInstance) return
|
||||
if (type === "satelliteSystem/track") {
|
||||
const satellite = entity.get(payload);
|
||||
if (!satellite || !vcViewerInstance) return;
|
||||
|
||||
vcViewerInstance.selectedEntity = satellite
|
||||
vcViewerInstance.trackedEntity = satellite
|
||||
vcViewerInstance.selectedEntity = satellite;
|
||||
vcViewerInstance.trackedEntity = satellite;
|
||||
}
|
||||
})
|
||||
});
|
||||
</script>
|
|
@ -2,11 +2,21 @@
|
|||
<div>
|
||||
<div id="satellite-table-container" class="text-white absolute bottom-0 text-center">
|
||||
<button @click="show = !show" class="rounded border-blue-900 bg-blue-900">
|
||||
<svg v-if="show" xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 13l-7 7-7-7m14-8l-7 7-7-7" />
|
||||
<svg v-if="show" xmlns="http://www.w3.org/2000/svg" width="600" height="30" fill="none" viewBox="-10 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M -200 8 l 200 10 200 -10 m -400 -6 l 200 10 200 -10">
|
||||
<animate attributeName="stroke" attributeType="XML"
|
||||
from="#ffffff" to="#666666"
|
||||
begin="0s" dur="1.5s"
|
||||
fill="remove" repeatCount="indefinite"/>
|
||||
</path>
|
||||
</svg>
|
||||
<svg v-else xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 11l7-7 7 7M5 19l7-7 7 7" />
|
||||
<svg v-else xmlns="http://www.w3.org/2000/svg" width="600" height="30" fill="none" viewBox="-10 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M -200 20 l 200 -10 200 10 m -400 -6 l 200 -10 200 10">
|
||||
<animate attributeName="stroke" attributeType="XML"
|
||||
from="#ffffff" to="#666666"
|
||||
begin="0s" dur="1.5s"
|
||||
fill="remove" repeatCount="indefinite"/>
|
||||
</path>
|
||||
</svg>
|
||||
</button>
|
||||
<table ref="satelliteTable" v-show="show" class="text-center">
|
||||
|
@ -16,6 +26,7 @@
|
|||
:key="label"
|
||||
:style="{width: index == 1 ? '37.5vw' : '12.5vw'}">
|
||||
{{ label }}
|
||||
<input v-if="label == '显示/隐藏'" :indeterminate="someshow" :checked="allshow" type="checkbox" class="w-6 h-6 cursor-pointer" @change="allOnShowStateCheckboxChanged" />
|
||||
</th>
|
||||
</thead>
|
||||
<tbody class="text-lg odd:bg-gray-50">
|
||||
|
@ -23,7 +34,7 @@
|
|||
<td class="border border-gray-900"> {{ index + 1 }} </td>
|
||||
<td class="border border-gray-900"> {{ id }} </td>
|
||||
<td class="border border-gray-900">
|
||||
<input :checked="show" type="checkbox" class="w-6 h-6 cursor-pointer" @change="onShowStateCheckboxChanged(id)" />
|
||||
<input :checked="ashow" type="checkbox" class="w-6 h-6 cursor-pointer" @change="onShowStateCheckboxChanged(id)" />
|
||||
</td>
|
||||
<td class="border border-gray-900">
|
||||
<button @click="onTrackButtonClicked(id)">
|
||||
|
@ -45,15 +56,71 @@ import { ref, computed, watch } from 'vue'
|
|||
|
||||
|
||||
const show = ref(false)
|
||||
const ashow = ref(true)
|
||||
const someshow = ref(false)
|
||||
const allshow = ref(true)
|
||||
const showarr = ref({})
|
||||
|
||||
const store = useStore()
|
||||
const satellites = computed(() => store.getters["satelliteSystem/satellites"])
|
||||
const onTrackButtonClicked = id => store.dispatch('satelliteSystem/track', id)
|
||||
const onShowStateCheckboxChanged = id => store.dispatch('satelliteSystem/toggleShow', id)
|
||||
const onTrackButtonClicked = (id) => {
|
||||
store.dispatch('satelliteSystem/track', id)
|
||||
}
|
||||
const onShowStateCheckboxChanged = (id) => {
|
||||
// console.log(window.viewer.scene.primitives._primitives[window.viewer.scene.primitives._primitives.length-1])
|
||||
// window.viewer.scene.primitives._primitives[window.viewer.scene.primitives._primitives.length-1]._polylines.forEach(element => {
|
||||
// if(element._id._id == id){
|
||||
// if(element._show){
|
||||
// element._show == false
|
||||
// }else{
|
||||
// element._show == true
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
someshow.value = true
|
||||
showarr.value[id] = !showarr.value[id]
|
||||
store.dispatch('satelliteSystem/toggleShow', id)
|
||||
let ashowsum = 0
|
||||
satellites.value.forEach((item,index) => {
|
||||
if(showarr.value[item.id] == true){
|
||||
ashowsum = ashowsum + 1
|
||||
}
|
||||
})
|
||||
if(ashowsum == 0){
|
||||
someshow.value = false
|
||||
}else if(ashowsum == satellites.value.length){
|
||||
someshow.value = false
|
||||
}
|
||||
}
|
||||
const allOnShowStateCheckboxChanged = () => {
|
||||
if(allshow.value){
|
||||
allshow.value = false
|
||||
ashow.value = false
|
||||
}else{
|
||||
allshow.value = true
|
||||
ashow.value = true
|
||||
}
|
||||
satellites.value.forEach(element => {
|
||||
if(showarr.value[element.id] !== ashow.value){
|
||||
onShowStateCheckboxChanged(element.id)
|
||||
}
|
||||
onShowStateCheckboxChanged(element.id)
|
||||
})
|
||||
someshow.value = false
|
||||
}
|
||||
|
||||
// 表格数据更新时,滚动条回到最顶部
|
||||
const satelliteTable = ref(null)
|
||||
watch(satellites, () => satelliteTable.value.scrollTop = 0)
|
||||
watch(satellites, () => {
|
||||
ashow.value = true
|
||||
someshow.value = false
|
||||
allshow.value = true
|
||||
showarr.value = {}
|
||||
satellites.value.forEach(item => {
|
||||
showarr.value[item.id] = false
|
||||
})
|
||||
satelliteTable.value.scrollTop = 0
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
PolylineCollection.prototype.update = function (e) {
|
||||
if (removePolylines(this), 0 !== this._polylines.length && this.show) {
|
||||
updateMode$1(this, e);
|
||||
var t,
|
||||
i = e.context,
|
||||
r = e.mapProjection,
|
||||
n = this._propertiesChanged;
|
||||
if (this._createBatchTable) {
|
||||
if (0 === ContextLimits.maximumVertexTextureImageUnits)
|
||||
throw new RuntimeError("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");
|
||||
createBatchTable(this, i),
|
||||
this._createBatchTable = !1
|
||||
}
|
||||
if (this._createVertexArray || computeNewBuffersUsage(this))
|
||||
createVertexArrays(this, i, r);
|
||||
else if (this._polylinesUpdated) {
|
||||
var a = this._polylinesToUpdate;
|
||||
if (this._mode !== SceneMode$1.SCENE3D)
|
||||
for (var o = a.length, s = 0; s < o; ++s)
|
||||
(t = a[s]).update();
|
||||
if (n[POSITION_SIZE_INDEX] || n[MATERIAL_INDEX])
|
||||
createVertexArrays(this, i, r);
|
||||
else for (var l = a.length, c = this._polylineBuckets, u = 0; u < l; ++u) {
|
||||
n = (t = a[u])._propertiesChanged;
|
||||
var d = t._bucket,
|
||||
h = 0;
|
||||
for (var p in c)
|
||||
if (c.hasOwnProperty(p)) {
|
||||
if (c[p] === d) {
|
||||
n[POSITION_INDEX$4] && d.writeUpdate(h, t, this._positionBuffer, r);
|
||||
break
|
||||
}
|
||||
h += c[p].lengthOfPositions
|
||||
}
|
||||
if ((n[SHOW_INDEX$4] || n[WIDTH_INDEX]) && this._batchTable.setBatchedAttribute(t._index, 0, new Cartesian2(t._width, t._show)), this._batchTable.attributes.length > 2) {
|
||||
if (n[POSITION_INDEX$4] || n[POSITION_SIZE_INDEX]) {
|
||||
var f = e.mode === SceneMode$1.SCENE2D ? t._boundingVolume2D : t._boundingVolumeWC,
|
||||
m = EncodedCartesian3.fromCartesian(f.center, scratchUpdatePolylineEncodedCartesian),
|
||||
g = Cartesian4.fromElements(m.low.x, m.low.y, m.low.z, f.radius, scratchUpdatePolylineCartesian4);
|
||||
this._batchTable.setBatchedAttribute(t._index, 2, m.high),
|
||||
this._batchTable.setBatchedAttribute(t._index, 3, g)
|
||||
}
|
||||
if (n[DISTANCE_DISPLAY_CONDITION]) {
|
||||
var _ = scratchNearFarCartesian2;
|
||||
_.x = 0,
|
||||
_.y = Number.MAX_VALUE;
|
||||
var y = t.distanceDisplayCondition;
|
||||
defined(y) && (_.x = y.near, _.y = y.far),
|
||||
this._batchTable.setBatchedAttribute(t._index, 4, _)
|
||||
}
|
||||
} t._clean()
|
||||
}
|
||||
a.length = 0,
|
||||
this._polylinesUpdated = !1
|
||||
}
|
||||
n = this._propertiesChanged;
|
||||
for (var v = 0; v < NUMBER_OF_PROPERTIES$2; ++v)
|
||||
n[v] = 0;
|
||||
var C = Matrix4.IDENTITY;
|
||||
e.mode === SceneMode$1.SCENE3D && (C = this.modelMatrix);
|
||||
var T = e.passes,
|
||||
S = 0 !== e.morphTime;
|
||||
if (defined(this._opaqueRS) && this._opaqueRS.depthTest.enabled === S || (this._opaqueRS = RenderState.fromCache({ depthMask: S, depthTest: { enabled: S } })), defined(this._translucentRS) && this._translucentRS.depthTest.enabled === S || (this._translucentRS = RenderState.fromCache({ blending: BlendingState$1.ALPHA_BLEND, depthMask: !S, depthTest: { enabled: S } })), this._batchTable.update(e), T.render || T.pick)
|
||||
createCommandLists(this, e, this._colorCommands, C)
|
||||
}
|
||||
};
|
||||
var boundingSphereScratch$2 = new BoundingSphere,
|
||||
boundingSphereScratch2 = new BoundingSphere;
|
||||
function createCommandLists(e, t, i, r) {
|
||||
for (var n = t.context, a = t.commandList, o = i.length, s = 0, l = !0, c = e._vertexArrays, u = e.debugShowBoundingVolume, d = e._batchTable.getUniformMapCallback(), h = c.length, p = 0; p < h; ++p)
|
||||
for (var f = c[p], m = f.buckets, g = m.length, _ = 0; _ < g; ++_) {
|
||||
for (var y, v, C, T, S = m[_], A = S.offset, x = S.bucket.shaderProgram, E = S.bucket.polylines, b = E.length, P = 0, D = 0; D < b; ++D) {
|
||||
var w = E[D],
|
||||
M = createMaterialId(w._material);
|
||||
if (M !== y) {
|
||||
if (defined(y) && P > 0) {
|
||||
var I = v.isTranslucent();
|
||||
s >= o ? (C = new DrawCommand({ owner: e }), i.push(C)) : C = i[s],
|
||||
++s,
|
||||
T = combine$2(d(v._uniforms), e._uniformMap),
|
||||
C.boundingVolume = BoundingSphere.clone(boundingSphereScratch$2, C.boundingVolume),
|
||||
C.modelMatrix = r,
|
||||
C.shaderProgram = x,
|
||||
C.vertexArray = f.va,
|
||||
C.renderState = I ? e._translucentRS : e._opaqueRS,
|
||||
C.pass = I ? Pass$1.TRANSLUCENT : Pass$1.OPAQUE,
|
||||
C.debugShowBoundingVolume = u,
|
||||
C.pickId = "v_pickColor",
|
||||
C.uniformMap = T,
|
||||
C.count = P,
|
||||
C.offset = A,
|
||||
A += P,
|
||||
P = 0,
|
||||
l = !0,
|
||||
a.push(C)
|
||||
}
|
||||
(v = w._material).update(n),
|
||||
y = M
|
||||
}
|
||||
for (var R, O = w._locatorBuckets, B = O.length, L = 0; L < B; ++L) {
|
||||
var F = O[L];
|
||||
F.locator === S && (P += F.count)
|
||||
}
|
||||
t.mode === SceneMode$1.SCENE3D ? R = w._boundingVolumeWC : t.mode === SceneMode$1.COLUMBUS_VIEW ? R = w._boundingVolume2D : t.mode === SceneMode$1.SCENE2D ? defined(w._boundingVolume2D) && ((R = BoundingSphere.clone(w._boundingVolume2D, boundingSphereScratch2)).center.x = 0) : defined(w._boundingVolumeWC) && defined(w._boundingVolume2D) && (R = BoundingSphere.union(w._boundingVolumeWC, w._boundingVolume2D, boundingSphereScratch2)),
|
||||
l ? (l = !1, BoundingSphere.clone(R, boundingSphereScratch$2)) : BoundingSphere.union(R, boundingSphereScratch$2, boundingSphereScratch$2)
|
||||
} defined(y) && P > 0 && (
|
||||
s >= o ? (C = new DrawCommand({ owner: e }), i.push(C)) : C = i[s],
|
||||
++s,
|
||||
T = combine$2(d(v._uniforms), e._uniformMap),
|
||||
C.boundingVolume = BoundingSphere.clone(boundingSphereScratch$2, C.boundingVolume),
|
||||
C.modelMatrix = r,
|
||||
C.shaderProgram = x,
|
||||
C.vertexArray = f.va,
|
||||
C.renderState = v.isTranslucent() ? e._translucentRS : e._opaqueRS,
|
||||
C.pass = v.isTranslucent() ? Pass$1.TRANSLUCENT : Pass$1.OPAQUE,
|
||||
C.debugShowBoundingVolume = u,
|
||||
C.pickId = "v_pickColor",
|
||||
C.uniformMap = T,
|
||||
C.count = P,
|
||||
C.offset = A,
|
||||
l = !0,
|
||||
a.push(C)
|
||||
),
|
||||
y = void 0
|
||||
}
|
||||
i.length = s
|
||||
}
|
||||
function computeNewBuffersUsage(e) {
|
||||
var t = !1,
|
||||
i = e._propertiesChanged,
|
||||
r = e._positionBufferUsage;
|
||||
return i[POSITION_INDEX$4] ? r.bufferUsage !== BufferUsage$1.STREAM_DRAW ? (t = !0, r.bufferUsage = BufferUsage$1.STREAM_DRAW, r.frameCount = 100) : r.frameCount = 100 : r.bufferUsage !== BufferUsage$1.STATIC_DRAW && (0 === r.frameCount ? (t = !0, r.bufferUsage = BufferUsage$1.STATIC_DRAW) : r.frameCount--),
|
||||
t
|
||||
}
|
|
@ -19,9 +19,11 @@ const actions = {
|
|||
commit('setSatellites', satellites)
|
||||
},
|
||||
|
||||
track () {},
|
||||
track () {
|
||||
},
|
||||
|
||||
toggleShow () {},
|
||||
toggleShow () {
|
||||
},
|
||||
}
|
||||
|
||||
// mutations
|
||||
|
|
145
yarn.lock
|
@ -433,6 +433,11 @@ acorn@^7.0.0:
|
|||
resolved "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1618212583807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
|
||||
integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=
|
||||
|
||||
adler-32@, adler-32@~1.3.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz#1dbf0b36dda0012189a32b3679061932df1821e2"
|
||||
integrity sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==
|
||||
|
||||
agent-base@6, agent-base@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||
|
@ -820,6 +825,14 @@ cesium@^1.88.0:
|
|||
resolved "https://registry.npmmirror.com/cesium/download/cesium-1.88.0.tgz#d2780ffca93968766feedb676fccb58493ce97d4"
|
||||
integrity sha512-Tu/U5noy+jTejtaPav5G9SAXss8I9MmR7Ug46ny2NnKQsmW7slO0MUlL3lxo0po7VSmI/E0dDU7Jo+WiRbooRQ==
|
||||
|
||||
cfb@>=0.10.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44"
|
||||
integrity sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==
|
||||
dependencies:
|
||||
adler-32 "~1.3.0"
|
||||
crc-32 "~1.2.0"
|
||||
|
||||
chalk@^2.4.1:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
|
@ -921,6 +934,15 @@ clone@^1.0.2:
|
|||
resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
|
||||
|
||||
codepage@~1.3.6:
|
||||
version "1.3.8"
|
||||
resolved "https://registry.npmmirror.com/codepage/-/codepage-1.3.8.tgz#4f2e5d7c0975de28f88498058dcb5afcab6a5f71"
|
||||
integrity sha512-cjAoQW5L/TCKWRbzt/xGBvhwJKQFhcIVO0jWQtpKQx4gr9qvXNkpRfq6gSmjjA8dB2Is/DPOb7gNwqQXP7UgTQ==
|
||||
dependencies:
|
||||
commander ""
|
||||
concat-stream ""
|
||||
voc ""
|
||||
|
||||
color-convert@^1.9.0, color-convert@^1.9.1:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
|
@ -976,6 +998,11 @@ colorette@^1.2.2:
|
|||
resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
|
||||
integrity sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=
|
||||
|
||||
colors@0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.npmmirror.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
|
||||
integrity sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
|
@ -983,6 +1010,11 @@ combined-stream@^1.0.8:
|
|||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@:
|
||||
version "11.1.0"
|
||||
resolved "https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
|
||||
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
|
||||
|
||||
commander@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npm.taobao.org/commander/download/commander-5.1.0.tgz?cache=0&sync_timestamp=1613374024216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
|
||||
|
@ -1003,6 +1035,16 @@ concat-map@0.0.1:
|
|||
resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
concat-stream@:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
|
||||
integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^3.0.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
concat-stream@^1.6.2:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.nlark.com/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
|
||||
|
@ -1044,6 +1086,11 @@ core-util-is@~1.0.0:
|
|||
resolved "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.3.tgz?cache=0&sync_timestamp=1630420570787&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcore-util-is%2Fdownload%2Fcore-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
|
||||
integrity sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=
|
||||
|
||||
crc-32@, crc-32@~1.2.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
|
||||
integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
|
||||
|
||||
crc@^3.8.0:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.npm.taobao.org/crc/download/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
|
||||
|
@ -1496,6 +1543,11 @@ form-data@^4.0.0:
|
|||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
frac@0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.npmmirror.com/frac/-/frac-0.3.1.tgz#577677b7fdcbe6faf7c461f1801d34137cda4354"
|
||||
integrity sha512-1Lzf2jOjhIkRaa013KlxNOn2D9FemmQNeYUDpEIyPeFXmpLvbZXJOlaayMBT6JKXx+afQFgQ1QJ4kaF7Z07QFQ==
|
||||
|
||||
fraction.js@^4.0.13:
|
||||
version "4.0.13"
|
||||
resolved "https://registry.npm.taobao.org/fraction.js/download/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe"
|
||||
|
@ -1831,11 +1883,6 @@ ieee754@^1.1.13:
|
|||
resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz?cache=0&sync_timestamp=1603838209136&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=
|
||||
|
||||
if-async@^3.7.4:
|
||||
version "3.7.4"
|
||||
resolved "https://registry.npmmirror.com/if-async/-/if-async-3.7.4.tgz#55868deb0093d3c67bf7166e745353fb9bcb21a2"
|
||||
integrity sha512-BFEH2mZyeF6KZKaKLVPZ0wMjIiWOdjvZ7zbx8ENec0qfZhJwKFbX/4jKM5LTKyJEc/GOqUKiiJ2IFKT9yWrZqA==
|
||||
|
||||
ignore@^5.1.1:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.npmmirror.com/ignore/download/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
|
||||
|
@ -1864,7 +1911,7 @@ inflight@^1.0.4:
|
|||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
|
||||
inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
|
||||
|
@ -1964,11 +2011,6 @@ is-unicode-supported@^0.1.0:
|
|||
resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
|
||||
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
|
||||
|
||||
isarray@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
|
||||
|
||||
isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
|
@ -2008,6 +2050,19 @@ jake@^10.8.5:
|
|||
filelist "^1.0.4"
|
||||
minimatch "^3.1.2"
|
||||
|
||||
js-xlsx@^0.8.22:
|
||||
version "0.8.22"
|
||||
resolved "https://registry.npmmirror.com/js-xlsx/-/js-xlsx-0.8.22.tgz#eb503f55f9325836eedbaa8be49da0fb0f6df3c0"
|
||||
integrity sha512-3N4a9RBHTr777rxxlvwJVpC+er/neRC+40sm2M/g3RIpWiCJG0iyaGJa8Za1K3NvjhZcKn9Sz5n36TY9ti5RMQ==
|
||||
dependencies:
|
||||
adler-32 ""
|
||||
cfb ">=0.10.0"
|
||||
codepage "~1.3.6"
|
||||
commander ""
|
||||
crc-32 ""
|
||||
jszip "2.4.0"
|
||||
ssf "~0.8.1"
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
|
@ -2056,6 +2111,13 @@ jsonfile@^6.0.1:
|
|||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jszip@2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.npmmirror.com/jszip/-/jszip-2.4.0.tgz#487a93b76c3bffa6cb085cd61eb934eabe2d294f"
|
||||
integrity sha512-m+yvNmYfRCaf1gr5YFT5e3fnSqLnE9McbNyRd0fNycsT0HltS19NKc18fh3Lvl/AIW/ovL6/MQ1JnfFg4G3o4A==
|
||||
dependencies:
|
||||
pako "~0.2.5"
|
||||
|
||||
keyv@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/keyv/download/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
|
||||
|
@ -2523,6 +2585,11 @@ p-map@^4.0.0:
|
|||
dependencies:
|
||||
aggregate-error "^3.0.0"
|
||||
|
||||
pako@~0.2.5:
|
||||
version "0.2.9"
|
||||
resolved "https://registry.npmmirror.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
|
||||
integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
|
||||
|
||||
parse-glob@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
|
||||
|
@ -2743,16 +2810,6 @@ read-config-file@6.3.2:
|
|||
json5 "^2.2.0"
|
||||
lazy-val "^1.0.4"
|
||||
|
||||
"readable-stream@>=1.0.33-1 <1.1.0-0":
|
||||
version "1.0.34"
|
||||
resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
|
||||
integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.1"
|
||||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readable-stream@^2.2.2:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
|
@ -2766,7 +2823,7 @@ readable-stream@^2.2.2:
|
|||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^3.4.0, readable-stream@^3.6.0:
|
||||
readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
|
||||
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
|
||||
|
@ -2790,16 +2847,6 @@ reduce-css-calc@^2.1.8:
|
|||
css-unit-converter "^1.1.1"
|
||||
postcss-value-parser "^3.3.0"
|
||||
|
||||
regedit@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/regedit/-/regedit-5.1.2.tgz#51728e0cfd7bbba95d7ab09c227aeb1174abb4e1"
|
||||
integrity sha512-pQpWqO/I40bMNoMO9kTQx3e5iK542kYcB/Z8X3Y7Hcri6ydc4KZ9ByUsEWFkBRMcwo+2irHuNK5s+pMGPr6VPw==
|
||||
dependencies:
|
||||
debug "^4.1.0"
|
||||
if-async "^3.7.4"
|
||||
stream-slicer "0.0.6"
|
||||
through2 "^0.6.3"
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
|
@ -3067,6 +3114,15 @@ sprintf-js@^1.1.2:
|
|||
resolved "https://registry.nlark.com/sprintf-js/download/sprintf-js-1.1.2.tgz?cache=0&sync_timestamp=1618847174560&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
|
||||
integrity sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=
|
||||
|
||||
ssf@~0.8.1:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.npmmirror.com/ssf/-/ssf-0.8.2.tgz#b9d4dc6a1c1bcf76f8abfa96d7d7656fb2abecd6"
|
||||
integrity sha512-+ZkFDAG+ImJ48DcZvabx6YTrZ67DKkM0kbyOOtH73mbUEvNhQWWgRZrHC8+k7GuGKWQnACYLi7bj0eCt1jmosQ==
|
||||
dependencies:
|
||||
colors "0.6.2"
|
||||
frac "0.3.1"
|
||||
voc ""
|
||||
|
||||
ssri@^10.0.0:
|
||||
version "10.0.4"
|
||||
resolved "https://registry.npmmirror.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6"
|
||||
|
@ -3079,11 +3135,6 @@ stat-mode@^1.0.0:
|
|||
resolved "https://registry.npm.taobao.org/stat-mode/download/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
|
||||
integrity sha1-aLVcth6mOf9XE282shaikYANFGU=
|
||||
|
||||
stream-slicer@0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.npmmirror.com/stream-slicer/-/stream-slicer-0.0.6.tgz#f86b2ac5c2440b7a0a87b71f33665c0788046138"
|
||||
integrity sha512-QsY0LbweYE5L+e+iBQgtkM5WUIf7+kCMA/m2VULv8rEEDDnlDPsPvOHH4nli6uaZOKQEt64u65h0l/eeZo7lCw==
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
|
@ -3118,11 +3169,6 @@ string_decoder@^1.1.1:
|
|||
dependencies:
|
||||
safe-buffer "~5.2.0"
|
||||
|
||||
string_decoder@~0.10.x:
|
||||
version "0.10.31"
|
||||
resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||
integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
|
@ -3225,14 +3271,6 @@ temp-file@^3.4.0:
|
|||
async-exit-hook "^2.0.1"
|
||||
fs-extra "^10.0.0"
|
||||
|
||||
through2@^0.6.3:
|
||||
version "0.6.5"
|
||||
resolved "https://registry.npmmirror.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
|
||||
integrity sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==
|
||||
dependencies:
|
||||
readable-stream ">=1.0.33-1 <1.1.0-0"
|
||||
xtend ">=4.0.0 <4.1.0-0"
|
||||
|
||||
tmp-promise@^3.0.2:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.npmmirror.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
|
||||
|
@ -3382,6 +3420,11 @@ vite@^2.0.5:
|
|||
optionalDependencies:
|
||||
fsevents "~2.3.1"
|
||||
|
||||
voc@:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/voc/-/voc-1.2.0.tgz#c459024531d71067c09e2c0c2bda6c2b13af32d8"
|
||||
integrity sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==
|
||||
|
||||
vue-cesium@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npmmirror.com/vue-cesium/download/vue-cesium-3.0.4.tgz#3f33b6d31104efe8037cf833c28f773d703eab16"
|
||||
|
@ -3476,7 +3519,7 @@ xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1:
|
|||
resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-15.1.1.tgz?cache=0&sync_timestamp=1600349105009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxmlbuilder%2Fdownload%2Fxmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
|
||||
integrity sha1-nc3OSe6mbY0QtCyulKecPI0MLsU=
|
||||
|
||||
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.2:
|
||||
xtend@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=
|
||||
|
|