suerprisePlus
2024-07-16 6069325e1a37cf0462afda1627d4c660735dc57e
src/assets/js/map/mapJsonLayer.js
@@ -17,6 +17,11 @@
  url: null,
  coord: null,
  rectangularSensor: null,
  targetList: [],
  linePath: null,
  richTextPoint1: null,
  wfsLayer: null,
  dataSource: null,
  init(url) {
    this.url = url;
    this.getJsonLayer();
@@ -73,7 +78,7 @@
    });
  },
  setQyeryData(res) {
    this.setTitleSetRest();
    // this.setTitleSetRest();
    if (res.indexOf("海军陆战队") > -1) {
      this.setQueryExtent2();
    } else if (res.indexOf("军事目标") > -1) {
@@ -93,9 +98,28 @@
    encrypt.setPublicKey(modelLayer.publickey + "");
    return encrypt.encrypt(res);
  },
  setQueryTF2(name) {
    const obj = "weaponname = '" + name + "'" + "";
  async setQueryFlywire() {
    const obj = "ejfl = '美空军指挥中心'" + "";
    const filed = this.getPublickey(obj);
    const layer = modelLayer.layers.filter((item) => {
      if (item.name == "建筑") {
        return item;
      }
    });
    if (layer.length <= 0) return;
    const data = getQueryEentity({
      token: getToken(),
      start: 1,
      count: 0,
      containCount: true,
      layerid: layer[0].id,
      dbid: modelLayer.dbid,
      where: filed
    });
  },
  setQueryTF2(name) {
    //  const obj = "weaponname like '%堤丰系统%'" + "";
    const filed = this.getPublickey(name);
    const layer = modelLayer.layers.filter((item) => {
      if (item.name == "武器点") {
        return item;
@@ -111,11 +135,12 @@
      dbid: modelLayer.dbid,
      where: filed
    }).then((response) => {
      if (response.code != 200) return;
      const geom = response.data.items[0];
      const position = [geom._x, geom._y, 0];
      const cylinder = {
        radius: 1000, //半径
        radius: 400000, //半径
        angle: 30, //扫描角度(可选)
        speed: 5, //倍速(可选)
        stackPartitions: 80, //横向网格数(可选)
@@ -126,10 +151,52 @@
        position,
        cylinder
      );
      Viewer.zoomTo(this.rectangularSensor.item);
      earthCtrl.camera.flyTo(
        113.00849464328284,
        10.437567580726105,
        1101300.7027243855,
        57, -45, 0, 2
        );
    });
  },
  setQueryByFiled(name, color, label) {
  setQueryByFiled(name, color) {
    const filed = this.getPublickey(name);
    var objItem = mapServer.listData.filter((item) => {
      if (item.type === "Tileset") {
        return item;
      }
    });
    if (objItem.length <= 0) return;
    var tileset = objItem[0];
    getQueryEentity({
      token: getToken(),
      start: 1,
      count: 0,
      containCount: true,
      layerid: tileset.layerId,
      dbid: modelLayer.dbid,
      where: filed
    }).then((response) => {
      if (response.code != 200) return;
      var std = [];
      const items = response.data.items;
      items.map((item) => {
        std.push(item.seid);
      });
      nextTick(() => {
        if (std.length > 0) {
          this.setTilesetColorChange(tileset, std, color);
        }
      });
    });
  },
  setQueryByFiledList(list, flag) {
    const result = list[flag];
    const name = result.name;
    const color = result.color;
    const obj = "targettype = '" + name + "'" + "";
    const filed = this.getPublickey(obj);
    var objItem = mapServer.listData.filter((item) => {
@@ -152,17 +219,45 @@
      var std = [];
      const items = response.data.items;
      items.map((item) => {
        if (item.targettype == name) {
          std.push(item.seid);
        }
        // if (item.targettype == name) {
        std.push(item.seid);
        // }.
      });
      nextTick(() => {
        if (std.length <= 0) return;
        this.setTilesetColorChange(tileset, std, color);
        if (std.length > 0) {
          this.targetList.push({
            ids: std,
            color: color
          });
        }
        flag = flag + 1;
        if (flag >= list.length) {
          this.setTilesetColorChangeTarget();
        } else {
          this.setQueryByFiledList(list, flag);
        }
      });
    });
  },
  setTitleSetRest() {
    this.targetList = [];
    if (this.dataSource) {
      Viewer.dataSources.remove(this.dataSource);
      this.dataSource = null
    }
    if (this.wfsLayer) {
      // this.wfsLayer.removeFromMap();
      this.wfsLayer.destroy();
    }
    if (this.linePath) {
      this.linePath.clear();
      this.linePath = null;
    }
    if (this.richTextPoint1) {
      this.richTextPoint1.deleteObject();
      this.richTextPoint1 = null;
    }
    if (this.rectangularSensor) {
      this.rectangularSensor.wall.forEach((wall) => {
        Viewer.entities.remove(wall);
@@ -193,11 +288,98 @@
          const id = feature.getProperty("id");
          if (ids.indexOf(id) > -1) {
            return new SmartEarth.Cesium.Color.fromCssColorString(color);
          } else {
            return new SmartEarth.Cesium.Color.fromCssColorString("#FFFFFF");
          }
        }
      }
    });
  },
  setTilesetColorChangeTarget() {
    var objItem = mapServer.listData.filter((item) => {
      if (item.type === "Tileset") {
        return item;
      }
    });
    if (objItem.length <= 0) return;
    var tileset = objItem[0].layer;
    const list = this.targetList;
    tileset.style = new Cesium.Cesium3DTileStyle({
      color: {
        evaluateColor: (feature) => {
          const id = feature.getProperty("id");
          for (var i in list) {
            if (list[i].ids.indexOf(id) > -1) {
              return new SmartEarth.Cesium.Color.fromCssColorString(
                list[i].color
              );
            }
          }
          // if (ids.indexOf(id) > -1) {
          //   return new SmartEarth.Cesium.Color.fromCssColorString(color);
          // }
        }
      }
    });
  },
  setAddWfsLayer() {
    this.wfsLayer = earthCtrl.factory.createWfsLayer("polygon", {
      urls: "https://cim.smartearth.cn/SEserver/wfsserver/SubicBayWeapon_wfs",
      layer: "weapons",
      outlineColor: "#ff0000",
      alpha: 0
    });
  },
  setAddWfsJson() {
    const url = this.getQueryUrl("SubicBayWeapon_wfs", "weapons");
    const that = this;
    Cesium.GeoJsonDataSource.load(url, {
      fill: Cesium.Color.fromCssColorString("#FFFFFF00"),
      stroke: Cesium.Color.fromCssColorString("#FFFFFF00"), //多边形或线的颜色
      strokeWidth: 0 //多边形或线 宽度
    }).then((dataSource) => {
      that.dataSource = dataSource;
      const entities = that.dataSource.entities.values;
      entities.map((item) => {
        item.polygon._material.color =
          Cesium.Color.fromCssColorString("#FFFFFF00");
        item.polygon.heightReference =
          Cesium.HeightReference.RELATIVE_TO_GROUND; // 贴地
        item.polygon.height = 0; // 距地高度0米
        var polyPositions = item.polygon.hierarchy.getValue().positions;
        var polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center; //中心点
        polyCenter = Cesium.Ellipsoid.WGS84.scaleToGeodeticSurface(polyCenter);
        item.position = polyCenter;
        let positions = item.polygon.hierarchy._value.positions;
        // 设置面轮廓
        item.polyline = new Cesium.PolylineGraphics({
          positions: positions,
          clampToGround: true, // 贴地
          width: 5,
          material: Cesium.Color.fromCssColorString("#FFA500")
        });
        const label_name = item.name ? item.name : "";
        item.label = {
          text: label_name,
          font: "500 16x sans-serif",
          style: Cesium.LabelStyle.FILL_AND_OUTLINE, // 字体样式
          fillColor: new Cesium.Color.fromCssColorString("#FFFFFF"),
          outlineWidth: 1, // 字体外圈线宽度(同样也有颜色可设置)
          outlineColor: new Cesium.Color.fromCssColorString("#FFFFFF"),
          verticalOrigin: Cesium.VerticalOrigin.BASELINE, // 垂直位置
          pixelOffset: new Cesium.Cartesian2(0, 0), // 中心位置
          disableDepthTestDistance: Number.POSITIVE_INFINITY,
          distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
            500.0,
            3000.0
          )
          // showBackground:true,
          // backgroundColor: new Cesium.Color(26 / 255, 196 / 255, 228 / 255, 1.0) //背景顔色
        };
      });
      Viewer.dataSources.add(that.dataSource);
    });
  },
  getTileSet() {
@@ -211,13 +393,13 @@
    }
    return objItem[0];
  },
  setQueryExtent2() {
  setQueryExtent2(res, boolen) {
    const tileset = this.getTileSet();
    if (!tileset) {
      return;
    }
    const obj = "ejfl like '%空军基地%'";
    const filed = this.getPublickey(obj);
    //
    const filed = this.getPublickey(res);
    getQueryEentity({
      token: getToken(),
      start: 1,
@@ -229,10 +411,133 @@
    }).then((response) => {
      if (response.code != 200) return;
      const items = response.data.items[0];
      this.getQueryGeomExtent(items, tileset.layerId);
      const obj_val = response.data.items.filter((rs) => {
        if (rs.seid == "1_b810b88e1c7144bcb1c73eb6f45c3cf0") {
          return rs;
        }
      });
      if (boolen) {
        this.getQueryGeomExtent(obj_val[0], tileset.layerId);
      } else {
        this.getshowQueryExtentLabel(obj_val[0]);
      }
    });
  },
  getshowQueryExtentLabel(res) {
    this.richTextPoint1 = earthCtrl.factory.createRichTextPoint(
      res.ejfl,
      [res.lon, res.lat],
      {
        fontColor: "#ffff00",
        fontSize: 18
      },
      "0"
    );
    const center = { lon: res.lon, lat: res.lat };
    const cities = [
      {
        lon: 120.26923413,
        lat: 14.7887635155
      },
      {
        lon: 120.266906151,
        lat: 14.799529948
      },
      {
        lon: 120.267382051,
        lat: 14.788105695
      },
      {
        lon: 120.26710735,
        lat: 14.7993756478
      },
      {
        lon: 120.286842844,
        lat: 14.7924281921
      },
      {
        lon: 120.286923225,
        lat: 14.7933412456
      },
      {
        lon: 120.266707102,
        lat: 14.7996392512
      },
      {
        lon: 120.268701861,
        lat: 14.7886095373
      },
      {
        lon: 120.270684963,
        lat: 14.7919831852
      },
      {
        lon: 120.266265954,
        lat: 14.7999317012
      },
      {
        lon: 120.269896499,
        lat: 14.7901043245
      },
      {
        lon: 120.286600837,
        lat: 14.7926858017
      },
      {
        lon: 120.286991515,
        lat: 14.7927451318
      },
      {
        lon: 120.286760149,
        lat: 14.7930139536
      },
      {
        lon: 120.28633835,
        lat: 14.7929774056
      },
      {
        lon: 120.266684567,
        lat: 14.7877010021
      },
      {
        lon: 120.283448259,
        lat: 14.7972858134
      },
      {
        lon: 120.286503613,
        lat: 14.7932728306
      },
      {
        lon: 120.286649886,
        lat: 14.7935912152
      }
    ];
    let pathOption = {
      width: 3, //线宽(可选)
      color: "#00ffff", //线颜色(可选),
      LightSpot: true, //是否使用光点效果(可选)
      LightSpotColor: "#ffffff", //光点颜色(可选)
      height: 100
    };
    this.linePath = earthCtrl.factory.createTrailLinePath(
      center,
      cities,
      pathOption
    );
  },
  getQueryGeomExtent(items, layerid) {
    var geom = mapConfig.setPointToCrical(items.lon, items.lat, 1);
    const token = getToken();