管道基础大数据平台系统开发-【前端】-新系統界面
584911253@qq.com
2023-03-09 f80f19a0bd6c7bb360cc6bad8852ac65546a6a48
src/components/mapsdk.vue
@@ -8,7 +8,6 @@
        <map-menu-top v-if="$store.state.mapMenuBoxFlag == '1'" />
        <map-space-top v-if="$store.state.mapMenuBoxFlag == '2'" />
      </div>
      <div
        class="bufferBox"
        v-if="showBufferBoxDialog"
@@ -97,6 +96,44 @@
        </el-card>
      </div>
      <div
        class="terrainLevelBox"
        v-if="showTerrainLevelDialog"
      >
        <el-card class="box-card">
          <div slot="header">
            <span>地形平整</span>
            <div style="float: right; cursor: pointer">
              <i
                class="el-icon-close"
                @click="closeBufferBox(5)"
              ></i>
            </div>
          </div>
          <div class="box-body">
            <el-form
              ref="form"
              :model="terrainFrom"
              label-width="100px"
            >
              <el-form-item label="平整高度:">
                <el-input v-model="terrainFrom.height"></el-input>
              </el-form-item>
              <el-form-item>
                <el-button
                  @click="drawTerrainLevel"
                  type="parmary"
                >绘制</el-button>
                <el-button
                  @click="clearTerrainLevel"
                  type="info"
                >清除</el-button>
              </el-form-item>
            </el-form>
          </div>
        </el-card>
      </div>
      <div
        class="toponymicLocalBox"
        v-if="showToponymicLocalBoxDialog"
      >
@@ -117,11 +154,10 @@
            <el-form
              :model="comprehensive"
              :inline="true"
              label-width="50px"
            >
              <el-form-item label="地名:">
                <el-input
                  style="width: 200px"
                  style="width: 160px"
                  v-model="comprehensive.name"
                ></el-input>
              </el-form-item>
@@ -135,33 +171,48 @@
            <el-table
              :data="tableData"
              height="200px"
              border
              style="width: 100%"
            >
              <el-table-column
                align="center"
                type="index"
                label="序号"
                width="70px"
              />
              <el-table-column
                prop="name"
                align="center"
                label="定位"
              >
                <template slot-scope="scope">
                  <el-button
                    @click="handleLocation(scope.$index, scope.row)"
                    size="small"
                    icon="el-icon-place"
                  ></el-button>
                </template>
              </el-table-column>
              <el-table-column
                prop="name"
                align="center"
                label="地名"
              >
                <template slot-scope="scope">
                  <el-button
                    @click="handleLocation(scope.$index, scope.row)"
                    size="small"
                  >{{scope.row.name}}<i
                      class="el-icon-place"
                      style="padding-left: 5px"
                    ></i></el-button>
                </template>
              </el-table-column>
              <!--              <el-table-column-->
              <!--                prop="name"-->
              <!--                align="center"-->
              <!--                label="定位"-->
              <!--              >-->
              <!--                <template slot-scope="scope">-->
              <!--                  <el-button-->
              <!--                    @click="handleLocation(scope.$index, scope.row)"-->
              <!--                    size="small"-->
              <!--                    icon="el-icon-place"-->
              <!--                  ></el-button>-->
              <!--                </template>-->
              <!--              </el-table-column>-->
              <!--              <el-table-column-->
              <!--                prop="name"-->
              <!--                align="center"-->
              <!--                label="地名"-->
              <!--              >-->
              <!--              </el-table-column>-->
            </el-table>
            <div class="pagination_box">
              <el-pagination
@@ -169,8 +220,9 @@
                @current-change="handleCurrentChange"
                :current-page="listData.pageIndex"
                :page-sizes="[10, 20, 50, 100]"
                :pager-count="3"
                :page-size="listData.pageSize"
                layout="total, sizes, prev, pager, next, jumper"
                layout="total, prev, pager, next"
                :total="count"
              >
              </el-pagination>
@@ -215,10 +267,7 @@
                  :underline="false"
                  @click="showMouseLeftClick(1)"
                  style="margin-left: 10px"
                ><i
                    style="color: white"
                    class="el-icon-plus"
                  ></i></el-link>
                ><i class="el-icon-plus"></i></el-link>
              </el-form-item>
              <el-form-item
                label="终点:"
@@ -233,10 +282,7 @@
                  :underline="false"
                  @click="showMouseLeftClick(2)"
                  style="margin-left: 10px"
                ><i
                    style="color: white"
                    class="el-icon-plus"
                  ></i></el-link>
                ><i class="el-icon-plus"></i></el-link>
              </el-form-item>
              <el-form-item>
                <el-button
