husq
2023-09-27 2c2bc8614c8ea0ce386369eb4924da1e6aa052d1
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
import { ELocalStorageKey, EDeviceTypeName } from '/@/types'
import dockIcon from '/@/assets/icons/dock.png'
import rcIcon from '/@/assets/icons/rc.png'
import droneIcon from '/@/assets/icons/drone.png'
import * as Cesium from 'cesium'
interface billboardSetting {
    image: string,
    scale?: number,
    [key: string]: any
}
interface pointSetting {
    pixelSize: number,
    outlineWidth: number,
    [key: string]: any
}
interface labelSetting {
    text: string,
    font: string,
    outlineWidth: number,
    [key: string]: any
}
interface pointOption {
    longitude: number
    latitude: number
    point?: pointSetting
    billboard?: billboardSetting
    label?: labelSetting
}
 
export function cesiumOperation (viewer: any) {
  const cesiumExample = viewer
  const icons = new Map([
    [EDeviceTypeName.Aircraft, droneIcon],
    [EDeviceTypeName.Gateway, rcIcon],
    [EDeviceTypeName.Dock, dockIcon]
  ])
  // 清除所有标记点
  function removeAllPoint () {
    if (cesiumExample) {
      cesiumExample?.entities?.removeAll()
    }
  }
  // 添加标记点
  function addPoint (pointOption:pointOption) {
    if (!pointOption.longitude && !pointOption.latitude) return
    cesiumExample.entities.add({
      position: Cesium.Cartesian3.fromDegrees(pointOption.longitude, pointOption.latitude),
      billboard: pointOption.billboard,
      point: pointOption.point
    })
  }
  // 飞行 flyto
  function flyTo (pointOption:pointOption, time: number = 3) {
    if (!pointOption.longitude && !pointOption.latitude) return
    const destination = Cesium.Cartesian3.fromDegrees(pointOption.longitude, pointOption.latitude, 1000)
    const duration = time
    cesiumExample.camera.flyTo({
      destination,
      duration
    })
  }
 
  return {
    addPoint,
    removeAllPoint,
    flyTo
  }
}