forked from drone/command-center-dashboard

shuishen
2025-04-16 a7e6761ba0cfccdf33ed552eb2d3b783c8e4ab4a
src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceJob/DeviceJobDetails/DeviceJobDetailsMap.vue
@@ -8,8 +8,10 @@
import { analyzeKmzFile, removeTextKey, XMLToJSON } from '@/utils/cesium/kmz'
import ImageTrailMaterial from '@/utils/cesium/ImageTrailMaterial'
import lineImg from '@/assets/images/arrow-right-blue.png'
import uavImg from '@/assets/images/home/useUavHome/uavImg.png'
import { getCenterPoint } from '@/utils/cesium/mapUtil'
import rwqfdImg from '@/assets/images/signMachineNest/rwqfd.png'
import endPointImg from '@/assets/images/EndPointicon.png'
import { addBlueFilter } from '@/utils/cesium/common'
import { flyVisual } from '@/utils/cesium/mapUtil'
const props = defineProps(['detailsData'])
@@ -40,7 +42,15 @@
      baseLayer: false,
      fullscreenButton: false,
   })
   viewer.imageryLayers.addImageryProvider(imageryProvider_ammapSL)
   const gdLayer = viewer.imageryLayers.addImageryProvider(imageryProvider_ammapSL)
   const options = {
      bInvertColor: true,
      bFilterColor: true,
      filterColor: '#4e70a6'
   }
   // 添加蓝色滤镜
   addBlueFilter(options,viewer,gdLayer)
   viewer.scene.morphTo2D(0)
   //设置默认点
   viewer.camera.setView({
@@ -54,14 +64,26 @@
      const [lon, lat] = item.Point.coordinates.split(',')
      return Cartesian3.fromDegrees(Number(lon), Number(lat))
   })
   // 起点
   viewer.entities.add({
      position: positions[0],
      billboard: {
         image: new Cesium.ConstantProperty(uavImg),
         width: 24,
         height: 24,
         image: new Cesium.ConstantProperty(rwqfdImg),
         width: 70,
         height: 70,
      },
   })
   // 终点
   viewer.entities.add({
      position: positions[positions.length-1],
      billboard: {
         image: new Cesium.ConstantProperty(endPointImg),
         width: 30,
         height: 30,
         verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 底部对齐
      },
   })
   // 路径线
   viewer.entities.add({
      polyline: {
         width: 4,
@@ -74,20 +96,6 @@
         }),
         clampToGround: false,
      },
   })
}
// 飞到中心点
function flyToPoints(lngLatArr) {
   if (!Array.isArray(lngLatArr) || lngLatArr.length === 0) return
   const positions = lngLatArr.map(([lon, lat]) =>
      Cesium.Cartesian3.fromDegrees(Number(lon), Number(lat))
   )
   // 计算包围盒 BoundingSphere(所有点的外接球)
   const boundingSphere = Cesium.BoundingSphere.fromPoints(positions)
   viewer.camera.flyToBoundingSphere(boundingSphere, {
      duration: 0,
      offset: new Cesium.HeadingPitchRange(0, 0, boundingSphere.radius * 2),
   })
}
@@ -106,11 +114,10 @@
const drawLine = async () => {
   const res = await Promise.all(props.detailsData.way_lines.map(item => analysis(item.url)))
   res.map(item => renderingLine(item))
   console.log(res,'jiexi')
   const allPoint = res
      .flatMap(item => item.Placemark)
      .map(item => item.Point.coordinates.split(','))
   flyToPoints(allPoint)
   flyVisual(allPoint,viewer)
}
const removeMap = () => {