@@ -248,58 +294,289 @@
          </div>
        </el-card>
      </div>
      <div style="display: flex">
        <div
          @click="changeMenulayer"
          class="center CenDiv"
          :class="{ center1: centerFlag }"
        >
          <div
            id="cenBg"
            v-bind:class="{ active: isActive, menuLayer: isMenuLayer }"
          ></div>
        </div>
        <div
          @click="changeMapType"
          class="changeMapType"
        >
          <div
            id="cenBg"
            :class="show2DMap ? 'mapTypeTwo' : 'mapTypeThree'"
          ></div>
        </div>
      </div>
      <div
        @click="changeMenulayer"
        class="center CenDiv"
        :class="{ center1: centerFlag }"
        class="lengend"
        v-show="showLengendDialog"
      >
        <el-card class="box-card">
          <!-- <div
            class="lengend_color"
            style="height:205px"
          >
          </div> -->
          <div class="lengendBox">
            <div>
              <img
                class="lengendImg"
                src="../assets/img/colors.png"
              />
            </div>
            <div class="lengendSpan">
              <div>0°</div>
              <div>17.5°</div>
              <div>35°</div>
              <div>52.5°</div>
              <div>70°</div>
            </div>
          </div>
        </el-card>
      </div>
      <!--属性信息弹窗-->
      <div
        class="propertiesPop"
        v-if="$store.state.propertiesFlag == '1'"
      >
        <el-card class="box-card">
          <div slot="header">
            <span>属性信息</span>
            <div style="float: right; cursor: pointer">
              <el-link
                  v-if="$store.state.propertiesName.tabDesc == '勘察工点'"
                  type="primary"
                  :underline="false"
                  @click="getPointInfo"
                  style="margin-right: 10px"
              >勘察信息表</el-link>
              <el-link
                type="primary"
                :underline="false"
                @click="getAttatchList"
                style="margin-right: 10px"
              >查看附件</el-link>
              <i
                class="el-icon-close"
                @click="closeBufferBox(6)"
              ></i>
            </div>
          </div>
          <div
            class="pointInfoBoxContext"
            style="height:250px;overflow-y: auto"
          >
            <div
              style="line-height: 20px"
              v-for="(value, key) in $store.state.propertiesInfo"
              :key="key"
            >
              <span
                v-if="key != 'eventid'"
                style="font-size: 14px;font-weight: bold;margin-right: 5px"
              >{{key}}:</span>
              <span v-if="key != 'eventid'">{{value}}</span>
            </div>
          </div>
        </el-card>
      </div>
      <!--勘察信息弹窗-->
      <div
          class="attributionPop"
          v-if="showAttribute"
      >
        <el-card class="box-card">
          <div slot="header">
            <span>勘察信息</span>
            <div style="float: right; cursor: pointer">
              <i
                  class="el-icon-close"
                  @click="showAttribute=false"
              ></i>
            </div>
          </div>
          <div
              class="pointInfoBoxContext"
              style="height:250px;overflow-y: auto"
          >
            <div
                style="line-height: 20px"
                v-for="(item, index) in attributeList"
                :key="index"
            >
              <span
                  style="font-size: 14px;font-weight: bold;margin-right: 5px"
              >{{item.alias}}:</span>
              <span>{{item.value ? item.value :'暂无数据'}}</span>
            </div>
          </div>
        </el-card>
      </div>
      <div
        class="propertiesPop"
        v-if="$store.state.propertiesFlag == '2'"
      >
        <el-card class="box-card">
          <div slot="header">
            <span>{{ $store.state.propertiesInfo.title }}</span>
          </div>
          <div
            class="pointInfoBoxContext"
            style="height:250px;overflow-y: auto"
          >
            <div style="line-height: 20px">岩土名称: {{ $store.state.propertiesInfo.name }}</div>
            <div style="line-height: 20px">岩土类型: {{ $store.state.propertiesInfo.type }}</div>
            <div style="line-height: 20px">层底深度: {{ $store.state.propertiesInfo.botdepth }} 米</div>
            <div style="line-height: 20px">描述: {{ $store.state.propertiesInfo.describe }}</div>
          </div>
        </el-card>
      </div>
      <!--附件列表弹窗-->
      <el-dialog
        title="附件列表"
        :append-to-body="false"
        :visible.sync="showAttach"
        width="35%"
        :close-on-click-modal="false"
      >
        <div>
          <el-table
            :data="attachList"
            height="100%"
            style="width: 100%"
            border
          >
            <el-table-column
              align="center"
              type="index"
              label="序号"
              width="50"
            />
            <el-table-column
              prop="name"
              label="名称"
            >
            </el-table-column>
            <el-table-column
              label="时间"
              width="180"
            >
              <template slot-scope="scope">
                <span>{{format(scope.row.createTime)}}</span>
              </template>
            </el-table-column>
            <el-table-column
              label="操作"
              width="100"
            >
              <template slot-scope="scope">
                <el-button
                  v-if="showAttachDetailBtn(scope.row)"
                  @click="showAttachDetail(scope.row)"
                  type="text"
                  size="small"
                >查看</el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
      </el-dialog>
      <!--附件弹窗-->
      <el-dialog
        title="预览"
        :append-to-body="false"
        :visible.sync="dialog.dialogVisible"
        width="70%"
        :close-on-click-modal="false"
      >
        <div
          id="cenBg"
          v-bind:class="{ active: isActive, menuLayer: isMenuLayer }"
        ></div>
      </div>
          v-if="dialog.isPdf"
          class="pdfClass"
        >
          <iframe
            :src="dialog.src"
            type="application/x-google-chrome-pdf"
            width="100%"
            height="100%"
          >
          </iframe>
        </div>
        <div
          v-if="dialog.isJpg"
          class="pdfClass"
        >
          <img
            style="width:100%; height:100%;"
            :src="dialog.src"
            alt=""
          />
        </div>
      </el-dialog>
      <!--      <div-->
      <!--        @click="changeMenulayer"-->
      <!--        class="center CenDiv"-->
      <!--        :class="{ center1: centerFlag }"-->
      <!--      >-->
      <!--        <div-->
      <!--          id="cenBg"-->
      <!--          v-bind:class="{ active: isActive, menuLayer: isMenuLayer }"-->
      <!--        ></div>-->
      <!--      </div>-->
    </div>
  </div>
