管道基础大数据平台系统开发-【前端】-新系統界面
Surpriseplus
2023-02-28 fb207b8eec40b5111018db0ae38c3e9fef56f0aa
src/views/Synthesis/LeftMenu.vue
@@ -5,23 +5,58 @@
      @click="setChangeTwoMenu(item)"
      v-for="(item, index) in setListTwoMenu"
      :class="{ lefMenuDivActive: showTwoMenuFlag == item.id }"
      :key="index"
    >
      <div class="menuTwoImage" :class="item.css"></div>
      <div
        class="menuTwoImage"
        :class="item.css"
      ></div>
      <div>{{ $t(item.label) }}</div>
    </div>
    <mapinfo ref="mapinfo" />
    <maplayer ref="maplayer" />
    <queryinfo ref="queryinfo" />
    <input type="file" accept=".kml" class="file" style="display: none" />
    <input
      type="file"
      accept=".kml"
      class="file"
      style="display: none"
    />
    <input
      :accept="'.shp, .shx, .dbf, .prj'"
      style="display: none"
      ref="pathClear"
      type="file"
      name="file"
      id="shpFile"
      multiple="multiple"
      @change="handleOpenShp()"
    />
  </div>
</template>
<script>
import { transform } from "ol/proj"
import mapinfo from "../Tools/mapinfo.vue"
import maplayer from "../Tools/maplayer.vue"
import queryinfo from "../Tools/queryinfo.vue"
import { transform } from "ol/proj";
import mapinfo from "../Tools/mapinfo.vue";
import maplayer from "../Tools/maplayer.vue";
import queryinfo from "../Tools/queryinfo.vue";
import $ from "jquery";
import { getToken } from "@/utils/auth";
import ImageWMS from "ol/source/ImageWMS";
import Image from "ol/layer/Image";
import GeoJSON from "ol/format/GeoJSON.js";
import { Vector as VectorSource } from "ol/source";
import { Vector as VectorLayer } from "ol/layer";
import { perms_selectLayers } from '../../api/api.js'
import {
  OverviewMap,
  defaults as defaultControls,
  FullScreen,
  ScaleLine,
  Rotate,
} from "ol/control.js";
import * as turf from "@turf/turf";
import { geometry } from "@turf/turf";
export default {
  components: { mapinfo, maplayer, queryinfo },
  data() {
@@ -35,6 +70,18 @@
            label: "synthesis.layer",
            name: "图层管理",
            css: "twoMenu_imge11",
          },
          {
            id: "b1",
            label: "synthesis.split",
            name: "分屏",
            css: "twoMenu_imge21",
          },
          {
            id: "b9",
            label: "synthesis.undergroundMode",
            name: "地下模式",
            css: "twoMenu_imge29",
          },
        ],
        [
@@ -285,6 +332,12 @@
            css: "twoMenu_imge81",
          },
          {
            id: "h8",
            label: "synthesis.addlabel",
            name: "文字",
            css: "twoMenu_imge88",
          },
          {
            id: "h2",
            label: "synthesis.line",
            name: "线",
@@ -305,15 +358,29 @@
          {
            id: "h5",
            label: "synthesis.import",
            name: "导入",
            name: "导入KML",
            css: "twoMenu_imge85",
          },
          {
            id: "h6",
            label: "synthesis.export",
            name: "导出",
            name: "导出KML",
            css: "twoMenu_imge86",
          },
          {
            id: "h9",
            label: "synthesis.import1",
            name: "导入SHP",
            css: "twoMenu_imge85",
          },
          {
            id: "h10",
            label: "synthesis.export1",
            name: "导出SHP",
            css: "twoMenu_imge86",
          },
          {
            id: "h7",
            label: "synthesis.removepaint",
@@ -348,153 +415,494 @@
      isslopeFlag: false,
      isContrastFlag: false,
      UndergroundMode: false,
    }
      scaleLine: null,
      Excavation: false,
      entityaLayers: [],
      isMenuFlag: null,
      isRouter: false, //路径分析
      isPiple: false, //管道分析
      DXZPState: null, //地形整平
    };
  },
  methods: {
    //二級菜单点击切换
    setChangeTwoMenu(res) {
      this.showTwoMenuFlag = res.id
      this.$store.state.mapMenuBoolean = false
      this.$store.state.mapMenuBoxFlag = null
      this.$store.state.mapPopBoolean = false
      this.$store.state.mapPopBoxFlag = null
      var val = res.id[0]
      var val = res.id[0];
      if (window.model != null) {
        window.model.deleteObject()
        window.model = null
        window.model.deleteObject();
        window.model = null;
      }
      sgworld.Analysis.clearCurtainContrast();
      if (this.isMenuFlag == "d") {
        this.clearAllAnalsy();
      }
      if (this.isMenuFlag != val) {
        this.$store.state.mapMenuBoolean = false;
        this.$store.state.mapMenuBoxFlag = null;
        this.$store.state.mapPopBoolean = false;
        this.$store.state.mapPopBoxFlag = null;
        sgworld.Creator.SimpleGraphic.clear();
        this.isMenuFlag = val;
        if (this.entityaLayers.length != 0) {
          for (var i in this.entityaLayers) {
            sgworld.Viewer.entities.remove(this.entityaLayers[i]);
          }
          this.entityaLayers = [];
        }
        for (var i in this.$store.state.queryInfo) {
          sgworld.Viewer.entities.remove(this.$store.state.queryInfo[i]);
        }
        this.$store.state.queryInfo = [];
        if (this.$store.state.primitLayer != null) {
          sgworld.Viewer.entities.remove(this.$store.state.primitLayer);
          sgworld.Creator.DeleteObject(this.$store.state.primitLayer);
          this.$store.state.primitLayer = null;
        }
      }
      this.showTwoMenuFlag = res.id;
      switch (val) {
        case "a": //图层管理
          this.setCoverage(res.id)
          break
          this.setCoverage(res.id);
          break;
        case "b":
          this.setViewport(res.id)
          break
          this.setViewport(res.id);
          break;
        case "c":
          this.setWander(res.id)
          break
          this.setWander(res.id);
          break;
        case "d":
          this.setAnalsy(res.id)
          break
          this.setAnalsy(res.id);
          break;
        case "e":
          this.setIquery(res.id)
          break
          this.setIquery(res.id);
          break;
        case "f":
          this.setOrientation(res.id)
          break
          this.setOrientation(res.id);
          break;
        case "j":
          this.setMeasurement(res.id)
          break
          this.setMeasurement(res.id);
          break;
        case "h":
          sgworld.Creator.SimpleGraphic.edit(true, { editProp: true })
          this.setPlot(res.id)
          break
          sgworld.Creator.SimpleGraphic.edit(true, { editProp: true });
          this.setPlot(res.id);
          break;
      }
    },
    setPlot(res) {
      switch (res) {
        case "h1":
          sgworld.Creator.createSimpleGraphic("point", {}, function (entity) {})
          break
          sgworld.Creator.createSimpleGraphic(
            "point",
            {},
            function (entity) { }
          );
          break;
        case "h2":
          sgworld.Creator.createSimpleGraphic(
            "polyline",
            {},
            function (entity) {}
          )
          break
            function (entity) { }
          );
          break;
        case "h3":
          sgworld.Creator.createSimpleGraphic(
            "rectangle",
            {},
            function (entity) {}
          )
          break
            function (entity) { }
          );
          break;
        case "h4":
          sgworld.Creator.createSimpleGraphic(
            "polygon",
            {},
            function (entity) {}
          )
          break
            function (entity) { }
          );
          break;
        case "h5":
          this.handleOpenClick()
          break
          this.handleOpenClick();
          break;
        case "h6":
          this.handleSaveClick()
          break
          this.handleSaveClick();
          break;
        case "h9":
          // this.handleOpenShp();
          $("#shpFile").click();
          break;
        case "h10":
          this.handleSaveShp();
          break;
        case "h7":
          sgworld.Creator.SimpleGraphic.clear()
          break
          sgworld.Creator.SimpleGraphic.clear();
          for (var i in this.entityaLayers) {
            sgworld.Viewer.entities.remove(this.entityaLayers[i]);
          }
          this.entityaLayers = [];
          break;
        case "h8":
          sgworld.Creator.createSimpleGraphic(
            "label",
            {},
            function (entity) { }
          );
          break;
      }
    },
    handleSaveClick() {
      let funDownload = function (content, filename) {
        let eleLink = document.createElement("a")
        eleLink.download = filename
        eleLink.style.display = "none"
        let eleLink = document.createElement("a");
        eleLink.download = filename;
        eleLink.style.display = "none";
        // 字符内容转变成blob地址
        let blob = new Blob([content])
        eleLink.href = URL.createObjectURL(blob)
        let blob = new Blob([content]);
        eleLink.href = URL.createObjectURL(blob);
        // 触发点击
        document.body.appendChild(eleLink)
        eleLink.click()
        document.body.appendChild(eleLink);
        eleLink.click();
        // 然后移除
        document.body.removeChild(eleLink)
      }
      let entities = new Cesium.EntityCollection()
      let dataSources = sgworld.Viewer.dataSources
        document.body.removeChild(eleLink);
      };
      let entities = new Cesium.EntityCollection();
      let dataSources = sgworld.Viewer.dataSources;
      for (let i = 0, j = dataSources.length; i < j; i++) {
        for (let v of dataSources.get(i).entities.values) {
          entities.add(v)
          entities.add(v);
        }
      }
      for (let v of sgworld.Viewer.entities.values) {
        entities.add(v)
        entities.add(v);
      }
      if (entities.values.length) {
        console.log(sgworld.Viewer.entities)
        console.log(sgworld.Viewer.entities);
        let promise = Cesium.exportKml({ entities: sgworld.Viewer.entities })
        console.log(entities)
        let promise = Cesium.exportKml({ entities: sgworld.Viewer.entities });
        console.log(entities);
        // let promise = Cesium.exportKml({ entities: entities });
        promise.then(function (e) {
          funDownload(e.kml, new Date().getTime() + ".kml")
        })
          funDownload(e.kml, new Date().getTime() + ".kml");
        });
      } else {
        alert("当前场景没有entities实体")
        alert("当前场景没有entities实体");
      }
    },
    handleSaveShp() {
      var entities = sgworld.Viewer.entities.values;
      if (entities.length == 0) {
        return;
      }
      var std = [];
      for (var i in entities) {
        var type, fillColor, alpha, wkt, name;
        var bak = {};
        if (entities[i].name) {
          name = entities[i].name;
        }
        if (entities[i].properties) {
          var properties = entities[i].properties.propertyNames;
          for (var j in properties) {
            bak[properties[j]] = entities[i].properties[properties[j]]._value;
          }
        } else {
          bak = {
            name: entities[i].name,
          };
        }
        if (entities[i].rectangle) {
          //矩形
          type = "rectangle";
          var east = Cesium.Math.toDegrees(
            entities[i].rectangle.coordinates.getValue().east
          );
          var north = Cesium.Math.toDegrees(
            entities[i].rectangle.coordinates.getValue().north
          );
          var west = Cesium.Math.toDegrees(
            entities[i].rectangle.coordinates.getValue().west
          );
          var south = Cesium.Math.toDegrees(
            entities[i].rectangle.coordinates.getValue().south
          );
          var line = turf.polygon([
            [
              [east, north],
              [west, north],
              [west, south],
              [east, south],
              [east, north],
            ],
          ]);
          wkt = this.$wkt.convert(line.geometry);
          var fill = entities[i].rectangle._material._color._value;
          fillColor = fill.red + "," + fill.green + "," + fill.blue;
          alpha = fill.alpha;
        } else if (entities[i].point) {
          //点
          type = "point";
          let ellipsoid = Viewer.scene.globe.ellipsoid;
          let cartographic = ellipsoid.cartesianToCartographic(
            entities[i].position.getValue()
          );
          let lat = Cesium.Math.toDegrees(cartographic.latitude);
          let lng = Cesium.Math.toDegrees(cartographic.longitude);
          let alt = cartographic.height;
          let point = turf.point([lng, lat, alt]);
          wkt = this.$wkt.convert(point.geometry);
          var fill = entities[i].point._color._value;
          fillColor = fill.red + "," + fill.green + "," + fill.blue;
          alpha = fill.alpha;
        } else if (entities[i].polygon) {
          type = "polygon";
          var fill = entities[i].polygon._material._color._value;
          fillColor = fill.red + "," + fill.green + "," + fill.blue;
          alpha = fill.alpha;
          var geometry = entities[i].polygon.hierarchy.getValue().positions;
          var coordinates = [];
          for (var k in geometry) {
            coordinates.push(this.setCartesianToEightFour(geometry[k]));
          }
          if (coordinates[0] != coordinates[1]) {
            coordinates.push(coordinates[0]);
          }
          var polygon = turf.polygon([coordinates]);
          wkt = this.$wkt.convert(polygon.geometry);
        } else if (entities[i].polyline) {
          type = "polyline";
          var coordinates = [];
          var geometry = entities[i].polyline.positions.getValue();
          for (var k in geometry) {
            coordinates.push(this.setCartesianToEightFour(geometry[k]));
          }
          var polyline = turf.lineString(coordinates);
          wkt = this.$wkt.convert(polyline.geometry);
          var fill = entities[i].polyline._material._color._value;
          fillColor = fill.red + "," + fill.green + "," + fill.blue;
          alpha = fill.alpha;
        } else if (entities[i].label) {
          type = "label";
          let ellipsoid = Viewer.scene.globe.ellipsoid;
          let cartographic = ellipsoid.cartesianToCartographic(
            entities[i].position.getValue()
          );
          let lat = Cesium.Math.toDegrees(cartographic.latitude);
          let lng = Cesium.Math.toDegrees(cartographic.longitude);
          let alt = cartographic.height;
          let point = turf.point([lng, lat, alt]);
          wkt = this.$wkt.convert(point.geometry);
          var fill = entities[i].label.backgroundColor._value;
          fillColor = fill.red + "," + fill.green + "," + fill.blue;
          alpha = fill.alpha;
        }
        std.push({
          id: parseInt(i) + 1,
          type: type,
          fillColor: fillColor,
          opacity: alpha,
          name: name,
          bak: JSON.stringify(bak),
          wkt: wkt,
        });
      }
      $.ajax({
        url: BASE_URL + "/comprehensive/downloadShp?token=" + getToken(),
        type: "POST",
        data: JSON.stringify(std),
        dataType: "json", // html、json、jsonp、script、text
        contentType: "application/json", // "application/x-www-form-urlencoded"
        success: (rs) => {
          if (rs && rs.code == 200) {
            var a = document.createElement("a"); // 创建一个a标签元素
            a.style.display = "none"; // 设置元素不可见
            a.href =
              BASE_URL +
              "/comprehensive/downloadFile?token=" +
              getToken() +
              "&guid=" +
              rs.result;
            document.body.appendChild(a); // 加入
            a.click(); // 触发点击,下载
            document.body.removeChild(a); // 释放
          }
        },
        error: function (e) { },
      });
    },
    handleOpenShp() {
      var formData = new FormData();
      var fs = document.getElementById("shpFile");
      var exts = [".shp", ".shx", ".dbf", ".prj"];
      var count = 0;
      for (var i = 0, c = fs.files.length; i < c; i++) {
        var name = fs.files[i].name.toLocaleLowerCase();
        var ext = name.substring(name.lastIndexOf("."));
        if (exts.indexOf(ext) > -1) {
          count++;
          formData.append(fs.files[i].name, fs.files[i]); // fs.files[i].name,file
        }
      }
      if (count != 4) {
        alert("ShapeFile文件选择不全!");
        return;
      }
      var that = this;
      $.ajax(BASE_URL + "/comprehensive/uploadShp?token=" + getToken(), {
        type: "post",
        data: formData,
        async: true,
        cache: false,
        processData: false,
        contentType: false,
        success: function (rs) {
          if (rs.code == 200) {
            that.showShpEntity(rs.result);
          }
        },
        error: function (e) {
          console.error(e);
        },
      });
      document.getElementById("shpFile").value = "";
    },
    showShpEntity(res) {
      for (var i in res) {
        var wkt = this.$wkt.parse(res[i].wkt);
        var fillColor = res[i].fillColor.split(",");
        var color = new Cesium.Color(
          parseFloat(fillColor[0]),
          parseFloat(fillColor[1]),
          parseFloat(fillColor[2]),
          res[i].opacity
        );
        var name = res[i].name;
        switch (res[i].type) {
          case "rectangle":
          case "polygon":
            var std = [];
            var geo = wkt.coordinates[0];
            for (var i in geo) {
              std.push(geo[i][0]);
              std.push(geo[i][1]);
            }
            var entity = Viewer.entities.add({
              name: name,
              polygon: {
                hierarchy: Cesium.Cartesian3.fromDegreesArray(std),
                //height : 100000,
                material: color,
                outline: true,
                outlineColor: color,
              },
            });
            this.entityaLayers.push(entity);
            break;
          case "point":
            let point = Viewer.entities.add({
              name: name,
              position: Cesium.Cartesian3.fromDegrees(
                wkt.coordinates[0],
                wkt.coordinates[1]
              ), //经纬度转世界坐标
              point: {
                show: true,
                color: color,
                pixelSize: 10,
                outlineColor: color,
                outlineWidth: 3,
                heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
                disableDepthTestDistance: Number.POSITIVE_INFINITY,
              },
            });
            this.entityaLayers.push(point);
            break;
          case "polyline":
            var std = [];
            var geo = wkt.coordinates;
            for (var i in geo) {
              std.push(geo[i][0]);
              std.push(geo[i][1]);
            }
            let line = Viewer.entities.add({
              name: name,
              polyline: {
                //经纬度数组转世界坐标,带高度的话是fromDegreesArrayHeights
                positions: Cesium.Cartesian3.fromDegreesArray(std),
                width: 10,
                material: color,
                clampToGround: true,
              },
            });
            this.entityaLayers.push(line);
            break;
          case "label":
            const label = Viewer.entities.add({
              position: Cesium.Cartesian3.fromDegrees(
                wkt.coordinates[0],
                wkt.coordinates[1]
              ),
              label: {
                text: name,
                fillColor: color,
                font: "28px",
                horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
                verticalOrigin: Cesium.VerticalOrigin.TOP,
                heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
                disableDepthTestDistance: Number.POSITIVE_INFINITY,
              },
            });
            this.entityaLayers.push(label);
            break;
        }
      }
    },
    setCartesianToEightFour(res) {
      var std = [];
      let ellipsoid = Viewer.scene.globe.ellipsoid;
      let cartographic = ellipsoid.cartesianToCartographic(res);
      let lat = Cesium.Math.toDegrees(cartographic.latitude);
      let lng = Cesium.Math.toDegrees(cartographic.longitude);
      let alt = cartographic.height;
      std = [lng, lat, alt];
      return std;
    },
    handleOpenClick() {
      sgworld.Creator.SimpleGraphic.edit(true, { editProp: true })
      let fileInput = document.querySelector(".file")
      var that = this;
      sgworld.Creator.SimpleGraphic.edit(true, { editProp: true });
      let fileInput = document.querySelector(".file");
      fileInput.onchange = function (evt) {
        let files = evt.target.files
        let files = evt.target.files;
        if (files.length > 0) {
          let file = evt.target.files[0]
          let fileReader = new FileReader()
          fileReader.readAsDataURL(file)
          let file = evt.target.files[0];
          let fileReader = new FileReader();
          fileReader.readAsDataURL(file);
          fileReader.onload = () => {
            var kmlOptions = {
              camera: sgworld.Viewer.scene.camera,
              canvas: sgworld.Viewer.scene.canvas,
              clampToGround: true,
            }
            };
            var geocachePromise = Cesium.KmlDataSource.load(
              fileReader.result,
              kmlOptions
            )
            );
            geocachePromise.then(function (dataSource) {
              var geocacheEntities = dataSource.entities.values
              var geocacheEntities = dataSource.entities.values;
              that.entityaLayers = geocacheEntities;
              for (var i = 0; i < geocacheEntities.length; i++) {
                var entity = geocacheEntities[i]
                var entity = geocacheEntities[i];
                sgworld.Viewer.entities.add(entity)
                sgworld.Viewer.entities.add(entity);
              }
            })
            });
            // sgworld.Viewer.dataSources
            //   .add(
            //     Cesium.KmlDataSource.load(fileReader.result, {
