管道基础大数据平台系统开发-【前端】-新系統界面
Surpriseplus
2023-02-06 4e3d77dcbe421a4d6611ebcdd1ac3165cb36ad4b
src/components/mapsdk.vue
@@ -1,47 +1,85 @@
<template>
  <div class="mapBox">
    <div id="mapdiv">
      <div class="menu_Top" v-if="$store.state.mapMenuBoolean">
      <div
        class="menu_Top"
        v-if="$store.state.mapMenuBoolean"
      >
        <map-menu-top v-if="$store.state.mapMenuBoxFlag == '1'" />
        <map-space-top v-if="$store.state.mapMenuBoxFlag == '2'" />
      </div>
      <div class="menu_Popup" v-if="$store.state.mapPopBoolean">
        <map-menu-pop v-if="$store.state.mapPopBoxFlag == '1'" />
        <map-space-pop v-if="$store.state.mapPopBoxFlag == '2'" />
      </div>
      <div class="bufferBox" v-if="showBufferBoxDialog">
      <div
        class="bufferBox"
        v-if="showBufferBoxDialog"
      >
        <el-card class="box-card">
          <div slot="header" class="clearfix">
          <div
            slot="header"
            class="clearfix"
          >
            <span>缓冲区分析</span>
            <div style="float: right; cursor: pointer">
              <i class="el-icon-close" @click="closeBufferBox(1)"></i>
              <i
                class="el-icon-close"
                @click="closeBufferBox(1)"
              ></i>
            </div>
          </div>
          <div class="box-body">
            <el-form ref="form" :model="bufFrom" label-width="100px">
            <el-form
              ref="form"
              :model="bufFrom"
              label-width="100px"
            >
              <el-form-item label="缓冲半径(米):">
                <el-input v-model="bufFrom.val"></el-input>
              </el-form-item>
              <el-form-item>
                <el-button @click="addBuffer(1)" type="info">点</el-button>
                <el-button @click="addBuffer(2)" type="info">线</el-button>
                <el-button @click="addBuffer(3)" type="info">面</el-button>
                <el-button @click="clearBuffer" type="info">清除</el-button>
                <el-button
                  @click="addBuffer(1)"
                  type="info"
                >点</el-button>
                <el-button
                  @click="addBuffer(2)"
                  type="info"
                >线</el-button>
                <el-button
                  @click="addBuffer(3)"
                  type="info"
                >面</el-button>
                <el-button
                  @click="clearBuffer"
                  type="info"
                >清除</el-button>
              </el-form-item>
            </el-form>
          </div>
        </el-card>
      </div>
      <div class="coordLocalBox" v-if="showCoordLocalBoxDialog">
      <div
        class="coordLocalBox"
        v-if="showCoordLocalBoxDialog"
      >
        <el-card class="box-card">
          <div slot="header" class="clearfix">
          <div
            slot="header"
            class="clearfix"
          >
            <span>坐标定位</span>
            <div style="float: right; cursor: pointer">
              <i class="el-icon-close" @click="closeBufferBox(2)"></i>
              <i
                class="el-icon-close"
                @click="closeBufferBox(2)"
              ></i>
            </div>
          </div>
          <div class="box-body">
            <el-form ref="form" :model="coordFrom" label-width="50px">
            <el-form
              ref="form"
              :model="coordFrom"
              label-width="50px"
            >
              <el-form-item label="经度:">
                <el-input v-model="coordFrom.lon"></el-input>
              </el-form-item>