</template>
<script>
import $ from "jquery"
import mapMenuTop from "./MapView/mapMenuTop.vue"
import mapSpaceTop from "./MapView/mapSpaceTop.vue"
import $ from "jquery";
import mapMenuTop from "./MapView/mapMenuTop.vue";
import mapSpaceTop from "./MapView/mapSpaceTop.vue";
import {
  select_Comprehensive_ByPageAndCount,
  select_Comprehensive_SelectWktById,
  comprehensive_selectRoute,
} from "../api/api"
  dataLib_selectFiles, dataQuery_selectFields, dataQuery_selectDomains, dataQuery_selectByPage
} from '../api/api'
import { getToken } from '@/utils/auth'
export default {
  name: "",
  components: {
    mapMenuTop,
    mapSpaceTop,
  },
  data() {
    var validatePosition = (rule, value, callback) => {
      if (value === "") {
        callback(new Error("请输入密码"))
        callback(new Error("请输入密码"));
      } else {
        if (value) {
          let arr = value.split(",")
          let arr = value.split(",");
          if (arr.length !== 2) {
            callback(new Error("坐标点经纬度格式错误!"))
            callback(new Error("坐标点经纬度格式错误!"));
          } else {
            if (arr[0].startsWith("116") && arr[1].startsWith("39")) {
            } else {
              callback(new Error("坐标点纬度格式错误!"))
              callback(new Error("坐标点纬度格式错误!"));
            }
          }
        }
        callback()
        callback();
      }
    }
    };
    return {
      centerFlag: false,
      buffer: null,
@@ -312,7 +589,6 @@
        lon: "",
        lat: "",
      },
      rules: {
        lon: [
          { required: true, message: "请输入起点经纬度坐标", trigger: "blur" },
@@ -357,34 +633,102 @@
      layer3: null,
      isActive: false,
      isMenuLayer: true,
      selFrom: {},
      selectTree: null,
      showTerrainLevelDialog: false,
      menuList: [],
      defaultProps: {
        children: "children",
        label: "label",
      }, //树绑定对象
    }
      show2DMap: false,
      terrainFrom: {
        height: '10'
      },
      showLengendDialog: false,
      showAttach: false,
      attachList: [],
      dialog: {
        dialogVisible: false,
        isPdf: false,
        isJpg: false,
        src: ''
      },
      showAttribute: false,
      attributeList: [],
    };
  },
  mounted() {
    this.init3DMap()
    this.$bus.$on("mapChangeBox", res => {
      this.showChangeBox(res)
    })
    this.init3DMap();
    this.$bus.$on("mapChangeBox", (res) => {
      this.showChangeBox(res);
    });
    this.$bus.$on('changemapType', (e) => {
      this.show2DMap = e;
    });
    //模型捕捉
    this.catchmodel()
  },
  methods: {
    catchmodel() {
      var that = this;
      window.pickedFeature;
      window.pickedColor;
      window.modeCatchHandler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
      window.modeCatchHandler.setInputAction((event) => {
        window.pickedFeature && (window.pickedFeature.color = window.pickedColor);
        window.pickedFeature = sgworld.Viewer.scene.pick(event.position);
        if (Cesium.defined(window.pickedFeature)) {
          if (window.pickedFeature.primitive instanceof Cesium.Cesium3DTileset) {
            if (window.pickedFeature && window.pickedFeature.getProperty) {
              window.pickedColor = window.pickedFeature.color
              window.pickedFeature.color = Cesium.Color.RED.withAlpha(0.3);
              this.$store.state.catModel = true;
              this.$store.state.catModelInfo = {
                id: pickedFeature.getProperty("id"),
                name: pickedFeature.getProperty("name"),
                layerId: pickedFeature.primitive.layerId,
                layerName: pickedFeature.primitive.id
              };
            }
          }
        }
      }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
    },
    drawTerrainLevel() {
      this.clearTerrainLevel()
      var deep = parseFloat(this.terrainFrom.height)
      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, deep, {});
        }
      );
    },
    clearTerrainLevel() {
      if (window.TerrainFlattening) {
        window.TerrainFlattening && window.TerrainFlattening.remove();
      }
    },
    init3DMap() {
      var webKey = "94a34772eb88317fcbf8428e10448561"
      var webKey = "94a34772eb88317fcbf8428e10448561";
      //地图初始化
      window.sgworld = new SmartEarth.SGWorld("mapdiv", {
        url:SmartEarthRootUrl+"Workers/image/earth.jpg",
        url: SmartEarthRootUrl + "Workers/image/earth.jpg",
        licenseServer: window.sceneConfig.licenseServer,
      })
      });
      window.Viewer = window.sgworld._Viewer
      Viewer.imageryLayers._layers[0].show = false
      window.Viewer = window.sgworld._Viewer;
      Viewer.imageryLayers._layers[0].show = false;
      //定位
      // sgworld.Navigate.jumpTo({
      //   //跳转视角
@@ -396,24 +740,25 @@
      // })
      Viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(110, 33, 8000000),
      });
      this.layer1 = Viewer.imageryLayers.addImageryProvider(
        new Cesium.UrlTemplateImageryProvider({
          url: gaoDeBaseUrl[0].url,
        })
      )
      );
      this.layer2 = Viewer.imageryLayers.addImageryProvider(
        new Cesium.UrlTemplateImageryProvider({
          url: gaoDeBaseUrl[1].url,
        })
      )
      this.layer3 = Viewer.imageryLayers.addImageryProvider(
        new Cesium.UrlTemplateImageryProvider({
          url: gaoDeBaseUrl[2].url,
        })
      )
      );
      // this.layer3 = Viewer.imageryLayers.addImageryProvider(
      //   new Cesium.UrlTemplateImageryProvider({
      //     url: gaoDeBaseUrl[2].url,
      //   })
      // );
      // window.ImageLayer3 = this.layer3;
      // for (var i in gaoDeBaseUrl) {
      //   sgworld.Creator.createUrlTemplateImageryProvider(
