guonan
10 天以前 b6ab34b586ee40b552fa64815148f58935e789ea
src/utils/map.js
@@ -1,5 +1,8 @@
import { showDeviceDetail, deviceDetail, className, dialogPositon } from "@/store";
import { componentToSlot } from "element-plus/es/components/table-v2/src/utils.mjs";
import { useSimStore } from '@/store/simulation'
export function addTerrain(url) {
  // console.log("加载地形");
  var terrainProvider = new Cesium.CesiumTerrainProvider({
@@ -58,15 +61,33 @@
}
let entities = [];
// 假设你有一个全局存储 entities 的结构(建议用 Map 提高性能查找)
const pointEntityMap = new Map(); // key: id, value: entity
export function createPoint(option) {
  const { id, type = "", name = "默认名称", view, latitude, longitude, height, callback, imgWidth = 56, imgHeight = 67, showBillboard = true, showLabel = true, className = "device" } = option;
  const {
    id,
    type = "",
    deviceTypeName = "",
    name = "默认名称",
    view,
    latitude,
    longitude,
    height,
    callback,
    imgWidth = 56,
    imgHeight = 67,
    showBillboard = true,
    showLabel = true,
    className = "device"
  } = option;
  const realType = type || deviceTypeName;
  // 如果已经存在该 id 的 entity,则跳过创建
  if (pointEntityMap.has(id)) {
    console.log(`点 ${id} 已存在,跳过创建`);
    return;
    clearAllPoints()
    console.log(`点 ${id} 已存在,已清除重建`);
  }
  let position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height || 50);
@@ -75,14 +96,17 @@
    id,
    name: name,
    position: position,
    type: type,
    type: realType,
    view: view,
    attrs: option,
    className: className,
    label: {
      text: name || "默认标签",
      font: "14pt Source Han Sans CN",
      fillColor: type.includes("active") ? Cesium.Color.AQUA : Cesium.Color.WHITE,
      fillColor: (typeof realType === 'string' && realType.includes("active"))
        ? Cesium.Color.AQUA
        : Cesium.Color.WHITE,
      // fillColor: Cesium.Color.WHITE,
      backgroundColor: showBillboard ? Cesium.Color.BLACK.withAlpha(0.5) : Cesium.Color.SKYBLUE,
      showBackground: true,
      outline: false,
@@ -94,9 +118,10 @@
      verticalOrigin: Cesium.VerticalOrigin.CENTER,
      horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
      pixelOffset: new Cesium.Cartesian2(0, -40),
      distanceDisplayCondition: type.includes("河流")
      distanceDisplayCondition: (typeof realType === 'string' && realType.includes("河流"))
        ? new Cesium.DistanceDisplayCondition(0, 5000000)
        : new Cesium.DistanceDisplayCondition(0, 50000),
      // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 50000),
      heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
      show: showLabel,
    },
@@ -112,9 +137,11 @@
    pixelOffset: new Cesium.Cartesian2(0, 3),
    scale: 0.8,
    scaleByDistance: new Cesium.NearFarScalar(1.5e2, 1.0, 1.5e7, 0.5),
    distanceDisplayCondition: type.includes("河流")
    distanceDisplayCondition: (typeof realType === 'string' && realType.includes("河流"))
      ? new Cesium.DistanceDisplayCondition(0, 5000000)
      : new Cesium.DistanceDisplayCondition(0, 50000),
    distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 50000),
    show: showBillboard,
    heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
    backgroundColor: showBillboard ? Cesium.Color.BLACK.withAlpha(0.8) : Cesium.Color.SKYBLUE,
@@ -172,7 +199,18 @@
    if (Cesium.defined(picked) && id) {
      const entity = picked?.id;
      if (entity && entity.className) {
      const simStore = useSimStore()
      if (entity && entity.attrs && !simStore.openDia && entity.attrs.type && entity.attrs.type == '泥位计') {
        let obj = {
          deviceName: entity.attrs.deviceName,
          latitude: entity.attrs.lat,
          longitude: entity.attrs.lon
        }
        simStore.selectNWJ = obj
        showDeviceDetail.value = false;
        console.log(simStore.selectNWJ, 'map.js点击泥位计')
      }
      if (entity && entity.className && simStore.openDia) {
        showDeviceDetail.value = true;
        deviceDetail.value = entity.attrs;
        className.value = entity.className;