@@ -52,22 +90,38 @@
                <el-input v-model="coordFrom.height"></el-input>
              </el-form-item>
              <el-form-item>
                <el-button @click="setCoordLocal" type="info">定位</el-button>
                <el-button
                  @click="setCoordLocal"
                  type="info"
                >定位</el-button>
              </el-form-item>
            </el-form>
          </div>
        </el-card>
      </div>
      <div class="toponymicLocalBox" v-if="showToponymicLocalBoxDialog">
      <div
        class="toponymicLocalBox"
        v-if="showToponymicLocalBoxDialog"
      >
        <el-card class="box-card">
          <div slot="header" class="clearfix">
          <div
            slot="header"
            class="clearfix"
          >
            <span>地名定位</span>
            <div style="float: right; cursor: pointer">
              <i class="el-icon-close" @click="closeBufferBox(3)"></i>
              <i
                class="el-icon-close"
                @click="closeBufferBox(3)"
              ></i>
            </div>
          </div>
          <div class="box-body">
            <el-form :model="comprehensive" :inline="true" label-width="50px">
            <el-form
              :model="comprehensive"
              :inline="true"
              label-width="50px"
            >
              <el-form-item label="地名:">
                <el-input
                  style="width: 200px"
@@ -75,17 +129,28 @@
                ></el-input>
              </el-form-item>
              <el-form-item>
                <el-button @click="setQueryTable" type="info">查询</el-button>
                <el-button
                  @click="setQueryTable"
                  type="info"
                >查询</el-button>
              </el-form-item>
            </el-form>
            <el-table :data="tableData" height="200px" style="width: 100%">
            <el-table
              :data="tableData"
              height="200px"
              style="width: 100%"
            >
              <el-table-column
                align="center"
                type="index"
                label="序号"
                width="70px"
              />
              <el-table-column prop="name" align="center" label="定位">
              <el-table-column
                prop="name"
                align="center"
                label="定位"
              >
                <template slot-scope="scope">
                  <el-button
                    @click="handleLocation(scope.$index, scope.row)"
@@ -94,10 +159,17 @@
                  ></el-button>
                </template>
              </el-table-column>
              <el-table-column prop="name" align="center" label="地名">
              <el-table-column
                prop="name"
                align="center"
                label="地名"
              >
              </el-table-column>
            </el-table>
            <div style="margin-top: 10px" class="pagination_box">
            <div
              style="margin-top: 10px"
              class="pagination_box"
            >
              <el-pagination
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
@@ -112,44 +184,64 @@
          </div>
        </el-card>
      </div>
      <div class="pathAnalysisBox" v-if="showPathAnalysisBoxDialog">
      <div
        class="pathAnalysisBox"
        v-if="showPathAnalysisBoxDialog"
      >
        <el-card class="box-card">
          <div slot="header" class="clearfix">
          <div
            slot="header"
            class="clearfix"
          >
            <span>路径分析</span>
            <div style="float: right; cursor: pointer">
              <i class="el-icon-close" @click="closeBufferBox(4)"></i>
              <i
                class="el-icon-close"
                @click="closeBufferBox(4)"
              ></i>
            </div>
          </div>
          <div class="box-body">
            <el-form ref="form" :model="pathFrom" label-width="50px">
              <el-form-item label="经度:">
            <el-form
              ref="form"
              :model="pathFrom"
              label-width="50px"
            >
              <el-form-item label="起点:">
                <el-input
                  style="width: 300px"
                  style="width: 250px"
                  v-model="pathFrom.lon"
                  :disabled="true"
                ></el-input>
                <el-link
                  :underline="false"
                  @click="showMouseLeftClick(1)"
                  style="margin-left: 10px"
                  ><i style="color: white" class="el-icon-plus"></i
                ></el-link>
                ><i
                    style="color: white"
                    class="el-icon-plus"
                  ></i></el-link>
              </el-form-item>
              <el-form-item label="纬度:">
              <el-form-item label="终点:">
                <el-input
                  style="width: 300px"
                  style="width: 250px"
                  v-model="pathFrom.lat"
                  :disabled="true"
                ></el-input>
                <el-link
                  :underline="false"
                  @click="showMouseLeftClick(2)"
                  style="margin-left: 10px"
                  ><i style="color: white" class="el-icon-plus"></i
                ></el-link>
                ><i
                    style="color: white"
                    class="el-icon-plus"
                  ></i></el-link>
              </el-form-item>
              <el-form-item>
                <el-button @click="showMouseLeftClick(3)" type="info"
                  >查询</el-button
                >
                <el-button
                  @click="showMouseLeftClick(3)"
                  type="info"
                >查询</el-button>
              </el-form-item>
            </el-form>
          </div>
