import { getMubiaoHisTraj } from '@/api/Mubiao' const baseMap = new Map() const mubiaoMap = new Map() const satelliteMap = new Map() export const useEntity = () => { return { baseMap, mubiaoMap, satelliteMap, showEntity, getHisTraj, getMBEntityOpt, changeIconOrModel, } } function showEntity(show: boolean) { ;[...mubiaoMap.values()].forEach(entity => { entity.show = show }) } async function getHisTraj({ id, timeRange, }: { id: string timeRange: string[] }) { const [timeBegin, timeEnd] = timeRange const { code, data: result } = await getMubiaoHisTraj({ target_id: id, timeBegin, timeEnd, }) if (code !== '200') { return } const timeArray = result.map(item => { return new Date(item.time).getTime() }) const posArray = result.map(item => item.position).flat(Infinity) const points = result.reduce((acc, point, index, array) => { const { time, position } = point const cartesian3 = Cesium.Cartesian3.fromDegrees(...position) if (index === 0) { acc.push({ time: 0, position: cartesian3 }) } else { acc.push({ time: (new Date(time).getTime() - new Date(array[0].time).getTime()) / 1000, position: cartesian3, }) } return acc }, []) return { points, posArray, timeArray } } function getMBEntityOpt({ id, targetType, name, }: { id: string targetType: string name?: string }) { const mubiaoDict = window.settings.mbDict[targetType] return { label: { text: `${id}`, font: '12pt sans-serif', fillColor: Cesium.Color.YELLOW, outlineColor: Cesium.Color.BLACK, outlineWidth: 2, style: Cesium.LabelStyle.FILL_AND_OUTLINE, pixelOffset: new Cesium.Cartesian2(20, -20), pixelOffsetScaleByDistance: new Cesium.NearFarScalar( 7000000, 1.0, 18000000, 0.4 ), scaleByDistance: new Cesium.NearFarScalar(7000000, 1.0, 18000000, 0.4), }, billboard: { show: true, image: mubiaoDict.icon, width: 30, height: 30, color: Cesium.Color.fromCssColorString(mubiaoDict.color), scaleByDistance: new Cesium.NearFarScalar(7000000, 1.0, 18000000, 0.4), }, model: { show: false, uri: mubiaoDict.model, scale: 1000, minimumPixelSize: 50, }, ellipsoid: { show: true, radii: new Cesium.Cartesian3(100000, 100000, 100000), innerRadii: new Cesium.Cartesian3(1.0, 1.0, 1.0), maximumCone: Cesium.Math.toRadians(90), minimumCone: Cesium.Math.toRadians(40), minimumClock: Cesium.Math.toRadians(20), maximumClock: Cesium.Math.toRadians(90), material: Cesium.Color.fromCssColorString('#00dcff44'), outline: true, outlineColor: Cesium.Color.fromCssColorString('#00dcff'), outlineWidth: 1, distanceDisplayCondition: new Cesium.DistanceDisplayCondition( 0.0, 10.5e8 ), slicePartitions: 24, stackPartitions: 36, }, } } function changeIconOrModel() { ;[...mubiaoMap.values()].forEach(entity => { entity.model.show = !entity.model.show._value entity.billboard.show = !entity.billboard.show._value }) }