@@ -426,13 +771,13 @@
      //   );
      // }
      Viewer._enableInfoOrSelection = false
      Viewer._enableInfoOrSelection = false;
      //显示fps
      Viewer.scene.debugShowFramesPerSecond = false
      Viewer.scene.debugShowFramesPerSecond = false;
      //导航控件
      window.sgworld.navControl("nav", false)
      window.sgworld.navControl("nav", false);
      //比例尺
      window.sgworld.navControl("scale", false)
      window.sgworld.navControl("scale", false);
      //开启深度检测
      // sgworld.Analysis.depthTestAgainstTerrain(true)
      Viewer.scene.globe.depthTestAgainstTerrain = true;
@@ -457,12 +802,12 @@
      var option = {
        url: window.sceneConfig.SGUrl,
        layerName: window.sceneConfig.mptName,
        requestVertexNormals: true
      }
        requestVertexNormals: true,
      };
      sgworld.Creator.sfsterrainprovider("", option, "", true, "");
      window.elevationTool = new SmartEarth.ElevationTool(window.sgworld)
      elevationTool.setContourColor("#F1D487")
      window.elevationTool = new SmartEarth.ElevationTool(window.sgworld);
      elevationTool.setContourColor("#F1D487");
      // var helper = new Cesium.EventHelper();
      // helper.add(Viewer.scene.globe.tileLoadProgressEvent, function (e) {
@@ -476,26 +821,24 @@
    },
    changeMenulayer() {
      this.isActive = !this.isActive
      this.isMenuLayer = !this.isMenuLayer
      this.setLayerVisible()
      this.isActive = !this.isActive;
      this.isMenuLayer = !this.isMenuLayer;
      this.setLayerVisible();
    },
    setLayerVisible() {
      if (this.isActive == true) {
        // Viewer.imageryLayers._layers[1].show = true
        // Viewer.imageryLayers._layers[2].show = false
        Viewer.imageryLayers._layers[1].show = true
        Viewer.imageryLayers._layers[2].show = false
        // Viewer.imageryLayers._layers[3].show = false
        Viewer.imageryLayers.lower(this.layer2);
        Viewer.imageryLayers.lower(this.layer3);
        // Viewer.imageryLayers.lower(this.layer2);
        // Viewer.imageryLayers.lower(this.layer3);
      } else {
        // Viewer.imageryLayers.raise(this.layer3);
        // Viewer.imageryLayers.raise(this.layer2);
        Viewer.imageryLayers.raise(this.layer3);
        Viewer.imageryLayers.raise(this.layer2);
        // Viewer.imageryLayers._layers[1].show = false
        // Viewer.imageryLayers._layers[2].show = true
        Viewer.imageryLayers._layers[1].show = false
        Viewer.imageryLayers._layers[2].show = true
        // Viewer.imageryLayers._layers[3].show = true
      }
    },