@@ -506,41 +914,41 @@
            //     console.log(KmlDataSource);
            //     // let entities = kmlDataSource.entities;
            //   });
          }
          };
        }
        // fileInput.value = null;
      }
      fileInput.click()
      };
      fileInput.click();
    },
    setLayerScene() {
      var URL = window.location.href.split("#")
      this.openwindow({ url: URL[0] + "LfSKyline/index.html" })
      var URL = window.location.href.split("#");
      this.openwindow({ url: URL[0] + "LfSKyline/index.html" });
    },
    openwindow(data) {
      var url = data.url //转向网页的地址;
      var name = data.title || "选择要添加的页面" //网页名称,可为空;
      var iWidth = window.screen.width //弹出窗口的宽度;
      var iHeight = window.screen.height //弹出窗口的高度;
      var iTop = 0 //获得窗口的垂直位置;
      var iLeft = 0 //获得窗口的水平位置;
      var url = data.url; //转向网页的地址;
      var name = data.title || "选择要添加的页面"; //网页名称,可为空;
      var iWidth = window.screen.width; //弹出窗口的宽度;
      var iHeight = window.screen.height; //弹出窗口的高度;
      var iTop = 0; //获得窗口的垂直位置;
      var iLeft = 0; //获得窗口的水平位置;
      window.open(
        url,
        name,
        "height=" +
          iHeight +
          ",,innerHeight=" +
          iHeight +
          ",width=" +
          iWidth +
          ",innerWidth=" +
          iWidth +
          ",top=" +
          iTop +
          ",left=" +
          iLeft +
          ",toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no"
      )
        iHeight +
        ",,innerHeight=" +
        iHeight +
        ",width=" +
        iWidth +
        ",innerWidth=" +
        iWidth +
        ",top=" +
        iTop +
        ",left=" +
        iLeft +
        ",toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no"
      );
    },
    setMeasurement(res) {
@@ -550,37 +958,47 @@
            0,
            2,
            this.colorAll,
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("表面距离", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("表面距离", data);
            }
          )
          break
          );
          break;
        case "j6":
          var measure = window.sgworld.Command.execute(
            0,
            10,
            this.colorAll,
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("空间距离", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("空间距离", data);
            }
          )
          break
          );
          break;
        // case 'j3':
        //   var measure = window.sgworld.Command.execute(0, 3, this.colorAll, (data) => {
        //     data.id = window.sgworld.Core.getuid();
        //     this.measureData.set(data.id, measure);
        //     this.openMeasureResultInfo('平面面积', data);
        //   });
        //   break;
        case "j2":
          var measure = window.sgworld.Command.execute(
            0,
            5,
            this.colorAll,
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("垂直高度", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("垂直高度", data);
            }
          )
          break
          );
          break;
        case "j5":
          var measure = window.sgworld.Command.execute(
            0,
@@ -590,104 +1008,96 @@
              tin: true, // 是否显示tin三角网
              onlyTerrain: false, // 是否只测量精细地形
            },
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("表面面积", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("表面面积", data);
            }
          )
          break
          );
          break;
        case "j3":
          var measure = window.sgworld.Command.execute(
            0,
            3,
            this.colorAll,
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("平面面积", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("平面面积", data);
            }
          )
          // sgworld.Analysis.planeArea(this.colorAll, () => {})
          break
          );
          break;
        case "j4":
          var volumetricMeasurementTool =
            window.sgworld.Creator.createVolumetricMeasureTool()
            window.sgworld.Creator.createVolumetricMeasureTool();
          volumetricMeasurementTool.startDrawing(
            { ...this.colorAll, onlyTerrain: false },
            "auto",
            data => {
            (data) => {
              if (volumetricMeasurementTool.popupData) {
                volumetricMeasurementTool.popupData.value = `填方:${
                  data.volume.fill.toFixed(4) + data.unit.fill
                }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`
                volumetricMeasurementTool.popupData.value = `填方:${data.volume.fill.toFixed(4) + data.unit.fill
                  }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`;
              } else {
                data.id = window.sgworld.Core.getuid()
                this.measureData.set(data.id, volumetricMeasurementTool)
                let popupData = this.openMeasureResultInfo("体积方量", data)
                volumetricMeasurementTool.popupData = popupData
                data.id = window.sgworld.Core.getuid();
                this.measureData.set(data.id, volumetricMeasurementTool);
                let popupData = this.openMeasureResultInfo("体积方量", data);
                volumetricMeasurementTool.popupData = popupData;
              }
            }
          )
          break
          );
          break;
        case "j8":
          var measure = window.sgworld.Command.execute(
            0,
            12,
            this.colorAll,
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("角度", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("角度", data);
            }
          )
          break
          );
          break;
        case "j7":
          // sgworld.Analysis.altitude(this.colorAll, (data) => {
          //     this.measureData.set(data.id, data)
          //   console.log("Data", data);
          //   this.openMeasureResultInfo("海拔高度", data)
          // })
          var measure = window.sgworld.Command.execute(
            1,
            11,
            this.colorAll,
            data => {
              data.id = window.sgworld.Core.getuid()
              this.measureData.set(data.id, measure)
              this.openMeasureResultInfo("海拔高度", data)
            (data) => {
              data.id = window.sgworld.Core.getuid();
              this.measureData.set(data.id, measure);
              this.openMeasureResultInfo("海拔高度", data);
            }
          )
          break
          );
          break;
      }
    },
    openMeasureResultInfo(name, data) {
      let info = ""
      let info = "";
      switch (name) {
        case "表面距离":
        case "空间距离":
          info = "总长度:" + data.distance[data.distance.length - 1]
          break
          info = "总长度:" + data.distance[data.distance.length - 1];
          break;
        case "海拔高度":
          info = "高度:" + data.height
          break
          info = "高度:" + data.height;
          break;
        case "垂直高度":
          info = `${data.gddistance}<br>${data.kjdistance}<br>${data.spdistance}`
          break
          info = `${data.gddistance}<br>${data.kjdistance}<br>${data.spdistance}`;
          break;
        case "表面面积":
        case "平面面积":
          info = data.mj
          break
          info = data.mj;
          break;
        case "角度":
          data.labels.forEach(label => {
            info += label.label.text.getValue() + "<br>"
          })
          break
          data.labels.forEach((label) => {
            info += label.label.text.getValue() + "<br>";
          });
          break;
        case "体积方量":
          info = `填方:${
            data.volume.fill.toFixed(4) + data.unit.fill
          }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`
          break
          info = `填方:${data.volume.fill.toFixed(4) + data.unit.fill
            }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`;
          break;
      }
      return (
        this.$refs &&
@@ -695,202 +1105,303 @@
        this.$refs.mapinfo.open(name, info, {
          close: () => {
            // 清除测量
            this.clearMeasure(data.id)
            this.clearMeasure(data.id);
          },
        })
      )
      );
    },
    clearMeasure(id) {
      if (id) {
        let data = this.measureData.get(id)
        data && data.deleteObject && data.deleteObject()
        let data = this.measureData.get(id);
        data && data.deleteObject && data.deleteObject();
        // 体积方量
        data && data.cleanUp && data.cleanUp()
        this.measureData.delete(id)
        data && data.cleanUp && data.cleanUp();
        this.measureData.delete(id);
      } else {
        this.measureData.forEach(data => {
          data.deleteObject && data.deleteObject()
        this.measureData.forEach((data) => {
          data.deleteObject && data.deleteObject();
          // 体积方量
          data.cleanUp && data.cleanUp()
        })
        this.measureData.clear()
          data.cleanUp && data.cleanUp();
        });
        this.measureData.clear();
      }
    },
    setIquery(res) {
      switch (res) {
        case "e2":
          this.$store.state.mapMenuBoolean = true
          this.$store.state.mapMenuBoxFlag = "1"
          break
          this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean;
          this.$store.state.mapMenuBoxFlag = "1";
          break;
        case "e1":
          this.$store.state.mapMenuBoolean = true
          this.$store.state.mapMenuBoxFlag = "2"
          break
          this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean;
          this.$store.state.mapMenuBoxFlag = "2";
          break;
      }
    },
    clearAllAnalsy() {
      // switch (this.showTwoMenuFlag) {
      //   case 'd1':
      //     that.isolineFlag = false;
      //     elevationTool.tf = that.isolineFlag;
      //     elevationTool.render();
      //     break;
      //   case 'd2':
      //     that.isslopeFlag = false;
      //     elevationTool.type = 'none';
      //     elevationTool.render();
      //     break;
      // }
    },
    ClearDraw() {
      //console.log(sgworld);
      //   console.log(sgworld.drawObj.drawHandler);
      //   sgworld.drawObj.drawHandler.destroy();
      //   sgworld.drawObj.end()
    },
    setAnalsy(res) {
      var that = this
      //this.$refs && this.$refs.queryinfo && this.$refs.queryinfo.close("queryinfo");
      var that = this;
      switch (res) {
        case "d1":
          that.isolineFlag = !that.isolineFlag
          elevationTool.tf = that.isolineFlag
          elevationTool.render()
          break
        case "d2":
          that.isslopeFlag = !that.isslopeFlag
        case "d1": //等高线分析
          that.isolineFlag = !that.isolineFlag;
          elevationTool.tf = that.isolineFlag;
          elevationTool.render();
          break;
        case "d2": //坡度分析
          that.isslopeFlag = !that.isslopeFlag;
          var val = {
            name: "Lengend",
            id: res,
            vshow: that.isslopeFlag
          };
          this.$bus.$emit("mapChangeBox", val);
          window.PDelevationTool = new SmartEarth.ElevationTool(sgworld); //全局变量
          if (that.isslopeFlag == true) {
            elevationTool.type = "slope"
            PDelevationTool.type = "slope";
            PDelevationTool.tf = this.checked;
          } else {
            elevationTool.type = "none"
            PDelevationTool.type = "none";
          }
          elevationTool.render()
          break
        case "d3":
          var value = {
            name: "Analysis",
            id: 3,
          PDelevationTool.render();
          break;
        case "d3": //路径分析
          this.isRouter = !this.isRouter;
          let value;
          if (this.isRouter) {
            value = {
              name: "Analysis",
              id: 3,
              show: true
            };
          } else {
            value = {
              name: "Analysis",
              id: 3,
              show: false
            };
          }
          this.$bus.$emit("mapChangeBox", value)
          break
        case "d4":
          this.$bus.$emit("mapChangeBox", value);
          break;
        case "d4": //剖面分析
          if (window.AnalysisDXPM) {
            this.clear(res)
            window.AnalysisDXPM.end && window.AnalysisDXPM.end("cancel");
            this.clear(res);
          } else {
            this.addterrainSectionAnalysis()
            this.addterrainSectionAnalysis();
          }
          break
        case "d5":
          break;
        case "d5": //洪水淹没分析
          if (window.AnalysisFlood) {
            this.clear(res)
            this.clear(res);
          } else {
            this.addAnalysisFlood()
            this.addAnalysisFlood();
          }
          break
        case "d6":
          var that = this
          var volumetricMeasurementTool =
            sgworld.Creator.createVolumetricMeasureTool()
          volumetricMeasurementTool.startDrawing(
            { ...this.colorAll, onlyTerrain: false },
            "auto",
            data => {
              if (volumetricMeasurementTool.popupData) {
                volumetricMeasurementTool.popupData.value = `填方:${
                  data.volume.fill.toFixed(4) + data.unit.fill
                }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`
              } else {
                data.id = sgworld.Core.getuid()
                this.measureData.set(data.id, volumetricMeasurementTool)
                let popupData = that.openMeasureResultInfo("体积方量", data)
                volumetricMeasurementTool.popupData = popupData
              }
          break;
        case "d6": //土方量分析
          if (window.TFvolumetricMeasurementTool) {
            TFvolumetricMeasurementTool.cleanUp();
            if (TFvolumetricMeasurementTool._mouseHandler) {
              TFvolumetricMeasurementTool._mouseHandler.destroy();
              TFvolumetricMeasurementTool = null;
              Viewer._container.style.cursor = "default";
              return;
            }
          )
          break
        case "d7":
          var that = this
            TFvolumetricMeasurementTool = null;
            this.$refs.mapinfo && this.$refs.mapinfo.close();
          } else {
            var that = this;
            window.TFvolumetricMeasurementTool =
              sgworld.Creator.createVolumetricMeasureTool();
            TFvolumetricMeasurementTool.startDrawing(
              { ...this.colorAll, onlyTerrain: false },
              "auto",
              (data) => {
                if (TFvolumetricMeasurementTool.popupData) {
                  TFvolumetricMeasurementTool.popupData.value = `填方:${data.volume.fill.toFixed(4) + data.unit.fill
                    }<br>挖方:${data.volume.dig.toFixed(4) + data.unit.dig}`;
                } else {
                  data.id = sgworld.Core.getuid();
                  this.measureData.set(data.id, TFvolumetricMeasurementTool);
                  let popupData = that.openMeasureResultInfo("体积方量", data);
                  TFvolumetricMeasurementTool.popupData = popupData;
                }
              }
            );
          }
          break;
        case "d7": //三维截面分析
          // if(window.MXModel) {
          //   Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
          //   window.MXModel=null;
          // } else {
          var that = this;
          window.model = sgworld.Creator.create3DTilesets(
            "",
            modelUrl,
            modelUrl + '/tileset/m/SN/tileset.json',
            {},
            {},
            "0",
            true,
            data => {
              sgworld.Navigate.flyToObj(data)
              that.setclippingModel()
            (data) => {
              sgworld.Navigate.flyToObj(data);
              that.setclippingModel();
            }
          )
          break
        case "d9":
          this.$store.state.mapPopBoxFlag = "3"
          this.$refs &&
            this.$refs.queryinfo &&
            this.$refs.queryinfo.open("管道空间分析", null, {
              close: () => {
                if (this.$store.state.pipelineEntity.length != 0) {
                  for (var i in this.$store.state.pipelineEntity) {
                    var item = this.$store.state.pipelineEntity[i]
                    sgworld.Viewer.entities.remove(item)
                  }
                }
              },
            })
          break
        case "d8":
          if (this.isContrastFlag == false) {
            this.isContrastFlag = true
            sgworld.Analysis.createCurtainContrast(2, 1)
          } else {
            this.isContrastFlag = false
            sgworld.Analysis.clearCurtainContrast()
          }
          break
        case "d10":
          if (window.TerrainFlattening) {
            window.TerrainFlattening.remove()
            window.TerrainFlattening = null
          } else {
            sgworld.Creator.createSimpleGraphic(
              "polygon",
              {
                clampToGround: true,
              },
              function (entity) {
                var positions = entity.polygon.hierarchy.getValue().positions
                sgworld.Creator.SimpleGraphic.remove(entity.id)
                window.TerrainFlattening =
                  sgworld.Creator.createTerrainModifier(
                    "地形压平",
                    positions,
                    10,
                    {}
                  )
              }
            )
          }
          break
          );
        case "d11":
          break;
        case "d9": //管道分析
          this.isPiple = !this.isPiple;
          if (this.isPiple) {
            this.$store.state.mapPopBoxFlag = "3";
            this.$refs &&
              this.$refs.queryinfo &&
              this.$refs.queryinfo.open("管道空间分析", null, {
                close: () => {
                  if (this.$store.state.pipelineEntity.length != 0) {
                    for (var i in this.$store.state.pipelineEntity) {
                      sgworld.Viewer.entities.remove(this.$store.state.pipelineEntity[i]);
                    }
                  }
                },
              });
          } else {
            this.$refs &&
              this.$refs.queryinfo &&
              this.$refs.queryinfo.close("queryinfo");
          }
          break;
        case "d8": //影像对比
          if (this.isContrastFlag == false) {
            this.isContrastFlag = true;
            sgworld.Analysis.createCurtainContrast(2, 1);
          } else {
            this.isContrastFlag = false;
            sgworld.Analysis.clearCurtainContrast();
          }
          break;
        case "d10": //地面整平
          var val = {
            name: "Trrain",
            id: res,
          };
          this.$bus.$emit("mapChangeBox", val);
          // if (this.DXZPState != null) {
          //   this.DXZPState.drawHandler && this.DXZPState.drawHandler.destroy();
          //   Viewer._container.style.cursor = "default";
          //   this.DXZPState.tooltip && this.DXZPState.tooltip.show(false);
          //   if (window.DXTerrainFlattening != null) {
          //     DXTerrainFlattening.remove();
          //   }
          //   window.DXTerrainFlattening = null;
          //   this.DXZPState = null;
          // } else {
          //   this.DXZPState = sgworld.Creator.createSimpleGraphic(
          //     "polygon",
          //     {
          //       clampToGround: true,
          //     },
          //     function (entity) {
          //       let positions = entity.polygon.hierarchy.getValue().positions;
          //       sgworld.Creator.SimpleGraphic.remove(entity.id);
          //       window.DXTerrainFlattening =
          //         sgworld.Creator.createTerrainModifier(
          //           "地形压平",
          //           positions,
          //           10,
          //           {}
          //         );
          //     }
          //   );
          // }
          break;
        case "d11": //地形开挖
          if (window.Excavation) {
            window.Excavation.clear()
            window.Excavation = null
            window.Excavation.drawHandler &&
              window.Excavation.drawHandler.destroy();
            Viewer._container.style.cursor = "default";
            window.Excavation.tooltip && window.Excavation.tooltip.show(false);
            window.Excavation.clear();
            window.Excavation = null;
          } else {
            window.Excavation = sgworld.Analysis.TerrainExcavation(
              10,
              {},
              function () {}
            )
              function () { }
            );
          }
          break
        case "d12":
          if (window.Excavation) {
            window.Excavation.deleteObject()
            window.Excavation = null
          break;
        case "d12": //通视分析
          if (window.TSExcavation != null) {
            window.TSExcavation._SimpleGraphic.drawHandler &&
              window.TSExcavation._SimpleGraphic.drawHandler.destroy();
            Viewer._container.style.cursor = "default";
            window.TSExcavation._SimpleGraphic.tooltip &&
              window.TSExcavation._SimpleGraphic.tooltip.show(false);
            window.TSExcavation.deleteObject();
            window.TSExcavation = null;
          } else {
            window.Excavation = sgworld.Analysis.createSightLine({
            window.TSExcavation = sgworld.Analysis.createSightLine({
              type: "default",
            })
            });
          }
          break
        case "d13":
          if (window.Excavation) {
            window.Excavation.destroy()
            window.Excavation = null
          } else {
            window.Excavation = sgworld.Analysis.create3DViewshedPoss({
              height: 1.8,
            })
          }
          break
        case "d14":
          if (window.Excavation) {
            window.Excavation.close()
            window.Excavation = null
          break;
        case "d13": //视域分析
          if (window.SYExcavatio) {
            window.SYExcavatio.end && window.SYExcavatio.end();
            window.SYExcavatio.close();
            window.SYExcavatio = null;
          } else {
            var SYFX_visible_color = { r: 0.0, g: 1.0, b: 0.0 },
              SYFX_notVisible_color = { r: 1.0, g: 0.0, b: 0.0 }
            window.Excavation = sgworld.Analysis.create3DViewshed({
              SYFX_notVisible_color = { r: 1.0, g: 0.0, b: 0.0 };
            window.SYExcavatio = sgworld.Analysis.create3DViewshed({
              name: "Viewshed On Frederick",
              height: 1.8,
              color: {
                Back: SYFX_notVisible_color,
                Fore: SYFX_visible_color,
              },
              isSpherical: "",
            });
          }
          break;
        case "d14": //圆形时域分析
          if (window.YXSYExcavation) {
            window.YXSYExcavation.end && window.YXSYExcavation.end();
            window.YXSYExcavation.close();
            window.YXSYExcavation = null;
          } else {
            var SYFX_visible_color = { r: 0.0, g: 1.0, b: 0.0 },
              SYFX_notVisible_color = { r: 1.0, g: 0.0, b: 0.0 };
            window.YXSYExcavation = sgworld.Analysis.create3DViewshed({
              name: "Viewshed On Frederick",
              height: 1.8,
              color: {
@@ -898,10 +1409,10 @@
                Fore: SYFX_visible_color,
              },
              isSpherical: "spherical",
            })
            });
          }
          break
          break;
      }
    },
    setclippingModel() {
@@ -909,8 +1420,8 @@
        setTimeout(() => {
          window.model.clippingModel({
            direction: "z",
          })
        }, 1000)
          });
        }, 1000);
        // window.model.clippingModel({
        //   direction: 'z',
        // });
