forked from drone/command-center-dashboard

罗广辉
2025-04-07 0c24112327778616cd4e5ce2d98a6a4f9afa9782
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<template>
    <div id="deviceJobDetailsMap" />
</template>
<script setup>
import { Terrain, Viewer } from 'cesium'
import * as Cesium from 'cesium'
import AmapMercatorTilingScheme from '@/utils/cesium/AmapMercatorTilingScheme'
import { analyzeKmzFile, XMLToJSON } from '@/utils/cesium/kmz'
 
const props = defineProps(['detailsData'])
 
 
const imageryProvider_ammapSL = new Cesium.UrlTemplateImageryProvider({
    url: 'https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
    layer: 'tdtVecBasicLayer',
    style: 'default',
    format: 'image/png',
    tileMatrixSetID: 'GoogleMapsCompatible',
    subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
    maximumLevel: 18,
    tilingScheme: new AmapMercatorTilingScheme(),
    credit: 'amap_SL',
})
 
const init = () => {
    const viewer = new Viewer('deviceJobDetailsMap', {
        terrain: Terrain.fromWorldTerrain(),
        infoBox: false, // 禁用沙箱,解决控制台报错
        animation: false, // 左下角的动画仪表盘
        baseLayerPicker: false, // 右上角的图层选择按钮
        geocoder: false, // 搜索框
        homeButton: false, // home按钮
        sceneModePicker: false, // 模式切换按钮
        timeline: false, // 底部的时间轴
        navigationHelpButton: false, // 右上角的帮助按钮,
        selectionIndicator: false, // 是否显示选择指示器
        baseLayer: false,
        fullscreenButton: false,
        sceneMode: Cesium.SceneMode.COLUMBUS_VIEW,
    })
    viewer.imageryLayers.addImageryProvider(imageryProvider_ammapSL)
    // viewer.scene.morphTo2D(0)
}
 
const drawLine = () => {
    props.detailsData.way_lines.forEach(item => {
        analyzeKmzFile(`${item.url}?_t=${new Date().getTime()}`).then(async res => {
            const templateXML = await res.fileInfoObj['wpmz/template.kml']
            const templateXMLJSON = XMLToJSON(templateXML)?.['Document']
            console.log(templateXMLJSON,66969969)
        })
    })
}
 
watch(() => props.detailsData, (newValue, oldValue) => {
    if(newValue){
        drawLine()
    }
})
 
onMounted(() => {
    nextTick(() => {
        init()
    })
})
</script>
<style scoped lang="scss">
#deviceJobDetailsMap {
    height: 100%;
 
    :deep() {
        .cesium-viewer {
            height: 100%;
            overflow: hidden;
 
            .cesium-viewer-cesiumWidgetContainer {
                width: 100%;
                height: 100%;
 
                .cesium-widget {
                    width: 100%;
                    height: 100%;
 
                    canvas {
                        width: 100%;
                        height: 100%;
                    }
                }
            }
        }
 
        .cesium-viewer-bottom {
            display: none;
        }
    }
}
</style>