@@ -505,62 +848,86 @@
        if (res.id == "6") {
        } else if (res.id == "7") {
        } else {
          this.showBufferBoxDialog = true
          this.showBufferBoxDialog = true;
        }
      } else if (res.name == "Coord") {
        if (res.id == "1") {
          this.showCoordLocalBoxDialog = true
          this.showCoordLocalBoxDialog = true;
          this.showToponymicLocalBoxDialog = false;
        } else if (res.id == "2") {
          this.showToponymicLocalBoxDialog = true
          this.getToponymicData()
          this.showToponymicLocalBoxDialog = true;
          this.showCoordLocalBoxDialog = false;
          this.getToponymicData();
        }
      } else if (res.name == "Analysis") {
        if (res.id == "3") {
          this.showPathAnalysisBoxDialog = true
          if (res.show == true) {
            this.showPathAnalysisBoxDialog = true;
          } else {
            this.showPathAnalysisBoxDialog = false;
            this.closeBufferBox(4);
          }
        }
      } else if (res.name == "Trrain") {
        switch (res.id) {
          case "d10":
            this.showTerrainLevelDialog = !this.showTerrainLevelDialog;
            this.clearTerrainLevel();
            break;
        }
      } else if (res.name == "Lengend") {
        switch (res.id) {
          case "d2":
            this.showLengendDialog = res.vshow;
            break;
        }
      }
    },
    handleSizeChange(val) {
      this.listData.pageSize = val
      this.getToponymicData()
      this.listData.pageSize = val;
      this.getToponymicData();
    },
    handleCurrentChange(val) {
      this.listData.pageIndex = val
      this.getToponymicData()
      this.listData.pageIndex = val;
      this.getToponymicData();
    },
    setQueryTable() {
      this.listData.pageSize = 10
      this.listData.pageIndex = 1
      this.getToponymicData()
      this.listData.pageSize = 10;
      this.listData.pageIndex = 1;
      this.getToponymicData();
    },
    async getToponymicData() {
      if (this.listData.tab == "") {
        delete this.listData.tab
        delete this.listData.tab;
      }
      this.listData.name = this.comprehensive.name
      const data = await select_Comprehensive_ByPageAndCount(this.listData)
      this.listData.name = this.comprehensive.name;
      const data = await select_Comprehensive_ByPageAndCount(this.listData);
      if (data.code != 200) {
        this.$message.error("列表调用失败")
        this.$message.error("列表调用失败");
      }
      this.tableData = data.result
      this.count = data.count
      this.tableData = data.result;
      this.count = data.count;
    },
    async handleLocation(index, row) {
      const data = await select_Comprehensive_SelectWktById({ id: row.gid })
      const data = await select_Comprehensive_SelectWktById({ id: row.gid });
      if (data.code != 200) {
        this.$message.error("列表调用失败")
        this.$message.error("列表调用失败");
      }
      var val = data.result.slice(6, data.result.length - 1)
      val = val.split(" ")
      var val = data.result.slice(6, data.result.length - 1);
      val = val.split(" ");
      var position = {
        X: parseFloat(val[0]),
        Y: parseFloat(val[1]),
        Altitude: 2000,
      }
      };
      if (this.imagePoint != null) {
        sgworld.Creator.DeleteObject(this.imagePoint)
        this.imagePoint = null
        sgworld.Creator.DeleteObject(this.imagePoint);
        this.imagePoint = null;
      }
      this.imagePoint = sgworld.Creator.CreateLabel(
        position,
@@ -572,7 +939,7 @@
        },
        0,
        "巡检点"
      )
      );
      sgworld.Navigate.jumpTo({
        //跳转视角
@@ -581,121 +948,156 @@
          parseFloat(val[1]),
          10000
        ),
      })
      });
    },
    closeBufferBox(res) {
      switch (res) {
        case 1:
          this.showBufferBoxDialog = false
          this.clearBuffer()
          break
          this.showBufferBoxDialog = false;
          this.clearBuffer();
          break;
        case 2:
          this.showCoordLocalBoxDialog = false
          break
          this.showCoordLocalBoxDialog = false;
          break;
        case 3:
          this.showToponymicLocalBoxDialog = false
          this.showToponymicLocalBoxDialog = false;
          if (this.imagePoint != null) {
            sgworld.Creator.DeleteObject(this.imagePoint)
            this.imagePoint = null
            sgworld.Creator.DeleteObject(this.imagePoint);
            this.imagePoint = null;
          }
          break
          break;
        case 4:
          this.showPathAnalysisBoxDialog = false
          this.clearPathAll(3)
          break
          this.showPathAnalysisBoxDialog = false;
          this.clearPathAll(3);
          break;
        case 5:
          this.showTerrainLevelDialog = false;
          this.clearTerrainLevel()
          break;
        case 6:
          this.$store.state.propertiesFlag = null;
          this.showAttribute = false;
          break;
      }
    },
    //定位
    setCoordLocal() {
      var lon = parseFloat(this.coordFrom.lon)
      var lat = parseFloat(this.coordFrom.lat)
      var height = parseFloat(this.coordFrom.height)
      var lon = parseFloat(this.coordFrom.lon);
      var lat = parseFloat(this.coordFrom.lat);
      var height = parseFloat(this.coordFrom.height);
      var position = {
        X: lon,
        Y: lat,
        Altitude: 2000,
      };
      this.imagePoint = sgworld.Creator.CreateLabel(
        position,
        "",
        SmartEarthRootUrl + "Workers/image/mark.png",
        {
          disableDepthTestDistance: Infinity,
          scale: 0.8,
        },
        0,
        "巡检点"
      );
      sgworld.Navigate.jumpTo({
        //跳转视角
        destination: new Cesium.Cartesian3.fromDegrees(lon, lat, height),
      })
        destination: new Cesium.Cartesian3.fromDegrees(
          lon,
          lat,
          height
        ),
      });
      // sgworld.Navigate.jumpTo({
      //   //跳转视角
      //   destination: new Cesium.Cartesian3.fromDegrees(lon, lat, height),
      // });
    },
    //缓冲区分析
    clearBuffer() {
      if (this.buffer == null) return
      this.buffer && this.buffer.clearBuff()
      this.buffer = null
      if (this.buffer == null) return;
      this.buffer && this.buffer.clearBuff();
      this.buffer = null;
    },
    getBufferTable(type) {
      const points =
        this.buffer.this_buff.buff.polygon.hierarchy.getValue().positions
      let geometrys = ""
      let firstPoint
      let degrees = ""
        this.buffer.this_buff.buff.polygon.hierarchy.getValue().positions;
      let geometrys = "";
      let firstPoint;
      let degrees = "";
      points.forEach((p, i) => {
        degrees = window.sgworld.Core.toDegrees(p)
        geometrys += "[" + degrees.lon + "," + degrees.lat + "],"
        i === 0 && (firstPoint = "[" + degrees.lon + "," + degrees.lat + "]")
      })
      geometrys += firstPoint
      if (geometrys.length != 0) geometrys.trimEnd(",")
      geometrys = "{rings:[[" + geometrys + "]]}"
        degrees = window.sgworld.Core.toDegrees(p);
        geometrys += "[" + degrees.lon + "," + degrees.lat + "],";
        i === 0 && (firstPoint = "[" + degrees.lon + "," + degrees.lat + "]");
      });
      geometrys += firstPoint;
      if (geometrys.length != 0) geometrys.trimEnd(",");
      geometrys = "{rings:[[" + geometrys + "]]}";
    },
    addBuffer(res) {
      this.clearBuffer()
      var buffRadius = this.bufFrom.val
      this.clearBuffer();
      var buffRadius = this.bufFrom.val;
      switch (res) {
        case 1:
          this.buffer = sgworld.Analysis.DrawPointBuffer(buffRadius, event => {
            this.getBufferTable("point")
          })
          break
          this.buffer = sgworld.Analysis.DrawPointBuffer(
            buffRadius,
            (event) => {
              this.getBufferTable("point");
            }
          );
          break;
        case 2:
          this.buffer = sgworld.Analysis.DrawPolylineBuffer(
            buffRadius,
            event => {
              this.getBufferTable("line")
            (event) => {
              this.getBufferTable("line");
            }
          )
          break
          );
          break;
        case 3:
          this.buffer = sgworld.Analysis.DrawPolygonBuffer(
            buffRadius,
            event => {
              this.getBufferTable("polygon")
            (event) => {
              this.getBufferTable("polygon");
            }
          )
          break
          );
          break;
      }
    },
    async showMouseLeftClick(res) {
      if (res == 3) {
        this.$refs.form.validate(valid => {
        this.$refs.form.validate((valid) => {
          if (!valid) {
            return false
            return false;
          }
        })
        this.clearPathAll(3)
        var start = this.pathFrom.lon.split(",")
        var end = this.pathFrom.lat.split(",")
        });
        this.clearPathAll(3);
        var start = this.pathFrom.lon.split(",");
        var end = this.pathFrom.lat.split(",");
        var startData = {
          x1: parseFloat(start[0]),
          y1: parseFloat(start[1]),
          x2: parseFloat(end[0]),
          y2: parseFloat(end[1]),
        }
        };
        const data = await comprehensive_selectRoute(startData)
        const data = await comprehensive_selectRoute(startData);
        if (data.code != 200) {
          return this.$message.error("数据请求失败")
          return this.$message.error("数据请求失败");
        }
        var wkt = this.$wkt.parse(data.result)
        var wkt = this.$wkt.parse(data.result);
        var bufferSource = Cesium.GeoJsonDataSource.load(wkt, {
          stroke: new Cesium.Color(82 / 255, 152 / 255, 255 / 255, 1),
          strokeWidth: 5,
          clampToGround: true,
        })
        bufferSource.then(bufferSource => {
          sgworld.Navigate.flyToObj(bufferSource)
          Viewer.dataSources.add(bufferSource)
        })
        });
        bufferSource.then((bufferSource) => {
          sgworld.Navigate.flyToObj(bufferSource);
          Viewer.dataSources.add(bufferSource);
        });
        // var jsonurl =
        //   wnsUrl +
        //   '?start=' +