@@ -919,19 +1430,19 @@
    clear(res) {
      switch (res) {
        case "d4":
          layer.close(this.dxpmIndex)
          this.dxpmIndex = undefined
          layer.close(this.dxpmIndex);
          this.dxpmIndex = undefined;
          if (window.AnalysisDXPM) {
            window.AnalysisDXPM.flyPoint &&
              Viewer.entities.remove(window.AnalysisDXPM.flyPoint)
            window.AnalysisDXPM && window.AnalysisDXPM.deleteObject()
            window.AnalysisDXPM = undefined
              Viewer.entities.remove(window.AnalysisDXPM.flyPoint);
            window.AnalysisDXPM && window.AnalysisDXPM.deleteObject();
            window.AnalysisDXPM = undefined;
          }
          break
          break;
        case "d5":
          window.AnalysisFlood.endWater()
          window.AnalysisFlood = undefined
          break
          window.AnalysisFlood.endWater();
          window.AnalysisFlood = undefined;
          break;
      }
    },
    addAnalysisFlood() {
@@ -939,23 +1450,28 @@
        pointSelect: true,
        spood: 20,
        GroupID: 0,
        url: "/SmartEarthSDK/Workers/image/waterNormals.jpg",
      }
      window.AnalysisFlood = sgworld.Command.execute(2, 2, method, value => {})
        url: "/SmartEarthSDK/Workers/image/33.gif",
      };
      window.AnalysisFlood = sgworld.Command.execute(
        2,
        2,
        method,
        (value) => { }
      );
    },
    addterrainSectionAnalysis() {
      window.AnalysisDXPM = sgworld.Command.execute(
        2,
        6,
        { cyjj: 50, objid: 0 },
        Distance => {
        (Distance) => {
          if (Distance.gcs && Distance.gcs.length) {
            var url = window.location.href
            var testurl = ""
            var url = window.location.href;
            var testurl = "";
            if (url.indexOf("web") != -1) {
              testurl = "/web"
              testurl = "/web";
            }
            window.AnalysisDXPM.analyseData = Distance
            window.AnalysisDXPM.analyseData = Distance;
            this.dxpmIndex = layer.open({
              type: 2,
              title: "分析结果",
@@ -966,35 +1482,43 @@
              content:
                testurl + "/SmartEarthSDK/Workers/analysis/AnalysisDXPM.html",
              end: () => {
                this.dxpmIndex && this.clear("d4")
                this.dxpmIndex && this.clear("d4");
              },
            })
            });
          } else {
            //剖面
            window.AnalysisDXPM && window.AnalysisDXPM.deleteObject()
            window.AnalysisDXPM && window.AnalysisDXPM.deleteObject();
          }
        }
      )
      );
    },
    setWander(res) {
      ;
      switch (res) {
        case "c1":
          window.sgworld.Analysis.setPointFly()
          break
        case "c2":
          var url = window.location.href
          var testurl = ""
          if (url.indexOf("web") != -1) {
            testurl = "/web"
          if (window.PointMY != null) {
            window.PointMY.drawHandler && window.PointMY.drawHandler.destroy();
            window.PointMY.end && window.PointMY.end();
            window.PointMY = null;
          } else {
            window.PointMY = window.sgworld.Analysis.setPointFly();
          }
          window.sgworld.Command.execute(2, 3, "", data => {
            data.showPoint = false
            data.showLine = true
            data.mode = 1
          break;
        case "c2":
          var url = window.location.href;
          var testurl = "";
          if (url.indexOf("web") != -1) {
            testurl = "/web";
          }
          window.sgworld.Command.execute(2, 3, "", (data) => {
            data.showPoint = false;
            data.showLine = true;
            data.mode = 0;
            // 弹窗数据
            window.PathAnimationData = {
              flyData: data,
            }
            };
            window.PathAnimationData.winIndex = layer.open({
              type: 2,
              title: "路径动画",
@@ -1004,121 +1528,278 @@
              skin: "other-class",
              content: testurl + "/SmartEarthSDK/Workers/path/Path.html",
              end: function () {
                PathAnimationData.fly && PathAnimationData.fly.exit()
                PathAnimationData.fly && PathAnimationData.fly.exit();
              },
            })
          })
          break
            });
          });
          break;
        case "c3":
          sgworld.Analysis.createindoormode({ showHelp: true })
          break
          sgworld.Analysis.createindoormode({ showHelp: true });
          break;
        case "c4":
          window.sgworld.Analysis.createScreenshot()
          break
          window.sgworld.Analysis.createScreenshot();
          break;
      }
    },
    setOrientation(res) {
      var resid
      var resid;
      switch (res) {
        case "f1":
          resid = 1
          break
          resid = 1;
          break;
        case "f2":
          resid = 2
          break
          resid = 2;
          break;
      }
      var val = {
        name: "Coord",
        id: resid,
      }
      this.$bus.$emit("mapChangeBox", val)
      };
      this.$bus.$emit("mapChangeBox", val);
    },
    setViewport(res) {
      switch (res) {
        case "b1": //分屏
          this.$bus.$emit("changemap", 1)
          break
          this.$bus.$emit("changemap", 1);
          break;
        case "b2": //二维
          this.$bus.$emit("changemap", 2)
          break
          this.$bus.$emit("changemap", 2);
          break;
        case "b3": //三维
          this.$bus.$emit("changemap", 3)
          break
          this.$bus.$emit("changemap", 3);
          break;
        case "b4": //全图
          window.sgworld.Navigate.jumpTo({
            //跳转视角
            destination: new Cesium.Cartesian3.fromDegrees(110, 32, 8000000),
          })
          });
          window.map
            .getView()
            .setCenter(transform([110, 32], "EPSG:4326", "EPSG:3857"))
          window.map.getView().setZoom(4)
          break
            .setCenter(transform([110, 32], "EPSG:4326", "EPSG:3857"));
          window.map.getView().setZoom(4);
          break;
        case "b5": //放大
          window.sgworld.Navigate.zoomIn()
          window.sgworld.Navigate.zoomIn();
          // 获取当前视图
          var zoom = window.map.getView().getZoom() // 获取当前缩放级别
          window.map.getView().setZoom(zoom + 1) // 设置缩放级别
          var zoom = window.map.getView().getZoom(); // 获取当前缩放级别
          window.map.getView().setZoom(zoom + 1); // 设置缩放级别
          break
          break;
        case "b6": //缩小
          window.sgworld.Navigate.zoomOut()
          var zoom = window.map.getView().getZoom() // 获取当前缩放级别
          window.map.getView().setZoom(zoom - 1) // 设置缩放级别
          break
          window.sgworld.Navigate.zoomOut();
          var zoom = window.map.getView().getZoom(); // 获取当前缩放级别
          window.map.getView().setZoom(zoom - 1); // 设置缩放级别
          break;
        case "b7": //比例尺
          this.isRuler = !this.isRuler
          window.sgworld.navControl("scale", this.isRuler)
          break
          this.isRuler = !this.isRuler;
          window.sgworld.navControl("scale", this.isRuler);
          if (this.isRuler == true) {
            this.scaleLine = new ScaleLine({
              units: "metric",
            });
            window.map.addControl(this.scaleLine);
          } else {
            window.map.removeControl(this.scaleLine);
            this.scaleLine = false;
          }
          break;
        case "b8": //指北针
          this.isNaviget = !this.isNaviget
          window.sgworld.navControl("nav", this.isNaviget)
          break
          this.isNaviget = !this.isNaviget;
          window.sgworld.navControl("nav", this.isNaviget);
          this.$store.state.isNaviget = this.isNaviget;
          break;
        case "b9": //地下模式
          this.UndergroundMode = !this.UndergroundMode
          window.sgworld.Analysis.UndergroundMode(this.UndergroundMode, 0.3)
          break
          this.UndergroundMode = !this.UndergroundMode;
          window.sgworld.Analysis.UndergroundMode(this.UndergroundMode, 0.3);
          break;
      }
    },
    setCoverage(res) {
      switch (res) {
        case "a1":
          if (this.$store.state.layerMnage == false) {
            this.$refs && this.$refs.maplayer && this.$refs.maplayer.closeAll()
            this.$refs && this.$refs.maplayer && this.$refs.maplayer.open()
            this.$store.state.layerMnage = true
            this.$refs && this.$refs.maplayer && this.$refs.maplayer.closeAll();
            this.$refs && this.$refs.maplayer && this.$refs.maplayer.open();
            this.$store.state.layerMnage = true;
          } else if (this.$store.state.layerMnage == true) {
            this.$refs && this.$refs.maplayer && this.$refs.maplayer.closeAll()
            this.$store.state.layerMnage = false
            this.$bus.$emit("treeDataCopy", "true");
            this.$refs && this.$refs.maplayer && this.$refs.maplayer.closeAll();
            this.$store.state.layerMnage = false;
          }
          break
          break;
      }
    },
    menuChange(res) {
      this.setListTwoMenu = this.setListTwoMenuAll[res]
      this.setListTwoMenu = this.setListTwoMenuAll[res];
    },
    async layersStart() {
      const data = await perms_selectLayers();
      if (data.code != 200) {
        return this.$message.error("图层列表查询失败");
      }
      var std = data.result;
      var that = this;
      var checkKey = [];
      var val = std.filter((str) => {
        if (str.type == 1) {
          return str;
        }
        if (str.url != null && str.type == 2) {
          if (str.isShow == 1) {
            checkKey.push(str.id);
            that.setAddLayers(str);
          }
          return str;
        }
      });
      var res = this.setTreeData(val);
      for (var i in res) {
        res[i].children = res[i].children.filter((val) => {
          if (val.children != null) {
            return val;
          }
        });
      }
      this.$store.state.treeData = res;
      // this.$refs.tree.setCheckedKeys(checkKey);
      this.$store.state.checkedKeys = checkKey
    },
    setTreeData(source) {
      let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
      return cloneData.filter((father) => {
        // 循环所有项
        let branchArr = cloneData.filter((child) => father.id == child.pid); // 对比ID,分别上下级菜单,并返回数据
        branchArr.length > 0 ? (father.children = branchArr) : ""; // 给父级添加一个children属性,并赋值
        // 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2;
        // 由此循环多次后,就能形成相应的树形数据结构
        return father.pid == 0; // 返回一级菜单
      });
    },
    setAddLayers(res) {
      if (res.serveType == "WMS") {
        var resource = geoServerURl;
        if (res.resource != null && res.resource != undefined) {
          resource = res.resource;
        }
        var imageryLayers = window.Viewer.scene.imageryLayers;
        let layerWMS = new Cesium.WebMapServiceImageryProvider({
          url: resource,
          layers: res.url,
          parameters: {
            transparent: true,
            format: "image/png",
            srs: "EPSG:4490",
            styles: "",
          },
          tileWidth: 512,
          tileHeight: 512,
        });
        layerWMS.name = res.cnName;
        //透明度
        var tdtAnnoLayer = imageryLayers.addImageryProvider(layerWMS);
        if (res.opacity) {
          tdtAnnoLayer.alpha = parseInt(res.opacity) / 100;
        }
        var layer2 = new Image({
          name: res.cnName,
          source: new ImageWMS({
            crossOrigin: "anonymous",
            url: resource,
            params: {
              FORMAT: "image/png",
              VERSION: "1.1.1",
              LAYERS: res.url,
            },
          }),
        });
        if (res.opacity) {
          layer2.setOpacity(parseInt(res.opacity) / 100);
        }
        window.map.addLayer(layer2);
      } else if (res.serveType == "WFS") {
        var url =
          res.resource +
          "?service=WFS&version=1.0.0&request=GetFeature&typeName=" +
          res.url +
          "&outputFormat=application%2Fjson";
        $.ajax({
          url: url,
          cache: false,
          async: true,
          success: function (data) {
            var datasource = Cesium.GeoJsonDataSource.load(data, {
              stroke: Cesium.Color.YELLOW,
              fill: Cesium.Color.YELLOW.withAlpha(0.1),
              alpha: 0.1,
              strokeWidth: 8,
              clampToGround: true, //是否贴地
            });
            datasource.then((data) => {
              data.name = res.cnName;
              window.Viewer.dataSources.add(data);
            });
          },
          error: function (data) {
            console.log("error");
          },
        });
        var vectorLayer = new VectorLayer({
          name: res.cnName,
          source: new VectorSource({
            url: url,
            format: new GeoJSON(),
          }),
        });
        window.map.addLayer(vectorLayer);
      } else if (res.serveType == "Tileset") {
        var tileset = Viewer.scene.primitives.add(
          new Cesium.Cesium3DTileset({
            name: res.cnName,
            url: modelUrl + "/" + res.url, //192.168.20.106,to4
            maximumScreenSpaceError: 64, // 最大屏幕空间错误:16
            maximumMemoryUsage: 768, // 最大内存:512
            dynamicScreenSpaceError: true, // 减少离相机较远的屏幕空间错误:false
            skipLevelOfDetail: true, // 在遍历时候跳过详情:false
          })
        );
        tileset.readyPromise.then(function (tileset) {
          tileset.id = res.cnName;
          Viewer.flyTo(tileset);
        });
      }
    },
  },
  mounted() {
    this.measureData = new Map()
    this.measureData = new Map();
    this.colorAll = {
      point: Cesium.Color.fromCssColorString("#ff0000"),
      polyline: Cesium.Color.fromCssColorString("#ffff00").withAlpha(0.6),
      polygon: Cesium.Color.fromCssColorString("#ffff00").withAlpha(0.6),
    }
    this.$bus.$on("setChangeTwoMenu", res => {
      if (res == 8) {
        this.setLayerScene()
      } else {
        this.menuChange(res)
      }
    })
    };
    this.$store.state.showAllLayers = true
    this.$store.state.layerMnage = false
    this.setCoverage("a1")
    this.$bus.$on("setChangeTwoMenu", (res) => {
      if (res == 8) {
        this.setLayerScene();
      } else {
        this.menuChange(res);
      }
    });
    this.$store.state.showAllLayers = true;
    this.$store.state.layerMnage = false;
    this.$store.state.treeData = null;
    this.$store.state.checkedKeys = [];
    // this.setCoverage("a1");
    this.layersStart()
  },
}
};
</script>
<style lang="less" scoped>
@@ -1129,220 +1810,40 @@
  margin: 0;
  padding: 0;
  overflow-y: auto;
  text-align: center;
  // text-align: center;
  display: flex;
  flex-wrap: wrap;
  align-content: flex-start;
  .leftMen_div {
    font-size: 16px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    padding: 10px;
    border: 1px solid rgba(0, 0, 0, 0);
    padding: 5px;
    min-width: 100px;
    margin-left: 10px;
    margin-top: 10px;
    border-radius: 5px;
    text-align: center;
  }
  .leftMen_div:hover {
    background: rgba(64, 158, 255, 0.4);
    border: 1px solid #409eff;
    box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
    border-radius: 5px;
  }
  .lefMenuDivActive {
    background: rgba(64, 158, 255, 0.4);
    border: 1px solid #409eff;
  }
  .menuTwoImage {
    width: 32px;
    height: 32px;
    display: inline-block;
  }
  .twoMenu_imge11 {
    background: url("../../assets/img/synthesis/图层 32.png") no-repeat center;
  }
  .twoMenu_imge12 {
    background: url("../../assets/img/synthesis/图层 35.png") no-repeat center;
  }
  .twoMenu_imge13 {
    background: url("../../assets/img/synthesis/发布.png") no-repeat center;
  }
  //视图
  .twoMenu_imge21 {
    background: url("../../assets/img/synthesis/圆角矩形 12 拷贝 3.png")
      no-repeat center;
  }
  .twoMenu_imge22 {
    background: url("../../assets/img/synthesis/图层 10 拷贝.png") no-repeat
      center;
  }
  .twoMenu_imge23 {
    background: url("../../assets/img/synthesis/图层 11 拷贝.png") no-repeat
      center;
  }
  .twoMenu_imge24 {
    background: url("../../assets/img/synthesis/图层 12 拷贝 2.png") no-repeat
      center;
  }
  .twoMenu_imge25 {
    background: url("../../assets/img/synthesis/圆角矩形 5 拷贝 2.png")
      no-repeat center;
  }
  .twoMenu_imge26 {
    background: url("../../assets/img/synthesis/圆角矩形 5 拷贝 3.png")
      no-repeat center;
  }
  .twoMenu_imge27 {
    background: url("../../assets/img/synthesis/矩形 9.png") no-repeat center;
  }
  .twoMenu_imge28 {
    background: url("../../assets/img/synthesis/椭圆 4.png") no-repeat center;
  }
  .twoMenu_imge29 {
    background: url("../../assets/img/synthesis/z_03.png") no-repeat center;
  }
  //漫游
  .twoMenu_imge31 {
    background: url("../../assets/img/synthesis/椭圆 6.png") no-repeat center;
  }
  .twoMenu_imge32 {
    background: url("../../assets/img/synthesis/椭圆 7 拷贝 2.png") no-repeat
      center;
  }
  .twoMenu_imge33 {
    background: url("../../assets/img/synthesis/图层 14 副本 拷贝.png")
      no-repeat center;
  }
  .twoMenu_imge34 {
    background: url("../../assets/img/synthesis/图层 74 拷贝 2.png") no-repeat
      center;
  }
  .twoMenu_imge35 {
    background: url("../../assets/img/synthesis/椭圆 7 拷贝 4.png") no-repeat
      center;
  }
  //分析
  .twoMenu_imge41 {
    background: url("../../assets/img/synthesis/椭圆 8 拷贝 8.png") no-repeat
      center;
  }
  .twoMenu_imge42 {
    background: url("../../assets/img/synthesis/圆角矩形 12 拷贝 5.png")
      no-repeat center;
  }
  .twoMenu_imge43 {
    background: url("../../assets/img/synthesis/圆角矩形 10 副本 3.png")
      no-repeat center;
  }
  .twoMenu_imge44 {
    background: url("../../assets/img/synthesis/图层 74 拷贝 3.png") no-repeat
      center;
  }
  .twoMenu_imge45 {
    background: url("../../assets/img/synthesis/图层 20.png") no-repeat center;
  }
  .twoMenu_imge46 {
    background: url("../../assets/img/synthesis/图层 14 拷贝 3.png") no-repeat
      center;
  }
  .twoMenu_imge47 {
    background: url("../../assets/img/synthesis/图层 18.png") no-repeat center;
  }
  .twoMenu_imge48 {
    background: url("../../assets/img/synthesis/圆角矩形 12 拷贝 6.png")
      no-repeat center;
  }
  .twoMenu_imge49 {
    background: url("../../assets/img/synthesis/管道.png") no-repeat center;
  }
  .twoMenu_imge410 {
    background: url("../../assets/img/synthesis/dxkw.png") no-repeat center;
  }
  .twoMenu_imge411 {
    background: url("../../assets/img/synthesis/矩形 14 拷贝 7.png") no-repeat
      center;
  }
  // 通视分析、视域分析 预留
  .twoMenu_imge412 {
    background: url("../../assets/img/synthesis/矩形 14 拷贝 7.png") no-repeat
      center;
  }
  .twoMenu_imge413 {
    background: url("../../assets/img/synthesis/矩形 14 拷贝 7.png") no-repeat
      center;
  }
  .twoMenu_imge414 {
    background: url("../../assets/img/synthesis/矩形 14 拷贝 7.png") no-repeat
      center;
  }
  //查询
  .twoMenu_imge51 {
    background: url("../../assets/img/synthesis/图层 23.png") no-repeat center;
  }
  .twoMenu_imge52 {
    background: url("../../assets/img/synthesis/空间查询.png") no-repeat center;
  }
  //定位
  .twoMenu_imge61 {
    background: url("../../assets/img/synthesis/图层 27.png") no-repeat center;
  }
  .twoMenu_imge62 {
    background: url("../../assets/img/synthesis/图层 28.png") no-repeat center;
  }
  //测量
  .twoMenu_imge71 {
    background: url("../../assets/img/synthesis/图层 31.png") no-repeat center;
  }
  .twoMenu_imge72 {
    background: url("../../assets/img/synthesis/图层 31 拷贝.png") no-repeat
      center;
  }
  .twoMenu_imge73 {
    background: url("../../assets/img/synthesis/矩形 13 拷贝.png") no-repeat
      center;
  }
  .twoMenu_imge74 {
    background: url("../../assets/img/synthesis/图层 18 拷贝.png") no-repeat
      center;
  }
  .twoMenu_imge75 {
    background: url("../../assets/img/synthesis/M 拷贝.png") no-repeat center;
  }
  .twoMenu_imge76 {
    background: url("../../assets/img/synthesis/空间测距.png") no-repeat center;
  }
  // 高层量测图标
  .twoMenu_imge77 {
    background: url("../../assets/img/synthesis/图层 31 拷贝.png") no-repeat
      center;
  }
  //标绘
  .twoMenu_imge81 {
    background: url("../../assets/img/synthesis/椭圆 5 拷贝 3.png") no-repeat
      center;
  }
  .twoMenu_imge82 {
    background: url("../../assets/img/synthesis/椭圆 3 拷贝 16.png") no-repeat
      center;
  }
  .twoMenu_imge83 {
    background: url("../../assets/img/synthesis/椭圆 3 拷贝 20.png") no-repeat
      center;
  }
  .twoMenu_imge84 {
    background: url("../../assets/img/synthesis/椭圆 3 拷贝 23.png") no-repeat
      center;
  }
  .twoMenu_imge85 {
    background: url("../../assets/img/synthesis/导入.png") no-repeat center;
  }
  .twoMenu_imge86 {
    background: url("../../assets/img/synthesis/导出.png") no-repeat center;
  }
  .twoMenu_imge87 {
    background: url("../../assets/img/synthesis/清除.png") no-repeat center;
  .menuTwoImage {
    width: 30px;
    height: 30px;
    display: inline-block;
  }
}
</style>