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
|
}
|
}
|