Преглед изворни кода

Merge branch 'master' of http://114.244.114.158:8802/siwei/real3d-portalsite

gushoubang пре 11 месеци
родитељ
комит
f5db9bee3a

+ 32 - 26
src/components/3DAnalysis/ClippingPlanes/index.vue

@@ -75,17 +75,16 @@
 import { moveHandler, pickPoint } from "@/utils/MapHelper/help.js";
 let pos = {};
 let box = null;
-let startClip = false;
-let boxPosition = {};
-let layers = null;
+let boxPosition = null;
+let layers = [];
 export default {
   name: "ClippingPlanes",
   props: {},
   data() {
     return {
       form: {
-        width: 100,
-        height: 100,
+        width: 5,
+        height: 5,
         heading: 0,
         pitch: 0,
         roll: 0,
@@ -99,9 +98,12 @@ export default {
 
   beforeDestroy() {},
   mounted() {
-    layers = store.state.tempLatData[0][0];
-    viewer.flyTo(layers);
-    this.addEntity();
+    if (store.state.tempLatData) {
+      layers = store.state.tempLatData[0];
+      console.log(layers, "llll");
+      viewer.flyTo(layers[0]);
+      this.addEntity();
+    }
   },
 
   methods: {
@@ -127,7 +129,7 @@ export default {
       this.analysis();
     },
     changehpr(pos) {
-      if (!box) return;
+      if (!box || !boxPosition) return;
       var hpr = new Cesium.HeadingPitchRoll(
         Cesium.Math.toRadians(this.form.heading),
         Cesium.Math.toRadians(this.form.pitch),
@@ -174,7 +176,7 @@ export default {
         position: Cesium.Cartesian3.fromDegrees(0, 0, 0),
         show: false,
         box: {
-          dimensions: new Cesium.Cartesian3(5, 5, 0.1),
+          dimensions: new Cesium.Cartesian3(5, 5, 0.001),
           fill: false,
           outline: true,
           outlineColor: Cesium.Color.RED,
@@ -185,35 +187,39 @@ export default {
       this.changehpr();
     },
     setBox() {
-      if (!box) return;
+      if (!box || !boxPosition) return;
       box.box.dimensions = new Cesium.Cartesian3(
         this.form.width,
         this.form.height,
-        0.1
+        0.001
       );
       box.position = boxPosition;
     },
 
     updateClip() {
-      console.log(layers, "llll");
       // layers.setCustomClipPlane(pos[0], pos[1], pos[2]);
-      layers.setCustomClipCross({
-        position: pos,
-        dimensions: new Cesium.Cartesian3(
-          this.form.width,
-          this.form.height,
-          this.form.extrudeDistance
-        ),
-        heading: this.form.heading,
-        pitch: this.form.pitch,
-        roll: this.form.roll,
-        extrudeDistance: this.form.extrudeDistance,
+      layers.forEach((li) => {
+        li.setCustomClipCross({
+          position: pos,
+          dimensions: new Cesium.Cartesian3(
+            this.form.width,
+            this.form.height,
+            this.form.extrudeDistance
+          ),
+          heading: this.form.heading,
+          pitch: this.form.pitch,
+          roll: this.form.roll,
+          extrudeDistance: this.form.extrudeDistance,
+        });
       });
     },
     clear() {
       if (box) box.show = false;
-      // layers.clearCustomClipBox();
-      layers.clearCustomClipBox();
+
+      layers.forEach((li) => {
+        li.clearCustomClipBox();
+      });
+
       // viewer.entities.removeAll();
     },
   },

+ 1 - 1
src/components/Combinations/LayerManage/LayerManage.scss

@@ -51,7 +51,7 @@
 .collect {
     overflow-y: auto;
     overflow-x: hidden;
-    height: 600px;
+    height: 650px;
     padding: 0px 5px 0px 5px;
 }
 

+ 94 - 75
src/components/Combinations/LayerManage/LayerManage.vue

@@ -102,6 +102,8 @@ export default {
             this.sceneLayers[obj.title][0][0].visible = visible;
           }
           break;
+        case "wms":
+        case "wmts":
         case "IMG": //影像
           this.layerparams[obj.id].show = visible;
           break;
@@ -151,23 +153,18 @@ export default {
             });
           }
           break;
+        case "wms":
+        case "wmts":
         case "IMG": //影像
-          for (let i = 0; i < imageryLayers._layers.length; i++) {
-            let element = imageryLayers._layers[i];
-            if (element._imageryProvider._name == obj.title) {
-              element.alpha = value;
-              break;
-            }
-          }
-          break;
         case "Vector": //矢量
-          for (let i = 0; i < imageryLayers._layers.length; i++) {
-            let element = imageryLayers._layers[i];
-            if (element._imageryProvider._name == obj.title) {
-              element.alpha = value;
-              break;
-            }
-          }
+          this.layerparams[obj.id].alpha = value;
+          // for (let i = 0; i < imageryLayers._layers.length; i++) {
+          //   let element = imageryLayers._layers[i];
+          //   if (element._imageryProvider._name == obj.title) {
+          //     element.alpha = value;
+          //     break;
+          //   }
+          // }
           break;
         case "Terrain": //地形
           break;
@@ -212,11 +209,11 @@ export default {
     addWMS(obj) {
       let layer = viewer.imageryLayers.addImageryProvider(
         new Cesium.WebMapServiceImageryProvider({
-          url: obj.url, // "http://192.168.60.52:28085/geoserver/wms",
-          layers: "demo:yzq_czkfbj", //"demo:Ahtq_czkfbj",
+          url: obj.url,
+          layers: `${obj.fwgzkj}:${obj.fwmc}`, //"demo:Ahtq_czkfbj",
           parameters: {
-            service: "WMS",
-            format: "image/png",
+            service: obj.type, //"WMS",
+            format: obj.format,
             transparent: true,
             // srs: "EPSG:4326", // 坐标参考系统,可以根据需要更改
           },
@@ -228,12 +225,13 @@ export default {
       return viewer.imageryLayers.addImageryProvider(
         new Cesium.WebMapTileServiceImageryProvider({
           url: obj.url, //'http://192.168.60.52:28085/geoserver/gwc/service/wmts';
-          layer: "demo:czkfbj", // 替换为你的WMTS图层名称
+          layer: `${obj.fwgzkj}:${obj.fwmc}`, //"demo:yzq_czkfbj"
           style: "", // 替换为你的WMTS图层风格
-          tileMatrixSetID: "WebMercatorQuadx2", // 或者其他的EPSG代码
-          format: "image/png",
+          tileMatrixSetID: obj.qpfa, // 或者其他的EPSG代码
+          format: obj.format,
           tilingScheme: new Cesium.WebMercatorTilingScheme(), // 当想要加载EPSG:4326瓦片服务时,只需要创建一个GeographicTilingScheme对象即可
-          maximumLevel: 18, // 根据实际情况设置最大级别
+          maximumLevel: obj.maximumlevel,
+          minimumlevel: obj.minimumlevel,
         })
       );
     },
@@ -337,12 +335,21 @@ export default {
       if (obj.checked) {
         obj.trans = 100;
         obj.visible = true;
-        this.addlayerdata.unshift(obj);//将最新添加的对象放到第一位
-        if (obj.title == "测试WMS") {
-          this.layerparams[obj.id] = this.addWMS(obj);
-          store.setlayerparamsList(this.layerparams);
-        } else if (obj.title == "测试WMTS") {
-          this.addWMTS(obj);
+        this.addlayerdata.unshift(obj); //将最新添加的对象放到第一位
+        if (obj.serverType == "geoserver") {
+          switch (obj.type) {
+            case "wms":
+              this.vectorlayerlist.push(obj);
+              this.layerparams[obj.id] = this.addWMS(obj);
+              store.setlayerparamsList(this.layerparams);
+              break;
+            case "wmts":
+              this.vectorlayerlist.push(obj);
+              this.layerparams[obj.id] = this.addWMTS(obj);
+              store.setlayerparamsList(this.layerparams);
+              break;
+          }
+        } else if (obj.serverType == "arcgis") {
         } else {
           switch (obj.type) {
             case "S3M": //场景
@@ -442,8 +449,12 @@ export default {
               null;
           }
         }
-        if (type == "split")
+        if (type == "split"){
           this.bus.$emit("setImagerySplit", obj, obj.checked, splitId, true);
+        }else if(type == "share"){
+          this.bus.$emit("setShareResources", obj, obj.checked, -2, true); 
+        }
+
       } else {
         if (obj.title.indexOf("雨水") > -1 || obj.title.indexOf("管线") > -1) {
           console.log(obj.checked, "obj.checked");
@@ -467,7 +478,7 @@ export default {
             break;
           }
         }
-        delete this.layerparams[obj.id];
+
         switch (obj.type) {
           case "S3M": //场景
             if (this.sceneLayers[obj.title]) {
@@ -496,23 +507,19 @@ export default {
           case "3DTiles": //tileset
             viewer.scene.primitives.remove(this.sceneLayers[obj.title]);
             break;
+          case "wms":
+          case "wmts":
           case "IMG": //影像
-            for (let i = 0; i < imageryLayers._layers.length; i++) {
-              let element = imageryLayers._layers[i];
-              if (element._imageryProvider._name == obj.title) {
-                imageryLayers.remove(element);
-                break;
-              }
-            }
-            break;
           case "Vector": //矢量
-            for (let i = 0; i < imageryLayers._layers.length; i++) {
-              let element = imageryLayers._layers[i];
-              if (element._imageryProvider._name == obj.title) {
-                imageryLayers.remove(element);
-                break;
-              }
-            }
+            imageryLayers.remove(this.layerparams[obj.id]);
+            delete this.layerparams[obj.id];
+            // for (let i = 0; i < imageryLayers._layers.length; i++) {
+            //   let element = imageryLayers._layers[i];
+            //   if (element._imageryProvider._name == obj.title) {
+            //     imageryLayers.remove(element);
+            //     break;
+            //   }
+            // }
             break;
           case "Terrain": //地形
             viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
@@ -528,36 +535,48 @@ export default {
     //图层定位
     location(obj) {
       let imageryLayers = viewer.imageryLayers;
-      switch (obj.type) {
-        case "S3M": //场景
-          if (this.sceneLayers[obj.title]) {
+      if (obj.serverType == "geoserver") {
+        switch (obj.type) {
+          case "wms":
+            console.log("11", this.layerparams[obj.id]);
+            break;
+          case "wmts":
+            console.log("11", this.layerparams[obj.id]);
+            break;
+        }
+      } else if (obj.serverType == "arcgis") {
+      } else {
+        switch (obj.type) {
+          case "S3M": //场景
+            if (this.sceneLayers[obj.title]) {
+              viewer.flyTo(this.sceneLayers[obj.title][0][0]);
+            }
+            break;
+          case "S3MDATA": //scp
             viewer.flyTo(this.sceneLayers[obj.title][0][0]);
-          }
-          break;
-        case "S3MDATA": //scp
-          viewer.flyTo(this.sceneLayers[obj.title][0][0]);
-          break;
-        case "3DTiles": //tileset
-          viewer.flyTo(this.sceneLayers[obj.title]);
-          break;
-        case "IMG": //影像
-        case "Vector": //矢量
-          viewer.flyTo(this.layerparams[obj.id]);
-          // for (let i = 0; i < imageryLayers._layers.length; i++) {
-          //   let element = imageryLayers._layers[i];
-          //   if (element._imageryProvider._name == obj.title) {
-          //     viewer.flyTo(element);
-          //     break;
-          //   }
-          // }
-          break;
-        case "Terrain": //地形
-          viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
-            {}
-          );
-          break;
-        default:
-          null;
+            break;
+          case "3DTiles": //tileset
+            viewer.flyTo(this.sceneLayers[obj.title]);
+            break;
+          case "IMG": //影像
+          case "Vector": //矢量
+            viewer.flyTo(this.layerparams[obj.id]);
+            // for (let i = 0; i < imageryLayers._layers.length; i++) {
+            //   let element = imageryLayers._layers[i];
+            //   if (element._imageryProvider._name == obj.title) {
+            //     viewer.flyTo(element);
+            //     break;
+            //   }
+            // }
+            break;
+          case "Terrain": //地形
+            viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider(
+              {}
+            );
+            break;
+          default:
+            null;
+        }
       }
     },
 

+ 101 - 34
src/components/Combinations/LayerManage/LayerManageSplit.vue

@@ -1,6 +1,6 @@
 <template>
-  <div class="sm-panel" v-show="LayerManageShow" v-drag>
-    <div class="sm-panel-header">
+  <div :class="$props.type == 'share' ? '' : 'sm-panel'" v-show="LayerManageShow" v-drag>
+    <div class="sm-panel-header" v-if="$props.type != 'share'">
       <span>{{ Resource.LayerManage }}</span>
       <span class="closeBtn" @click="toggleVisibility">&times;</span>
     </div>
@@ -8,15 +8,31 @@
       <TabPane :label="Resource.Resource" name="zyml">
         <div class="zyml" :class="$props.splitId >= 0 ? `zymlsplit` : ''">
           <div class="searchDiv">
-            <el-input :placeholder="Resource.InputPlaceholder" prefix-icon="el-icon-search" v-model="treeSearchText"
-              size="small">
+            <el-input
+              :placeholder="Resource.InputPlaceholder"
+              prefix-icon="el-icon-search"
+              v-model="treeSearchText"
+              size="small"
+            >
             </el-input>
-            <div class="eicon" :class="isshowNum ? 'eyes' : 'close_eyes'" @click="isshowNum = !isshowNum"></div>
+            <div
+              class="eicon"
+              :class="isshowNum ? 'eyes' : 'close_eyes'"
+              @click="isshowNum = !isshowNum"
+            ></div>
           </div>
           <div class="treeDiv">
-            <el-tree @check="handleCheckChange" class="filter-tree" :data="TreeDatas" show-checkbox
-              :props="defaultProps" :filter-node-method="filterNode" :default-checked-keys="checkedKeys" node-key="id"
-              ref="tree">
+            <el-tree
+              @check="handleCheckChange"
+              class="filter-tree"
+              :data="TreeDatas"
+              show-checkbox
+              :props="defaultProps"
+              :filter-node-method="filterNode"
+              :default-checked-keys="checkedKeys"
+              node-key="id"
+              ref="tree"
+            >
               <span class="custom-tree-node" slot-scope="{ node, data }">
                 <span>{{
                   !isshowNum && !data.url && node.label
@@ -24,22 +40,38 @@
                     : node.label
                 }}</span>
                 <span>
-                  <Icon :type="!data.favorite ? 'ios-star-outline' : 'ios-star'" color="green" size="18"
-                    class="ivu-icon" :title="data.favorite ? Resource.DelCollect : Resource.AddCollect
-                      " @click="favoriteHandle(data)" v-if="data.url != ''" />
+                  <Icon
+                    :type="!data.favorite ? 'ios-star-outline' : 'ios-star'"
+                    color="green"
+                    size="18"
+                    class="ivu-icon"
+                    :title="
+                      data.favorite ? Resource.DelCollect : Resource.AddCollect
+                    "
+                    @click="favoriteHandle(data)"
+                    v-if="data.url != ''"
+                  />
                 </span>
               </span>
             </el-tree>
           </div>
         </div>
       </TabPane>
-      <TabPane :label="Resource.LayerOptions" name="tckz" v-if="$props.splitId == -1">
+      <TabPane
+        :label="Resource.LayerOptions"
+        name="tckz"
+        v-if="$props.splitId == -1 || $props.type == 'share'"
+      >
         <div class="tckz">
           <List split size="large">
             <ListItem v-for="(item, index) in addlayerdata" :key="index">
               {{ item.title }}
               <div class="listBtn">
-                <i-switch v-model="item.visible" size="small" @on-change="visibleChange(item, $event)">
+                <i-switch
+                  v-model="item.visible"
+                  size="small"
+                  @on-change="visibleChange(item, $event)"
+                >
                   <template #open>
                     <span></span>
                   </template>
@@ -47,20 +79,43 @@
                     <span></span>
                   </template>
                 </i-switch>
-                <Icon type="md-arrow-round-up" color="green" size="18" class="opBtn" :title="Resource.MoveUpOneLevel"
-                  @click="raise(item)" v-if="
+                <Icon
+                  type="md-arrow-round-up"
+                  color="green"
+                  size="18"
+                  class="opBtn"
+                  :title="Resource.MoveUpOneLevel"
+                  @click="raise(item)"
+                  v-if="
                     index > 0 && (item.type == 'Vector' || item.type == 'IMG')
-                  " />
-                <Icon type="md-arrow-round-down" color="green" size="18" class="opBtn"
-                  :title="Resource.MoveDownOneLevel" @click="lower(item)" v-if="
+                  "
+                />
+                <Icon
+                  type="md-arrow-round-down"
+                  color="green"
+                  size="18"
+                  class="opBtn"
+                  :title="Resource.MoveDownOneLevel"
+                  @click="lower(item)"
+                  v-if="
                     index < addlayerdata.length - 1 &&
                     (item.type == 'Vector' || item.type == 'IMG')
-                  " />
-                <Icon type="md-locate" color="green" size="18" class="opBtn" :title="Resource.location"
-                  @click="location(item)" />
+                  "
+                />
+                <Icon
+                  type="md-locate"
+                  color="green"
+                  size="18"
+                  class="opBtn"
+                  :title="Resource.location"
+                  @click="location(item)"
+                />
               </div>
               <div class="sliderBtn" v-if="item.type != 'Terrain'">
-                <Slider v-model="item.trans" @on-change="transSliderChange(item, $event)"></Slider>
+                <Slider
+                  v-model="item.trans"
+                  @on-change="transSliderChange(item, $event)"
+                ></Slider>
               </div>
             </ListItem>
           </List>
@@ -69,11 +124,25 @@
       <TabPane :label="Resource.Favorite" name="collect">
         <div class="collect" :class="$props.splitId >= 0 ? `collectsplit` : ''">
           <List split>
-            <ListItem v-for="(item, index) in favoriteLayerList" :key="index" class="layerlist">
-              <Checkbox @on-change="checkboxChange(item, $event)" v-model="item.checked">{{ item.title }}</Checkbox>
+            <ListItem
+              v-for="(item, index) in favoriteLayerList"
+              :key="index"
+              class="layerlist"
+            >
+              <Checkbox
+                @on-change="checkboxChange(item, $event)"
+                v-model="item.checked"
+                >{{ item.title }}</Checkbox
+              >
               <div class="listBtn">
-                <Icon type="ios-star" color="green" size="18" class="opBtn" :title="Resource.DelCollect"
-                  @click="favoriteHandle(item)" />
+                <Icon
+                  type="ios-star"
+                  color="green"
+                  size="18"
+                  class="opBtn"
+                  :title="Resource.DelCollect"
+                  @click="favoriteHandle(item)"
+                />
               </div>
             </ListItem>
           </List>
@@ -157,7 +226,6 @@ export default {
     },
     favoriteHandle(data) {
       if (data.favorite) {
-        console.log(11111);
         data.favorite = false;
         for (let i = 0; i < this.favoriteLayerList.length; i++) {
           if (this.favoriteLayerList[i].id == data.id) {
@@ -165,7 +233,6 @@ export default {
           }
         }
       } else {
-        console.log(2222);
         data.favorite = true;
         this.favoriteLayerList.push(data);
       }
@@ -187,11 +254,11 @@ export default {
       obj.checked = checked;
       //将收藏中被勾选的数据在资源目录中勾选
       let arrData = [];
-        for (let i = 0; i < this.favoriteLayerList.length; i++) {
-          if (this.favoriteLayerList[i].checked) {
-            arrData.push(this.favoriteLayerList[i].id);
-          }
+      for (let i = 0; i < this.favoriteLayerList.length; i++) {
+        if (this.favoriteLayerList[i].checked) {
+          arrData.push(this.favoriteLayerList[i].id);
         }
+      }
       this.$refs.tree.setCheckedKeys(arrData);
       this.handleCheckChange(obj, checked);
     },
@@ -214,9 +281,9 @@ export default {
       if (typeof checked == "boolean") {
         obj.checked = checked;
         //添加资源目录与个人收藏来回勾选的状态判断
-      } else if(obj.checked && checked.checkedKeys.indexOf(obj.id) >= 0){
+      } else if (obj.checked && checked.checkedKeys.indexOf(obj.id) >= 0) {
         obj.checked = obj.checked;
-      }else{
+      } else {
         obj.checked = !obj.checked;
       }
       //资源目录树选中状态改变,修改个人收藏中的目录页

+ 214 - 140
src/components/Query/clickQuery/clickQuery.vue

@@ -1,14 +1,28 @@
 <template>
-  <div class="sm-panel sm-function-module-query" v-show="PoinyQueryShow && vectorShow" v-drag>
+  <div
+    class="sm-panel sm-function-module-query"
+    v-show="PoinyQueryShow && vectorShow"
+    v-drag
+  >
     <div class="sm-panel-header">
       <span>{{ Resource.PoinyQuery }}</span>
       <span class="closeBtn" @click="toggleVisibility">&times;</span>
     </div>
     <!-- <div class="sm-function-module-content-btn"> -->
     <div class="btnList">
-      <span v-for="(item, index) in actionOptions" :key="index" class="icon-span" :title="item.lable"
-        :class="item.isSelect ? 'selected-icon' : ''" @click="changleQueryItem(item)">
-        <i class="iconfont iconSize" :class="item.iconName" style="margin-top: 0px"></i>
+      <span
+        v-for="(item, index) in actionOptions"
+        :key="index"
+        class="icon-span"
+        :title="item.lable"
+        :class="item.isSelect ? 'selected-icon' : ''"
+        @click="changleQueryItem(item)"
+      >
+        <i
+          class="iconfont iconSize"
+          :class="item.iconName"
+          style="margin-top: 0px"
+        ></i>
       </span>
       <!-- <el-button type="primary" size="small" @click.stop="mapLayerQuery"
         >点击</el-button
@@ -19,28 +33,51 @@
     </div>
     <div class="sm-function-module-content-tabs">
       <el-tabs @tab-click="handleTabClick" v-model="activeLayerId">
-        <el-tab-pane :label="item.label" :name="item.id" v-for="(item, index) in layerList" :key="index"></el-tab-pane>
+        <el-tab-pane
+          :label="item.label"
+          :name="item.id"
+          v-for="(item, index) in layerList"
+          :key="index"
+        ></el-tab-pane>
       </el-tabs>
     </div>
     <div class="sm-function-module-content-table">
-      <el-collapse :value="activeNames" @change="handleCollapseChange" v-if="
-        activeLayerId &&
-        queryResults[activeLayerId] &&
-        queryResults[activeLayerId].length > 0
-      ">
-        <el-collapse-item :title="'查询结果' + (index + 1)" :name="'查询结果' + (index + 1)"
-          v-for="(item, index) in queryResults[activeLayerId]" :key="index">
+      <el-collapse
+        :value="activeNames"
+        @change="handleCollapseChange"
+        v-if="
+          activeLayerId &&
+          queryResults[activeLayerId] &&
+          queryResults[activeLayerId].length > 0
+        "
+      >
+        <el-collapse-item
+          :title="'查询结果' + (index + 1)"
+          :name="'查询结果' + (index + 1)"
+          v-for="(item, index) in queryResults[activeLayerId]"
+          :key="index"
+        >
           <template slot="title">
             查询结果{{ index + 1
-            }}<i title="定位" class="header-icon el-icon-s-promotion flyBtn2" @click.stop="flyTo(index)"></i>
+            }}<i
+              title="定位"
+              class="header-icon el-icon-s-promotion flyBtn2"
+              @click.stop="flyTo(index)"
+            ></i>
           </template>
-          <el-table :data="item" :show-header="false" border style="width: 100%" :header-cell-style="{
-            background: 'rgba(10, 25, 38, 0.6)',
-            color: '#66b1ff',
-            fontSize: '14px',
-            fontFamily: 'Microsoft YaHei',
-            fontWeight: '400',
-          }">
+          <el-table
+            :data="item"
+            :show-header="false"
+            border
+            style="width: 100%"
+            :header-cell-style="{
+              background: 'rgba(10, 25, 38, 0.6)',
+              color: '#66b1ff',
+              fontSize: '14px',
+              fontFamily: 'Microsoft YaHei',
+              fontWeight: '400',
+            }"
+          >
             <el-table-column prop="name" label="字段" width="100">
             </el-table-column>
             <el-table-column prop="value" label="值" width="208">
@@ -62,7 +99,7 @@ import { keys } from "lodash";
 import { handModel, handnew, clearTranslate, keyName } from "./modelLayering";
 import CockpitVector from "./CockpitVector.vue";
 import MultiLevelQuery from "./MultiLevelQuery.vue";
-
+import { loadGeoJSON, str2Unicode } from "@/utils/MapHelper/help.js";
 import * as pick_cockpit_vector from "./pick_cockpit_vector.js";
 import * as tdsy from "@/views/cockpit/js/tdsy";
 import * as turf from "@turf/turf";
@@ -146,17 +183,18 @@ export default {
         : true;
     },
   },
-  created() { },
+  created() {},
   watch: {
     activeLayerId(val) {
       if (val && val != "0") {
         for (let i = 0; i < store.state.vectorlayerlist.length; i++) {
           let obj = store.state.vectorlayerlist[i];
           if (obj.id == val) {
-            if (obj.type == "S3M") {
-              this.addGeometrys(true);
+            if (obj.serverType == "geoserver") {
+              this.removeGeoJSON();
+              this.addGeoJson("#0000ff");
             } else {
-              this.addGeometrys();
+              this.addGeometrys(obj.type == "S3M");
             }
             break;
           }
@@ -174,6 +212,7 @@ export default {
     },
   },
   mounted() {
+    console.log(str2Unicode(`fid_城镇`));
     this.$nextTick((res) => {
       query_click = new Cesium.CustomDataSource("query_click");
       viewer.dataSources.add(query_click);
@@ -202,6 +241,7 @@ export default {
     toggleVisibility() {
       this.removeMapLayerQuery();
       this.remove_query_click();
+      this.removeGeoJSON();
       store.setToolBarAction(9);
       tdsy.remove(false);
     },
@@ -262,36 +302,19 @@ export default {
       }
     },
     flyTo(index) {
-      dataSourceLayer.entities.removeAll();
       let geoms = this.queryResultsGeom[this.activeLayerId];
-      let parts = this.queryResultsGeomPart[this.activeLayerId];
       let cur = geoms[index];
       if (cur) {
-        let part = parts[index];
-        let start = 0;
-        let end = 0;
-        for (let k = 0; k < part.length; k++) {
-          let points = [];
-          if (k > 0) {
-            start += part[k - 1];
-          }
-          end += part[k];
-          for (let j = start; j < end; j++) {
-            let cx = cur[j][0];
-            let cy = cur[j][1];
-            points.push(cx);
-            points.push(cy);
-          }
-          // let e = dataSourceLayer.entities.
-          let e = viewer.entities.add({
-            polyline: new Cesium.PolylineGraphics({
-              positions: Cesium.Cartesian3.fromDegreesArray(points),
-              width: 3,
-              material: Cesium.Color.RED.withAlpha(0.9),
-              clampToGround: true,
-            }),
-          });
-          viewer.flyTo(e);
+        if (cur.type) {
+          this.removeGeoJSON();
+          loadGeoJSON(
+            cur,
+            "#0000ff",
+            { isfly: true, fill_a: 0.001 },
+            (data) => (data.name = "geoserver")
+          );
+        } else {
+          this.flyToSuperMap(cur);
         }
       } else {
         this.$message({
@@ -300,6 +323,53 @@ export default {
         });
       }
     },
+    addGeoJson() {
+      let geoms = this.queryResultsGeom[this.activeLayerId];
+      geoms.forEach((geom) => {
+        loadGeoJSON(
+          geom,
+          "#0000ff",
+          { fill_a: 0.001 },
+          (data) => (data.name = "geoserver")
+        );
+      });
+    },
+    removeGeoJSON() {
+      viewer.entities.removeAll();
+      viewer.dataSources._dataSources.forEach((das) => {
+        if (das.name == "geoserver") viewer.dataSources.remove(das);
+      });
+    },
+    flyToSuperMap(cur) {
+      dataSourceLayer.entities.removeAll();
+      let parts = this.queryResultsGeomPart[this.activeLayerId];
+      let part = parts[index];
+      let start = 0;
+      let end = 0;
+      for (let k = 0; k < part.length; k++) {
+        let points = [];
+        if (k > 0) {
+          start += part[k - 1];
+        }
+        end += part[k];
+        for (let j = start; j < end; j++) {
+          let cx = cur[j][0];
+          let cy = cur[j][1];
+          points.push(cx);
+          points.push(cy);
+        }
+        // let e = dataSourceLayer.entities.
+        let e = viewer.entities.add({
+          polyline: new Cesium.PolylineGraphics({
+            positions: Cesium.Cartesian3.fromDegreesArray(points),
+            width: 3,
+            material: Cesium.Color.RED.withAlpha(0.9),
+            clampToGround: true,
+          }),
+        });
+        viewer.flyTo(e);
+      }
+    },
     handleTabClick(item, a) {
       this.activeLayerId = item.name;
     },
@@ -324,6 +394,7 @@ export default {
       let scene = viewer.scene;
       viewer.entities.removeAll();
       dataSourceLayer.entities.removeAll();
+      this.removeGeoJSON();
       //拾取模型
       let pickedFeature = scene.pick(movement.position);
       if (
@@ -345,70 +416,70 @@ export default {
       // "ResultNetWork@管线#1"///"ResultNetWork_Node@管线#1"
       if (eneityName.indexOf("雨水") > -1 || eneityName.indexOf("管线") > -1) {
         // for (let i = 0; i < store.state.vectorlayerlist.length; i++) {
-          // let obj = store.state.vectorlayerlist[i];
-
-          // console.log(obj.url,'url----------',obj);
-          let str1 = eneityName.match(/@(\S*)#/)[1];
-          let str2 = eneityName.match(/(\S*)@/)[1];
-          let str3 = str1 + ":" + str2;
-          // let obj = store.state.vectorlayerlist.find(i => i.title == str1);
-          let obj = store.state.vectorlayerlist.find((i) => {
-            return str1 == i.title
-          });
-          let url1 = obj.url.replace("3D-", "data-");
-          let url2 = url1.replace(
-            "realspace",
-            "data/featureResults.rjson?returnContent=true"
-          );
-          let queryByIDParameters = {
-            getFeatureMode: "ID",
-            datasetNames: [str3],
-            ids: [pickedFeature.id],
-          };
-          let e = await this.mapQuery(url2, queryByIDParameters);
-          if (e && e.totalCount > 0) {
-            // that.layerList.push(store.state.vectorlayerlist[i]);
-            that.layerList.push(obj);
-            for (let u = 0; u < e.features.length; u++) {
-              let cur = [];
-              var linSAr = JSON.parse(JSON.stringify(e.features[u]));
-              if (e.features[u].fieldNames) {
-                linSAr.fieldNames.forEach((fieldName, i) => {
-                  let v = linSAr.fieldValues[i];
-                  if (v != "" && !isNaN(parseFloat(v))) {
-                    v = Math.round(parseFloat(v) * 100) / 100;
-                  }
-
-                  // cur.push({ name: fieldName, value: v });
-                  if (
-                    fieldName.toLowerCase().indexOf("shape") < 0 &&
-                    fieldName.toLowerCase().indexOf("sm") &&
-                    v != ""
-                  ) {
-                    cur.push({ name: fieldName, value: v });
-                  }
-                });
-
-                //获取图层id的参数
-                let substring = pickedFeature.primitive._baseUri.query;
-                for (let p = 0; p < store.state.vectorlayerlist.length; p++) {
-                  if (store.state.vectorlayerlist[p].id == substring) {
-                    that.layerList.push(store.state.vectorlayerlist[p]);
-                    break;
-                  }
+        // let obj = store.state.vectorlayerlist[i];
+
+        // console.log(obj.url,'url----------',obj);
+        let str1 = eneityName.match(/@(\S*)#/)[1];
+        let str2 = eneityName.match(/(\S*)@/)[1];
+        let str3 = str1 + ":" + str2;
+        // let obj = store.state.vectorlayerlist.find(i => i.title == str1);
+        let obj = store.state.vectorlayerlist.find((i) => {
+          return str1 == i.title;
+        });
+        let url1 = obj.url.replace("3D-", "data-");
+        let url2 = url1.replace(
+          "realspace",
+          "data/featureResults.rjson?returnContent=true"
+        );
+        let queryByIDParameters = {
+          getFeatureMode: "ID",
+          datasetNames: [str3],
+          ids: [pickedFeature.id],
+        };
+        let e = await this.mapQuery(url2, queryByIDParameters);
+        if (e && e.totalCount > 0) {
+          // that.layerList.push(store.state.vectorlayerlist[i]);
+          that.layerList.push(obj);
+          for (let u = 0; u < e.features.length; u++) {
+            let cur = [];
+            var linSAr = JSON.parse(JSON.stringify(e.features[u]));
+            if (e.features[u].fieldNames) {
+              linSAr.fieldNames.forEach((fieldName, i) => {
+                let v = linSAr.fieldValues[i];
+                if (v != "" && !isNaN(parseFloat(v))) {
+                  v = Math.round(parseFloat(v) * 100) / 100;
+                }
+
+                // cur.push({ name: fieldName, value: v });
+                if (
+                  fieldName.toLowerCase().indexOf("shape") < 0 &&
+                  fieldName.toLowerCase().indexOf("sm") &&
+                  v != ""
+                ) {
+                  cur.push({ name: fieldName, value: v });
+                }
+              });
+
+              //获取图层id的参数
+              let substring = pickedFeature.primitive._baseUri.query;
+              for (let p = 0; p < store.state.vectorlayerlist.length; p++) {
+                if (store.state.vectorlayerlist[p].id == substring) {
+                  that.layerList.push(store.state.vectorlayerlist[p]);
+                  break;
                 }
-                that.queryResults[substring] = [cur];
-                that.queryResultsGeom[substring] = [];
-                that.activeLayerId = substring;
-              } else {
-                that.$message({
-                  message: "查询结果为空!",
-                  type: "warning",
-                  customClass: "messageIndex",
-                });
               }
+              that.queryResults[substring] = [cur];
+              that.queryResultsGeom[substring] = [];
+              that.activeLayerId = substring;
+            } else {
+              that.$message({
+                message: "查询结果为空!",
+                type: "warning",
+                customClass: "messageIndex",
+              });
             }
           }
+        }
         // }
       }
 
@@ -441,14 +512,14 @@ export default {
       //TODO wanger 分图层查询
       for (let i = 0; i < store.state.vectorlayerlist.length; i++) {
         let obj = store.state.vectorlayerlist[i];
-        if (!obj.source) {
-          continue;
-        }
         // 结果高亮
         this.highlightResultsPng(xy.lng, xy.lat);
-        if (obj.title == "测试WMS") {
+        if (obj.serverType == "geoserver") {
           this.getGeoserver(xy, obj);
         } else {
+          if (!obj.source) {
+            continue;
+          }
           this.superQuery(xy, obj);
         }
       }
@@ -561,37 +632,36 @@ export default {
       }
     },
     async getGeoserver(xy, obj) {
-      let url = "http://192.168.60.52:28085/geoserver/demo/wms";
+      this.queryResults[obj.id] = [];
+      this.queryResultsGeom[obj.id] = [];
+      let url = obj.url.substring(0, obj.url.indexOf("geoserver") + 9) + "/wms";
       let params = {
-        SERVICE: "WMS",
-        VERSION: "1.1.1",
-        REQUEST: "GetFeatureInfo",
-        // FORMAT: "image/png",
-        TRANSPARENT: true,
-        QUERY_LAYERS: "demo:yzq_czkfbj",
-        // STYLES: "",
-        LAYERS: "demo:yzq_czkfbj",
-        // exceptions: "application/vnd.ogc.se_inimage",
-        INFO_FORMAT: "application/json",
-        // FEATURE_COUNT: 50,
-        X: 50,
-        Y: 50,
-        SRS: "EPSG:4326",
-        WIDTH: 101,
-        HEIGHT: 101,
-        BBOX: bbox(xy, 10), // "12152284.626610054,2080930.4355590942,12153248.563804159,2081894.3727532008",
+        service: "WMS",
+        version: "1.1.1",
+        request: "GetFeatureInfo",
+        layers: `${obj.fwgzkj}:${obj.fwmc}`,
+        query_layers: `${obj.fwgzkj}:${obj.fwmc}`,
+        info_format: "application/json",
+        srs: "EPSG:4326",
+        x: 50,
+        y: 50,
+        width: 101,
+        height: 101,
+        bbox: bbox(xy, 10), // "12152284.626610054,2080930.4355590942,12153248.563804159,2081894.3727532008",
       };
       let res = await axios.get(url, { params });
       if (res.data && res.data.features.length > 0) {
         this.addLayerList(obj.title, obj);
-        that.queryResultsGeom[obj.id] = geoms;
         res.data.features.forEach((feitem) => {
           let cur = [];
-          cur.push({ name: feitem, value: feitem });
-          that.queryResults[obj.id].push(cur);
+          Object.keys(feitem.properties).forEach((key) => {
+            cur.push({ name: key, value: feitem.properties[key] });
+          });
+          this.queryResults[obj.id].push(cur);
+          this.queryResultsGeom[obj.id].push(feitem.geometry);
         });
       } else {
-        that.$message({
+        this.$message({
           message: "查询结果为空!",
           type: "warning",
           customClass: "messageIndex",
@@ -638,6 +708,7 @@ export default {
       this.layersData = [];
       viewer.entities.removeAll();
       dataSourceLayer.entities.removeAll();
+      this.removeGeoJSON();
       let title;
       if (store.state.checkedData) title = store.state.checkedData.title;
       //  超图分层分户
@@ -725,9 +796,12 @@ export default {
       this.queryResultsGeomPart = {};
       this.layerList = [];
       viewer.entities.removeAll();
-      this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
-      this.handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
+      if (this.handler.removeInputAction) {
+        this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+        this.handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);
+      }
       dataSourceLayer.entities.removeAll();
+      this.removeGeoJSON();
       viewer.dataSources.remove(dataSourceLayer);
     },
     /**

+ 87 - 0
src/components/mapView/tablePage.vue

@@ -0,0 +1,87 @@
+<template>
+  <div class="cont-table">
+    <!-- :image="nonedataImg"  -->
+    <el-empty description=" " v-if="props.table.data.length == 0" />
+    <el-table
+      :data="props.table.data"
+      v-else
+      style="width: 100%"
+      :show-overflow-tooltip="true"
+      header-row-class-name="datatable"
+      row-class-name="datarow"
+      fit
+    >
+      <el-table-column
+        v-for="(item, index) in props.cloumn"
+        :prop="item.prop"
+        :label="item.label"
+        :key="index"
+        show-overflow-tooltip
+        :width="item.width || null"
+      >
+        <template #default="scope">
+          <slot
+            v-if="item.slot"
+            :name="item.slot ? item.slot : ''"
+            v-bind="scope"
+          ></slot>
+          <span v-else>{{ scope.row[item.prop] || "-" }}</span>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="tabs-pagation" v-if="props.table.data.length">
+      <div class="font">共{{ props.table.total }}条记录</div>
+      <!-- <el-pagination class="tabone-pagination" background layout="prev, pager, next" :current-page="pageNum"
+            :pager-count="5" :page-size="5" :total="props.table.total" @current-change="changePage" /> -->
+      <el-pagination
+        :current-page="pageNum"
+        :page-size="pageSize"
+        :small="false"
+        :disabled="false"
+        :background="true"
+        layout="prev, pager, next, jumper,sizes"
+        :page-sizes="[10, 15, 20, 30, 50]"
+        :total="props.table.total"
+        @size-change="handleSizeChange"
+        @current-change="changePage"
+      />
+    </div>
+  </div>
+</template>
+  <script lang="ts" setup>
+import { ref } from "vue";
+
+const emit = defineEmits(["search"]);
+
+type Props = {
+  cloumn: any;
+  table: any;
+};
+const props = withDefaults(defineProps<Props>(), {});
+
+// 搜索
+const searchFun = () => {
+  emit("search", {
+    pageIndex: pageNum.value,
+    size: pageSize.value,
+  });
+};
+
+let pageNum = ref(1);
+let pageSize = ref(10);
+
+// 修改当前页数
+const changePage = (v: number) => {
+  pageNum.value = v;
+  searchFun();
+};
+const handleSizeChange = (v: number) => {
+  pageSize.value = v;
+  searchFun();
+};
+
+// searchFun()
+</script>
+  <style lang="scss">
+//@import url(../assets/styles/tabs.scss);
+</style>

+ 35 - 0
src/router/index.js

@@ -101,6 +101,41 @@ export const constantRoutes = [{
             import('@/views/farmlandProtection/index.vue'),
         hidden: true
     },
+    {
+        path: '/myApplication',
+        component: () =>
+            import('@/views/ResourceShare/myApplication/index.vue'),
+        hidden: true
+    },
+
+    //共享资源
+    {
+        path: '/shareResources',
+        component: () =>
+            import('@/views/shareResources/index.vue'),
+        hidden: true
+    },
+    //共享位置
+    {
+        path: '/sharedLocation',
+        component: () =>
+            import('@/views/sharedLocation/index.vue'),
+        hidden: true
+    },
+    //我的申请
+    {
+        path: '/myApplication',
+        component: () =>
+            import('@/views/myApplication/index.vue'),
+        hidden: true
+    },
+    //我的审核
+    {
+        path: '/myReview',
+        component: () =>
+            import('@/views/myReview/index.vue'),
+        hidden: true
+    },
 
 
     ]

+ 8 - 1
src/utils/MapHelper/help.js

@@ -223,4 +223,11 @@ export function bbox(latlng, zoom) {
   }
   // console.table({zoom,box,latlng,boxMin, boxMax })
   return `${boxMin.lng},${boxMin.lat},${boxMax.lng},${boxMax.lat}`
-}
+}
+
+export function str2Unicode(str) {
+  var es = [];
+  for (var i = 0; i < str.length; i++)
+    es[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-4);
+  return "\\u" + es.join("\\u");
+} 

+ 3 - 4
src/views/complianceAnalysis/components/lsjl.vue

@@ -71,7 +71,7 @@
             <span
               class="button"
               @click.stop="del(item)"
-              v-if="item.rwzt == 2 || item.rwzt == 3 || item.rwzt == 99 || type == 'gdbh'"
+              v-if="item.rwzt == 2 || item.rwzt == 3 || item.rwzt == 99"
               >删除</span
             >
           </div>
@@ -86,7 +86,7 @@ import parse from "wellknown";
 import { GetPage, Delect } from "@/api/ghss/hgxfx.js";
 import { Message, MessageBox } from "element-ui";
 import { GetXzResList, DelXzRes } from "../../../api/ghss/ghxz.js";
-import { SelectGdbhList,DeleteGdbh } from "../../../api/ghss/gdbh.js";
+import { SelectGdbhList, DeleteGdbh } from "../../../api/ghss/gdbh.js";
 let dataSources;
 export default {
   props: {
@@ -247,11 +247,10 @@ export default {
         });
       } else if (this.$props.type == "gdbh") {
         //耕保历史记录
-        SelectGdbhList().then((res) => {
+        SelectGdbhList({ ...this.pageObj }).then((res) => {
           setTimeout(() => {
             this.$emit("updateParent", "loading", false);
           }, 100);
-
           if (res.code == 200) {
             this.listdisabled = res.rows.length < 10;
             this.datalist = [...this.datalist, ...res.rows];

+ 17 - 0
src/views/myApplication/index.vue

@@ -0,0 +1,17 @@
+<template>
+  <div>
+    我是我的申请
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+};
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 17 - 0
src/views/myReview/index.vue

@@ -0,0 +1,17 @@
+<template>
+  <div>
+    我是我的审核
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+};
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 85 - 0
src/views/shareResources/index.vue

@@ -0,0 +1,85 @@
+<template>
+  <div class="ghzc">
+    <div class="innerContainer leftPane" v-drag @click.native.stop>
+      <h2 class="Pangetitle darg-div">
+        <span class="pange_text">共享资源目录</span>
+      </h2>
+      <LayerManageSplit type="share" :splitId="-2" ref="shareManage" :isshow="true" @handleCheckChange="handleCheckChange"></LayerManageSplit>
+    </div>
+  </div>
+</template>
+
+<script>
+import LayerManageSplit from "../../components/Combinations/LayerManage/LayerManageSplit.vue";
+export default {
+  components: {
+    LayerManageSplit,
+  },
+  data() {
+    return {};
+  },
+  mounted() {
+    this.bus.$on("setShareResources", this.handleCheckChange);
+  },
+  methods:{
+    handleCheckChange(obj, checked, splitId, initset) {
+      if (obj.children && obj.children.length > 0) {
+        for (let i = 0; i < obj.children.length; i++) {
+          this.handleCheckChange(obj.children[i], checked);
+        }
+      } else {
+        if (checked) {
+          store.setCheckedData(obj);
+        //   this.$set(this.toolTitle, splitId, obj.title);
+          // this.toolTitle[splitId] = obj.title;
+        }
+        console.log(obj.title, obj.type, splitId, "q");
+        // if (obj.checked) {
+        let sceneLayer;
+        switch (obj.type) {
+          case "S3M": //场景
+            if (store.state.sceneLayerlist[obj.title])
+              sceneLayer = store.state.sceneLayerlist[obj.title][0][0];
+            // viewer.scene.layers.find(obj.title)
+            break;
+          case "S3MDATA": //scp
+          case "3DTiles": //tileset
+            sceneLayer = store.state.sceneLayerlist[obj.title];
+            //viewer.scene.layers.find(obj.title)
+            break;
+          case "IMG": //影像
+          case "Vector": //矢量
+            // sceneLayer = this.layerparams[obj.id];
+            let slist = viewer.imageryLayers._layers.filter(
+              (element) => element._imageryProvider._name == obj.title
+            );
+            console.log(slist, "slist");
+            sceneLayer = slist.length > 0 ? slist[0] : null;
+            break;
+          case "Terrain": //地形
+            // sceneLayer = viewer.terrainProvider;
+            console.log(viewer.terrainProvider, viewer.scene.terrainProvider);
+            break;
+          default:
+            null;
+        }
+        if (sceneLayer) {
+          if (initset) {
+            //初始时隐藏其他分屏
+            for (let i = 0; i < this.checkedKeys.length; i++) {
+              if (splitId != i) sceneLayer.setVisibleInViewport(i, false);
+            }
+          }
+          sceneLayer.setVisibleInViewport(splitId, obj.checked);
+          // sceneLayer.setVisibleInViewport(1, obj.checked);
+        } else {
+          this.bus.$emit("checkedChange", obj, "split", splitId);
+        }
+      }
+    },
+  }
+};
+</script>
+
+<style lang="less" scoped>
+</style>

+ 17 - 0
src/views/sharedLocation/index.vue

@@ -0,0 +1,17 @@
+<template>
+  <div>
+    我是共享位置
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+};
+</script>
+
+<style lang="less" scoped>
+
+</style>