@@ -172,20 +264,21 @@
<script>
import $ from 'jquery';
import mapMenuTop from './MapView/mapMenuTop.vue';
import mapMenuPop from './MapView/mapMenuPop.vue';
import mapSpaceTop from './MapView/mapSpaceTop.vue';
import mapSpacePop from './MapView/mapSpacePop.vue';
import {
  select_Comprehensive_ByPageAndCount,
  select_Comprehensive_SelectWktById,
  comprehensive_selectRoute
} from '../api/api';
export default {
  name: '',
  components: {
    mapMenuTop,
    mapMenuPop,
    mapSpaceTop,
    mapSpacePop,
  },
  data() {
    return {
@@ -197,16 +290,16 @@
      showPathAnalysisBoxDialog: false,
      comprehensive: {},
      pathFrom: {
        lon: '116.086746,39.937314',
        lat: '116.086000,39.936289',
        lon: ' ',
        lat: ' ',
      },
      bufFrom: {
        val: 50,
      },
      coordFrom: {
        lon: 110,
        lat: 32,
        height: 8000000,
        lon: 116.3911,
        lat: 39.9115,
        height: 100000,
      },
      listData: {
        name: null,
@@ -227,56 +320,7 @@
      selFrom: {},
      selectTree: null,
      menuList: [
        {
          id: 1,
          label: '一级 1',
          children: [
            {
              id: 4,
              label: '二级 1-1',
              children: [
                {
                  id: 9,
                  label: '三级 1-1-1',
                },
                {
                  id: 10,
                  label: '三级 1-1-2',
                },
              ],
            },
          ],
        },
        {
          id: 2,
          label: '一级 2',
          children: [
            {
              id: 5,
              label: '二级 2-1',
            },
            {
              id: 6,
              label: '二级 2-2',
            },
          ],
        },
        {
          id: 3,
          label: '一级 3',
          children: [
            {
              id: 7,
              label: '二级 3-1',
            },
            {
              id: 8,
              label: '二级 3-2',
            },
          ],
        },
      ],
      menuList: [],
      defaultProps: {
        children: 'children',
        label: 'label',
@@ -299,62 +343,49 @@
      });
      window.Viewer = window.sgworld._Viewer;
      Viewer.imageryLayers._layers[0].show = false;
      //定位
      sgworld.Navigate.jumpTo({
        //跳转视角
        destination: new Cesium.Cartesian3.fromDegrees(
          116.055913,
          39.937685,
          8000
          116.3911,
          39.9115,
          100000
        ),
      });
      Viewer.imageryLayers.addImageryProvider(
        new Cesium.WebMapTileServiceImageryProvider({
          url: 'http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=94a34772eb88317fcbf8428e10448561',
          layer: 'tdtVecBasicLayer',
          style: 'default',
          format: 'image/jpeg',
          tileMatrixSetID: 'GoogleMapsCompatible',
          show: false,
        new Cesium.UrlTemplateImageryProvider({
          url: gaoDeBaseUrl[0].url,
        })
      );
      Viewer.imageryLayers.addImageryProvider(
        new Cesium.WebMapTileServiceImageryProvider({
          url: 'http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=94a34772eb88317fcbf8428e10448561',
          layer: 'tdtBasicLayer',
          style: 'default',
          format: 'image/jpeg',
          tileMatrixSetID: 'GoogleMapsCompatible',
          show: false,
        new Cesium.UrlTemplateImageryProvider({
          url: gaoDeBaseUrl[1].url,
        })
      );
      Viewer.imageryLayers.addImageryProvider(
        new Cesium.WebMapTileServiceImageryProvider({
          url: 'http://t0.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=94a34772eb88317fcbf8428e10448561',
          layer: 'tdtAnnoLayer',
          style: 'default',
          format: 'image/jpeg',
          tileMatrixSetID: 'GoogleMapsCompatible',
        new Cesium.UrlTemplateImageryProvider({
          url: gaoDeBaseUrl[2].url,
        })
      );
      // sgworld.Navigate.jumpTo({
      //   //跳转视角
      //   destination: {
      //     x: 311837.3471863137,
      //     y: 5628280.936629815,
      //     z: 2992581.921482893,
      //   },
      //   orientation: {
      //     heading: 2.5028896264234364,
      //     pitch: -0.2201285642360813,
      //     roll: 0.0,
      //   },
      // });
      // for (var i in gaoDeBaseUrl) {
      //   sgworld.Creator.createUrlTemplateImageryProvider(
      //     gaoDeBaseUrl[i].label,
      //     gaoDeBaseUrl[i].url,
      //     '0',
      //     undefined,
      //     true,
      //     ''
      //   );
      // }
      // Viewer.scene.globe.depthTestAgainstTerrain = true;
      Viewer._enableInfoOrSelection = false;
      //显示fps
      Viewer.scene.debugShowFramesPerSecond = false;
@@ -362,29 +393,49 @@
      window.sgworld.navControl('nav', false);
      //比例尺
      window.sgworld.navControl('scale', false);
      //开启深度检测
      sgworld.Analysis.depthTestAgainstTerrain(true);
      //影像对比设置
      var base = {
        url: 'https://a.tile.openstreetmap.org/',
      };
      window.openStreetMap = sgworld.Creator.createImageryProvider(
        'OpenStreetMap',
        'OpenStreetMap',
        base,
        '0',
        undefined,
        true,
        ''
      );
      openStreetMap.item.show = false;
      //mpt加载
      var option = {
        url: window.sceneConfig.mpt.url,
        layerName: window.sceneConfig.mpt.name,
        requestVertexNormals: true,
      };
      sgworld.Creator.sfsterrainprovider('mpt', option, '', true, '');
      // var base = {
      //   url: 'https://a.tile.openstreetmap.org/',
      // };
      // window.openStreetMap = sgworld.Creator.createImageryProvider(
      //   'OpenStreetMap',
      //   'OpenStreetMap',
      //   base,
      //   '0',
      //   undefined,
      //   true,
      //   ''
      // );
      // openStreetMap.item.show = false;
      Viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
        url:demLayer
      });
      // var option = {
      //   url: window.sceneConfig.SGUrl,
      //   layerName: window.sceneConfig.mptName,
      //   requestVertexNormals: true
      // }
      // sgworld.Creator.sfsterrainprovider("", option, "", true, "");
      window.elevationTool = new SmartEarth.ElevationTool(window.sgworld);
      elevationTool.setContourColor('#F1D487');
      // var helper = new Cesium.EventHelper();
      // helper.add(Viewer.scene.globe.tileLoadProgressEvent, function (e) {
      //   if (e == 0) {
      //     console.log("这个是加载最后一个矢量切片的回调");
      //   }
      //   helper.removeAll();
      //   helper = undefined;
      // });
    },
    changeMenulayer() {
@@ -394,11 +445,13 @@
    },
    setLayerVisible() {
      if (this.isActive == true) {
        Viewer.imageryLayers.get(1).show = true;
        Viewer.imageryLayers.get(2).show = false;
        Viewer.imageryLayers._layers[1].show = true;
        Viewer.imageryLayers._layers[2].show = false;
        Viewer.imageryLayers._layers[3].show = false;
      } else {
        Viewer.imageryLayers.get(1).show = false;
        Viewer.imageryLayers.get(2).show = true;
        Viewer.imageryLayers._layers[1].show = false;
        Viewer.imageryLayers._layers[2].show = true;
        Viewer.imageryLayers._layers[3].show = true;
      }
    },
    //显示弹窗
@@ -569,29 +622,54 @@
          break;
      }
    },
    showMouseLeftClick(res) {
    async showMouseLeftClick(res) {
      if (res == 3) {
        if (this.linePath != null) {
          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])
        }
        var jsonurl =
          wnsUrl +
          '?start=' +
          this.pathFrom.lon +
          '&end=' +
          this.pathFrom.lat +
          '&propertyName=Shape&tolerance=500&request=FindPath&format=json';
        $.ajax({
          url: jsonurl,
          async: false,
          type: 'GET',
          dataType: 'json',
          contentType: 'application/json;charset=utf-8',
          success: (data) => {
            this.executeFly3D(data);
          },
        });
        const data = await comprehensive_selectRoute(startData);
        if (data.code != 200) {
          return this.$message.error('数据请求失败');
        }
        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);
        }
        )
        // var jsonurl =
        //   wnsUrl +
        //   '?start=' +
        //   this.pathFrom.lon +
        //   '&end=' +
        //   this.pathFrom.lat +
        //   '&propertyName=Shape&tolerance=500&request=FindPath&format=json';
        // $.ajax({
        //   url: jsonurl,
        //   async: false,
        //   type: 'GET',
        //   dataType: 'json',
        //   contentType: 'application/json;charset=utf-8',
        //   success: (data) => {
        //     this.executeFly3D(data);
        //   },
        // });
      } else {
        var that = this;
        if (this.handler != null) {
@@ -692,6 +770,8 @@
            sgworld.Creator.DeleteObject(this.linePath);
            this.linePath = null;
          }
          Viewer.dataSources.removeAll( )
          break;
        case 4:
          if (this.linePath != null) {
@@ -838,10 +918,12 @@
      background: #303030;
      opacity: 0.85;
      width: 100%;
      height: 6%;
      padding: 1%;
      position: absolute;
      z-index: 40;
      /deep/.el-form-item {
        margin-bottom: 0px;
      }
    }
    .menu_Popup {
      background: #303030;
@@ -903,53 +985,54 @@
// .center {
//   left: 1%;
// }
// .CenDiv {
//   position: absolute;
//   bottom: 1%;
//   height: 40px;
//   width: 60px;
//   z-index: 101;
//   display: flex;
//   flex-direction: column;
//   justify-content: space-between;
//   box-shadow: 3px 3px 6px #666;
//   border: 1px solid rgba(204, 204, 204, 0.76);
//   border-radius: 5px;
//   cursor: pointer;
// }
// .center1 {
//   right: 1%;
// }
// .right {
//   position: absolute;
//   top: 50px;
//   right: 0;
//   width: 20%;
//   height: calc(100% - 50px);
.CenDiv {
  position: absolute;
  bottom: 1%;
  left: 1%;
  height: 40px;
  width: 60px;
  z-index: 101;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-shadow: 3px 3px 6px #666;
  border: 1px solid rgba(204, 204, 204, 0.76);
  border-radius: 5px;
  cursor: pointer;
}
.center1 {
  right: 1%;
}
.right {
  position: absolute;
  top: 50px;
  right: 0;
  width: 20%;
  height: calc(100% - 50px);
//   display: flex;
//   flex-direction: column;
//   justify-content: space-between;
// }
// .CenDiv:hover {
//   border: 1px solid #409eff;
// }
// .active {
//   width: 100%;
//   height: 100%;
//   background: url('../assets/img/Layer/imgLayer2.png') no-repeat center;
//   position: absolute;
//   background-size: 100% 100%;
//   border-radius: 5px;
// }
// .menuLayer {
//   width: 100%;
//   height: 100%;
//   background: url('../assets/img/Layer/imgLayer1.png') no-repeat center;
//   position: absolute;
//   background-size: 100% 100%;
//   border-radius: 5px;
// }
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.CenDiv:hover {
  border: 1px solid #409eff;
}
.active {
  width: 100%;
  height: 100%;
  background: url("../assets/img/Layer/imgLayer2.png") no-repeat center;
  position: absolute;
  background-size: 100% 100%;
  border-radius: 5px;
}
.menuLayer {
  width: 100%;
  height: 100%;
  background: url("../assets/img/Layer/imgLayer1.png") no-repeat center;
  position: absolute;
  background-size: 100% 100%;
  border-radius: 5px;
}
// .menuSelect .el-input__inner {
//   background: rgba(255, 255, 255, 0.2) !important;