Forráskód Böngészése

超图子图层条件筛选显示

maxiaoxiao 7 hónapja
szülő
commit
3fecad6be2

+ 6 - 77
src/components/Query/clickQuery/clickQuery.vue

@@ -115,6 +115,8 @@ import {
   superQuery,
   mapQuery,
   cartesian3ToWGS84,
+  addGeomParts,
+  addGeom,
 } from "@/utils/MapHelper/clickQuery.js";
 // import { cartesian3ToWGS84 } from "@/utils/MapHelper/MapHelper.js";
 let gwtype;
@@ -269,56 +271,7 @@ export default {
       dataSourceLayer.entities.removeAll();
       let geoms = this.queryResultsGeom[this.activeLayerId];
       let parts = this.queryResultsGeomPart[this.activeLayerId];
-      for (let i = 0; i < geoms.length; i++) {
-        let cur = geoms[i];
-        let part = parts[i];
-        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);
-          }
-          if (fill) {
-            viewer.entities.add({
-              polyline: new Cesium.PolylineGraphics({
-                positions: Cesium.Cartesian3.fromDegreesArray(points),
-                width: 3,
-                material: Cesium.Color.BLUE.withAlpha(0.9),
-                clampToGround: true,
-              }),
-              polygon: {
-                //高程
-                hierarchy: new Cesium.PolygonHierarchy(
-                  Cesium.Cartesian3.fromDegreesArray(points)
-                ),
-                classificationType: Cesium.ClassificationType.BOTH,
-                clampToGround: false,
-                material: Cesium.Color.RED.withAlpha(0.3),
-                // material: videoElement,
-                // perPositionHeight: true
-              },
-            });
-          } else {
-            viewer.entities.add({
-              polyline: new Cesium.PolylineGraphics({
-                positions: Cesium.Cartesian3.fromDegreesArray(points),
-                width: 3,
-                material: Cesium.Color.BLUE.withAlpha(0.9),
-                clampToGround: true,
-              }),
-            });
-          }
-        }
-        // viewer.flyTo(viewer.entities);
-      }
+      addGeomParts(fill, geoms, parts);
     },
     flyTo(index) {
       let geoms = this.queryResultsGeom[this.activeLayerId];
@@ -333,7 +286,7 @@ export default {
             (data) => (data.name = "geoserver")
           );
         } else {
-          this.flyToSuperMap(cur);
+          this.flyToSuperMap(cur, index);
         }
       } else {
         this.$message({
@@ -359,35 +312,11 @@ export default {
       //   if (das.name == "geoserver") viewer.dataSources.remove(das);
       // });
     },
-    flyToSuperMap(cur) {
+    flyToSuperMap(cur, index) {
       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);
-      }
+      addGeom(cur, part, false, true);
     },
     handleTabClick(item, a) {
       this.activeLayerId = item.name;

+ 61 - 0
src/utils/MapHelper/clickQuery.js

@@ -161,4 +161,65 @@ export function cartesian3ToWGS84(point) {
     lng: lng,
     alt: alt,
   };
+}
+
+export function addGeomParts(fill, geoms, parts) {
+  // viewer.entities.removeAll();
+  // dataSourceLayer.entities.removeAll();
+  // let geoms = this.queryResultsGeom[this.activeLayerId];
+  // let parts = this.queryResultsGeomPart[this.activeLayerId];
+  for (let i = 0; i < geoms.length; i++) {
+    let cur = geoms[i];
+    let part = parts[i];
+    addGeom(cur, part, fill)
+  }
+}
+export function addGeom(cur, part, fill = false, isfly) {
+  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
+    if (fill) {
+      viewer.entities.add({
+        polyline: new Cesium.PolylineGraphics({
+          positions: Cesium.Cartesian3.fromDegreesArray(points),
+          width: 3,
+          material: Cesium.Color.BLUE.withAlpha(0.9),
+          clampToGround: true,
+        }),
+        polygon: {
+          //高程
+          hierarchy: new Cesium.PolygonHierarchy(
+            Cesium.Cartesian3.fromDegreesArray(points)
+          ),
+          classificationType: Cesium.ClassificationType.BOTH,
+          clampToGround: false,
+          material: Cesium.Color.RED.withAlpha(0.3),
+          // material: videoElement,
+          // perPositionHeight: true
+        },
+      });
+    } else {
+      e = viewer.entities.add({
+        polyline: new Cesium.PolylineGraphics({
+          positions: Cesium.Cartesian3.fromDegreesArray(points),
+          width: 3,
+          material: Cesium.Color[isfly ? 'RED' : 'BLUE'].withAlpha(0.9),
+          clampToGround: true,
+        }),
+      });
+    }
+  }
+  isfly && e && viewer.flyTo(e);
 }

+ 27 - 0
src/utils/MapHelper/help.js

@@ -129,6 +129,33 @@ export function removeGeoJSON(name) {
     if (das.name == name) viewer.dataSources.remove(das);
   }
 }