@@ -714,29 +1116,29 @@
        //   },
        // });
      } else {
        var that = this
        var that = this;
        if (this.handler != null) {
          this.clearLeftClick()
          this.clearLeftClick();
        }
        this.handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas)
        this.handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
        this.handler.setInputAction(function (event) {
          let cartesian = Viewer.camera.pickEllipsoid(event.position)
          let cartographic = Cesium.Cartographic.fromCartesian(cartesian)
          let cartesian = Viewer.camera.pickEllipsoid(event.position);
          let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
          let lng = parseFloat(
            Cesium.Math.toDegrees(cartographic.longitude)
          ).toFixed(6) // 经度
          ).toFixed(6); // 经度
          let lat = parseFloat(
            Cesium.Math.toDegrees(cartographic.latitude)
          ).toFixed(6) // 纬度
          ).toFixed(6); // 纬度
          if (that.linePath != null) {
            that.clearPathAll(3)
            that.clearPathAll(3);
          }
          if (lng != null && lat != null) {
            let val = lng + "," + lat
            var position = sgworld.Creator.CreatePosition(lng, lat, 0)
            let val = lng + "," + lat;
            var position = sgworld.Creator.CreatePosition(lng, lat, 0);
            if (res == 1) {
              if (that.pathStart != null) {
                that.clearPathAll(1)
                that.clearPathAll(1);
              }
              that.pathStart = sgworld.Creator.CreateLabel(
@@ -754,12 +1156,12 @@
                },
                0,
                "起始点"
              )
              );
              that.pathFrom.lon = val
              that.pathFrom.lon = val;
            } else if (res == 2) {
              if (that.pathEnd != null) {
                that.clearPathAll(2)
                that.clearPathAll(2);
              }
              that.pathEnd = sgworld.Creator.CreateLabel(
@@ -777,68 +1179,68 @@
                },
                0,
                "结束点"
              )
              that.pathFrom.lat = val
              );
              that.pathFrom.lat = val;
            }
            that.clearLeftClick()
            that.clearLeftClick();
          }
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
      }
    },
    clearPathAll(res) {
      switch (res) {
        case 1:
          if (this.pathStart != null) {
            sgworld.Creator.DeleteObject(this.pathStart)
            this.pathStart = null
            sgworld.Creator.DeleteObject(this.pathStart);
            this.pathStart = null;
          }
          break
          break;
        case 2:
          if (this.pathEnd != null) {
            sgworld.Creator.DeleteObject(this.pathEnd)
            this.pathEnd = null
            sgworld.Creator.DeleteObject(this.pathEnd);
            this.pathEnd = null;
          }
          break
          break;
        case 3:
          if (this.pathStart != null) {
            sgworld.Creator.DeleteObject(this.pathStart)
            this.pathStart = null
            sgworld.Creator.DeleteObject(this.pathStart);
            this.pathStart = null;
          }
          if (this.pathEnd != null) {
            sgworld.Creator.DeleteObject(this.pathEnd)
            this.pathEnd = null
            sgworld.Creator.DeleteObject(this.pathEnd);
            this.pathEnd = null;
          }
          if (this.linePath != null) {
            sgworld.Creator.DeleteObject(this.linePath)
            this.linePath = null
            sgworld.Creator.DeleteObject(this.linePath);
            this.linePath = null;
          }
          Viewer.dataSources.removeAll()
          break
          Viewer.dataSources.removeAll();
          break;
        case 4:
          if (this.linePath != null) {
            sgworld.Creator.DeleteObject(this.linePath)
            this.linePath = null
            sgworld.Creator.DeleteObject(this.linePath);
            this.linePath = null;
          }
          break
          break;
      }
    },
    clearLeftClick() {
      this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) //移除事件
      this.handler = null
      this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //移除事件
      this.handler = null;
    },
    executeFly3D(res) {
      var position = []
      var position = [];
      if (res) {
        var positionA = res.features
        var positionA = res.features;
        if (positionA.length > 0) {
          for (var i = 0; i < positionA.length; i++) {
            var val = positionA[i]
            var val = positionA[i];
            if (val.geometry.type == "LineString") {
              var val_data = val.geometry.coordinates
              var val_data = val.geometry.coordinates;
              for (var j = 0; j < val_data.length; j++) {
                position.push({ x: val_data[j][0], y: val_data[j][1] })
                position.push({ x: val_data[j][0], y: val_data[j][1] });
              }
            }
          }
@@ -848,15 +1250,198 @@
            1,
            0,
            "线"
          )
          sgworld.Navigate.flyToObj(this.linePath)
          );
          sgworld.Navigate.flyToObj(this.linePath);
        } else {
          return
          return;
        }
      }
    },
    //二维/三维地图切换
    changeMapType() {
      //
      this.show2DMap = !this.show2DMap;
      //二维
      if (this.show2DMap) {
        this.$bus.$emit("changemap", 2);
      }
      //三维
      else {
        this.$bus.$emit("changemap", 3);
      }
      this.$bus.$emit("changemapType", this.show2DMap);
    },
    //获取附件列表
    async getAttatchList() {
      if (this.$store.state.propertiesName == null) {
        return
      }
      let tabName = this.$store.state.propertiesName.ns + '.' + this.$store.state.propertiesName.tab;
      let eventid = this.$store.state.propertiesInfo.eventid;
      var obj = {
        eventid: eventid,
        tabName: tabName,
      };
      const res = await dataLib_selectFiles(obj);
      if (res.code != 200) {
        this.$message.error('附件查询失败');
        return
      }
      if (res.result.length <= 0) {
        this.$message.error('暂无附件');
        return
      }
      this.attachList = res.result;
      this.showAttach = true;
    },
    //是否显示查看按钮
    showAttachDetailBtn(row) {
      var name = row.name;
      if (name.indexOf('.pdf') != -1 || name.indexOf('.jpg') != -1 || name.indexOf('.gif') != -1 || name.indexOf('.png') != -1 || name.indexOf('.jpeg') != -1) {
        return true;
      }
      return false;
    },
    //数据初始化
    refreshAttatchDetail() {
      this.dialog.src = "";
      this.dialog.dialogVisible = false;
      this.dialog.isPdf = false;
      this.dialog.isJpg = false;
    },
    //查看附件
    showAttachDetail(row) {
      this.refreshAttatchDetail();
      var name = row.name;
      if (name.indexOf('.pdf') != -1) {
        this.dialog.dialogVisible = true;
        this.dialog.isPdf = true;
        var url = BASE_URL + "/comprehensive/downloadForView?guid=" + row.guid + "&token=" + getToken();
        this.dialog.src = url
      }
      else if (name.indexOf('.jpg') != -1 || name.indexOf('.gif') != -1 || name.indexOf('.png') != -1 || name.indexOf('.jpeg') != -1) {
        this.dialog.dialogVisible = true;
        this.dialog.isJpg = true;
        var url = BASE_URL + "/comprehensive/downloadForView?guid=" + row.guid + "&token=" + getToken();
        this.dialog.src = url
      }
    },
    //格式化时间
    format(shijianchuo) {
      //shijianchuo是整数,否则要parseInt转换
      var time = new Date(shijianchuo);
      var y = time.getFullYear();
      var m = time.getMonth() + 1;
      var d = time.getDate();
      var h = time.getHours();
      var mm = time.getMinutes();
      var s = time.getSeconds();
      return (
        y +
        '-' +
        this.add0(m) +
        '-' +
        this.add0(d) +
        ' ' +
        h +
        ':' +
        mm +
        ':' +
        s
      );
    },
    //格式化时间
    add0(m) {
      return m < 10 ? '0' + m : m;
    },
    //勘察信息表
    getPointInfo(){
      this.showAttribute = !this.showAttribute;
      if (this.showAttribute){
        let attrbuteOption = workSite;
        var name = attrbuteOption[0].table.replaceAll("_", "");
        this.getAttributeDomFiled(name);
      }
    },
    //获取每个表字段名称及阈值
    async getAttributeDomFiled(res) {
      //查询字段信息;
      const fileds = await dataQuery_selectFields({
        name: res,
      });
      if (fileds.code != 200) {
        this.$message.error("调用列表失败,请联系工作人员!");
        return;
      }
      //查询阈值信息;
      const domains = await dataQuery_selectDomains({
        name: res,
      });
      if (domains.code != 200) {
        this.$message.error("调用列表失败,请联系工作人员!");
        return;
      }
      var data1 = fileds.result;
      var data2 = domains.result;
      var std = [];
      this.filedsOption = [];
      for (var i in data1) {
        if (data1[i].type != 'geometry' && data1[i].type) {
          this.filedsOption.push(data1[i]);
        }
        if (data1[i].showtype == 1) {
          if (data1[i].domainNa != null) {
            data1[i].domainNa = this.getDomainNaFild(data1[i].domainNa, data2);
          }
          std.push(data1[i]);
        }
      }
      this.getAttributeTableData(std, res,this.$store.state.propertiesInfo.工点名称,data1)
    },
    //获取表格信息
    async getAttributeTableData(res, name,title,list) {
      let attributeFild = res;
      let parmams = {
        name:name,
        pageIndex:1,
        pageSize:10,
        count:0,
        title:title,
        filter : "workname = " + "'" + title + "'",
      }
      const data = await dataQuery_selectByPage(parmams);
      if (data.code != 200) {
        this.$message.error("调用列表失败,请联系工作人员!");
        return;
      }
      var res_val = attributeFild;
      for (var i in data.result) {
        let val_Data = data.result[i];
        for (var j in res_val) {
          if (res_val[j].domainNa != null && res_val[j].domainNa != undefined) {
            val_Data[res_val[j].field] = res_val[j].domainNa;
          }
        }
      }
      let info = data.result.length >0 ? data.result[0] : '';
      if (info){
        let keys = Object.keys(info);
        keys.forEach((obj) => {
          list.forEach((item) => {
            if (item.field == obj){
              item.value = info[obj];
            }
          })
        })
        this.attributeList = list;
      }
    },
  },
}
  destroyed() {
    this.showAttribute = false
  }
};
</script>
<style scoped lang="less">
@@ -871,11 +1456,12 @@
    overflow: hidden;
    position: relative;
    .toponymicLocalBox {
      width: 750px;
      width: 350px;
      //width: 750px;
      height: 450x;
      z-index: 40;
      position: absolute;
      right: 1%;
      right: 8%;
      bottom: 1%;
    }
    .bufferBox {
@@ -883,7 +1469,7 @@
      height: 230px;
      z-index: 40;
      position: absolute;
      right: 1%;
      right: 6%;
      bottom: 1%;
    }
    .coordLocalBox {
@@ -891,16 +1477,45 @@
      height: 370px;
      z-index: 40;
      position: absolute;
      right: 1%;
      right: 8%;
      bottom: 1%;
    }
    .pathAnalysisBox {
      width: 412px;
    .propertiesPop {
      width: 350px;
      height: 370px;
      z-index: 40;
      position: absolute;
      right: 1%;
      right: 8%;
      bottom: 1%;
      /deep/ .el-card__header {
        padding: 10px 20px;
      }
      /deep/ .el-card__body {
        padding: 10px 20px;
      }
    }
    .attributionPop{
      width: 350px;
      height: 370px;
      z-index: 40;
      position: absolute;
      right: 38%;
      bottom: 1%;
      /deep/ .el-card__header {
        padding: 10px 20px;
      }
      /deep/ .el-card__body {
        padding: 10px 20px;
      }
    }
    .terrainLevelBox {
      width: 350px;
      height: 370px;
      z-index: 40;
      position: absolute;
      right: 8%;
      bottom: -11%;
    }
    .box-card {
@@ -908,7 +1523,6 @@
      border: 1px solid rgba(32, 160, 255, 0.6);
    }
    .menu_Top {
      opacity: 0.85;
      width: 100%;
      padding: 1%;
      position: absolute;
@@ -927,6 +1541,32 @@
      bottom: 5%;
      position: absolute;
      z-index: 40;
    }
    .lengend {
      width: 300px;
      z-index: 40;
      position: absolute;
      right: 1%;
      bottom: 13%;
      transform: rotate(90deg);
      .lengendBox {
        .lengendSpan {
          display: flex;
          justify-content: space-between;
          margin-top: 10px;
          div {
            transform: rotate(-90deg);
          }
        }
        .lengendImg {
          -ms-transform: rotate(180deg); /* IE 9 */
          -webkit-transform: rotate(180deg); /* Safari and Chrome */
          transform: rotate(180deg);
          width: 100%;
          height: 30px;
        }
      }
    }
  }
}
@@ -1026,6 +1666,45 @@
  border-radius: 5px;
}
.changeMapType {
  position: absolute;
  bottom: 1%;
  left: calc(1% + 75px);
  height: 40px;
  width: 60px;
  z-index: 101;
  display: flex;
  justify-content: center;
  align-items: center;
  // box-shadow: 3px 3px 6px #666;
  //border: 1px solid rgba(204, 204, 204, 0.76);
  border-radius: 5px;
  cursor: pointer;
}
.mapTypeTwo {
  width: 100%;
  height: 100%;
  margin-left: 10px;
  background-image: url("../assets/img/synthesis/3D.png");
  background-repeat: no-repeat;
  background-size: contain;
}
.mapTypeThree {
  width: 100%;
  height: 100%;
  margin-left: 10px;
  background-image: url("../assets/img/synthesis/2D 拷贝 2.png");
  background-repeat: no-repeat;
  background-size: contain;
}
.pdfClass {
  height: 70vh;
  width: 100%;
  position: relative;
}
// .menuSelect .el-input__inner {
//   background: rgba(255, 255, 255, 0.2) !important;
//   color: white !important;