+export async function Getlayers(mapurl, fun) {
+  let url = `${mapurl}/layers.json`;
+  let res = await axios.get(url);
+  let layers = res.data[0].subLayers.layers;
+  fun(layers)
+}
+export function addImagery(obj) {
+  let supProvider = new Cesium.SuperMapImageryProvider({
+    url: obj.url,
+    name: obj.year,
+    layersID: obj.lid || undefined,
+  });
+  let layer = viewer.imageryLayers.addImageryProvider(supProvider);
+  return { supProvider, layer }
+
+}
+export async function SetParameters(layerName, filter, provider, fun) {
+  var params_gh = {
+    layerName,
+    isVisible: true,
+    displayFilter: filter // `xmmc = '${item["项目名称"]}'`,
+  };
+  provider.setLayerStatusParameters([params_gh]).then((res) => {
+    if (res) fun(res);
+  });
+
+}
 export function addPonit() {
   // manager_multi_level_query.entities.add({
   //   name: "manager_multi_level_query",

+ 2 - 2
src/views/cockpit/common/VectorSpace/BoxCommonVector.vue

@@ -153,7 +153,7 @@ export default {
         store.state.vectorlayerlist.push(this.layersData);
       }
     },
-    async Getlayers(mapurl) {
+    async Getlayers(mapurl,item) {
       let url = `${mapurl}/layers.json`;
       let res = await axios.get(url);
       let layers = res.data[0].subLayers.layers;
@@ -184,7 +184,7 @@ export default {
           this.goLayer(item.geom, did_v);
         }
       } else {
-        this.Getlayers(this.layersData.url);
+        this.Getlayers(this.layersData.url,item);
       }
     },
     goLayer(geom, lid) {

+ 92 - 0
src/views/farmlandProtection/gdzl/details.vue

@@ -0,0 +1,92 @@
+<template>
+  <div class="conViews">
+    <div class="sm-panel sm-function-module-query" v-drag v-if="isShallow">
+      <div class="sm-panel-header">
+        <span> 详细信息 </span>
+        <i class="el-icon-close" @click="closeInster"></i>
+      </div>
+      <el-tabs type="border-card" class="xz_box" v-model="activeTabs" stretch>
+        <el-tab-pane label="基本信息" name="jbxx">
+          <Info :data="jbxxData"></Info>
+        </el-tab-pane>
+        <el-tab-pane label="无人机查询信息" name="wrjxx">
+          <Wrjxx></Wrjxx>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+  </div>
+</template>
+  <script>
+import Info from "../../Idleland/components/info.vue";
+import Wrjxx from "./wrjxx.vue";
+import { getXm } from "@/api/stxf/tdzz.js";
+import { addGeomParts } from "@/utils/MapHelper/clickQuery.js";
+export default {
+  props: {
+    interObj: {
+      type: Object,
+    },
+  },
+  components: { Info, Wrjxx },
+  data() {
+    return {
+      activeTabs: "jbxx",
+      isShallow: false,
+      jbxxData: [],
+      rdData: [],
+      type: "",
+    };
+  },
+  mounted() {
+    // this.init();
+  },
+  methods: {
+    //关闭详情
+    closeInster() {
+      this.isShallow = false;
+    },
+    handleView({ parts, queryData, geoms, e }, type) {
+      this.type = type;
+      this.activeTabs = "jbxx";
+      this.jbxxData = [];
+      if (!e.features[0].fieldNames) {
+        this.$message({
+          message: "查询结果为空!",
+          type: "warning",
+          customClass: "messageIndex",
+        });
+      } else if (e && e.totalCount > 0) {
+        this.isShallow = true;
+        this.jbxxData = queryData[0];
+        viewer.entities.removeAll();
+        addGeomParts(false, geoms, parts);
+      }
+    },
+  },
+  mounted() {},
+  watch: {},
+};
+</script>
+  
+  <style lang="scss" scoped>
+.sm-panel {
+  width: 400px;
+  max-width: 400px;
+  /deep/ .el-icon-close:before {
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    font-size: larger;
+    font-weight: bold;
+
+    &:hover {
+      color: aqua;
+    }
+  }
+}
+
+.sm-function-module-query {
+  max-height: 800px !important;
+  top: 28px !important;
+}
+</style>

+ 67 - 17
src/views/farmlandProtection/gdzl/index.vue

@@ -175,7 +175,12 @@ import {
   GetYjjbntQxfl,
 } from "@/api/ghss/gdbhadd.js";
 import { legends } from "../config.js";
-import { loadGeoJSON } from "@/utils/MapHelper/help.js";
+import {
+  loadGeoJSON,
+  Getlayers,
+  addImagery,
+  SetParameters,
+} from "@/utils/MapHelper/help.js";
 import { init_handler } from "@/utils/MapHelper/clickQuery.js";
 export default {
   props: {
@@ -240,6 +245,8 @@ export default {
       },
       cityList: [],
       imagelayers: {},
+      provider: null,
+      layers: [],
     };
   },
   components: {
@@ -270,6 +277,22 @@ export default {
     dlbmChange() {
       this.gtype = this.typeList.find((x) => x.id == this.dlbm).label;
       this.regionChange();
+      // serverfwmc
+      console.log(this.provider);
+      if (this.layers.length) {
+        this.sourcesshow(false);
+        SetParameters(
+          this.layers[0].name,
+          `dlbm like '${this.dlbm}%'`,
+          // `dlbm = ${this.dlbm}`,
+          this.provider,
+          (lid) => {
+            let yobj = this.yearList.find((y) => y.year == this.nowyear);
+            console.log(yobj, this.yearList, this.nowyear, "obj");
+            if (yobj) this.setImager({ ...yobj, lid });
+          }
+        );
+      }
     },
     async GetDate() {
       this.yearList = [];
@@ -293,25 +316,46 @@ export default {
 
       this.nowyear = this.yearList.length ? this.yearList[0].year : "";
       init_handler(this.yearList[0], this.showInfo);
-      this.setImager(this.yearList[0]);
+      store.setaddNode([
+        { id: "gdbb", url: this.yearList[0].url, label: "耕地保护" },
+      ]);
+      this.setImager(this.yearList[0], true, (layer) => {
+        Getlayers(this.yearList[0].url, (layers) => {
+          this.layers = layers;
+          // SetParameters(
+          //   layers,
+          //   `dlbm like '${this.dlbm}%'`,
+          //   this.provider,
+          //   (lid) => {
+          //     this.setImager({ ...this.yearList[0], lid });
+          //   }
+          // );
+        });
+      });
     },
     showInfo(data, obj) {
-      this.$emit("handleView", data, obj);
+      let legends = store.state.addlegend;
+      if (legends && legends.length && legends[0].id == "gdbb") {
+        this.$emit("handleView", data, obj);
+      }
     },
     setImager(obj, isshow = true, fun) {
-      console.log(obj, isshow, this.imagelayers[obj.year], viewer, "---");
-
-      if (this.imagelayers[obj.year]) this.imagelayers[obj.year].show = isshow;
-      else if (isshow)
-        this.imagelayers[obj.year] = viewer.imageryLayers.addImageryProvider(
-          new Cesium.SuperMapImageryProvider({
-            url: obj.url,
-            name: obj.year,
-          })
-        );
-      if (obj.top) viewer.imageryLayers.raiseToTop(this.imagelayers[obj.year]);
-      fun && fun(this.imagelayers[obj.year]);
-      viewer.flyTo(this.imagelayers[obj.year]);
+      let lkey = obj.year + (obj.lid || "");
+      console.log(lkey, isshow, this.imagelayers[lkey], "---");
+      if (this.imagelayers[lkey]) this.imagelayers[lkey].show = isshow;
+      else if (isshow) {
+        let superProvider = new Cesium.SuperMapImageryProvider({
+          url: obj.url,
+          name: obj.year,
+          layersID: obj.lid || undefined,
+        });
+        if (!obj.lid) this.provider = superProvider;
+        this.imagelayers[lkey] =
+          viewer.imageryLayers.addImageryProvider(superProvider);
+      }
+      if (obj.top) viewer.imageryLayers.raiseToTop(this.imagelayers[lkey]);
+      fun && fun(this.imagelayers[lkey]);
+      viewer.flyTo(this.imagelayers[lkey]);
     },
     async regionChange(region) {
       // this.region = region;
@@ -414,7 +458,7 @@ export default {
     },
     reset() {
       this.$nextTick(() => {
-        this.setImager({ year: this.nowyear }, false);
+        this.sourcesshow(false);
       });
     },
     setEchart(data, id) {
@@ -428,6 +472,12 @@ export default {
       console.log(newValue, "---");
     },
   },
+  beforeDestroy() {
+    store.setaddNode([]);
+    this.yearList.forEach((yi) => {
+      viewer.imageryLayers.remove(this.imagelayers[yi.year]);
+    });
+  },
 };
 </script>