Selaa lähdekoodia

超图服务查询

maxiaoxiao 5 kuukautta sitten
vanhempi
commit
6faa32be0d

+ 32 - 165
src/components/Query/clickQuery/clickQuery.vue

@@ -95,7 +95,6 @@
 <script>
 import axios from "axios";
 import { GetGDlnfo, GetXzqhTree, GetHouseInfo } from "../../../api/map";
-import { Getfiledslist } from "@/api/shared.js";
 import { keys } from "lodash";
 import { handModel, handnew, clearTranslate, keyName } from "./modelLayering";
 import CockpitVector from "./CockpitVector.vue";
@@ -104,11 +103,20 @@ import {
   loadGeoJSON,
   removeGeoJSON,
   str2Unicode,
+  bbox,
 } 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";
-import { bbox } from "@/utils/MapHelper/help.js";
+import {
+  calcIserverURI,
+  getfieldList,
+  cartesianToCartographic84,
+  superQuery,
+  mapQuery,
+  cartesian3ToWGS84,
+} from "@/utils/MapHelper/clickQuery.js";
+// import { cartesian3ToWGS84 } from "@/utils/MapHelper/MapHelper.js";
 let gwtype;
 let query_click = null;
 let manager_layer_png = null;
@@ -420,6 +428,7 @@ export default {
       }
     },
     async mapSelect(pos, obj) {
+      console.log("mapSelect", "---");
       // let obj = window.tempSelect;
       let queryByIDParameters = {
         // getFeatureMode: "BUFFER",
@@ -434,16 +443,16 @@ export default {
         bufferDistance: 0.00005,
         hasGeometry: true,
       };
-      let url2 = this.calcIserverURI(obj.url);
+      let url2 = calcIserverURI(obj.url);
       let e;
-      e = await this.mapQuery(url2, queryByIDParameters);
+      e = await mapQuery(url2, queryByIDParameters);
       if (e && e.totalCount > 0) {
         this.addLayerList(obj.title, obj);
         let queryData = [];
         let geoms = [];
         let parts = [];
         // let parseJson = JSON.parse(obj.legend);
-        let parseJson = await this.getfieldList(obj.id, false);
+        let parseJson = await getfieldList(obj.id, false);
         for (let u = 0; u < e.features.length; u++) {
           let cur = [];
           var linSAr = JSON.parse(JSON.stringify(e.features[u]));
@@ -486,7 +495,7 @@ export default {
           for (let y = 0; y < e.features[u].geometry.points.length; y++) {
             let c = {};
             if (serCode == 3857) {
-              c = that.cartesianToCartographic84(
+              c = cartesianToCartographic84(
                 e.features[u].geometry.points[y].x,
                 e.features[u].geometry.points[y].y
               );
@@ -540,7 +549,7 @@ export default {
           datasetNames: [str3],
           ids: [pickedFeature.id],
         };
-        let e = await this.mapQuery(url2, queryByIDParameters);
+        let e = awaitmapQuery(url2, queryByIDParameters);
         if (e && e.totalCount > 0) {
           // that.layerList.push(store.state.vectorlayerlist[i]);
           that.layerList.push(obj);
@@ -612,7 +621,7 @@ export default {
       // let pickRay = viewer.camera.getPickRay(movement.position);
       // let artesian3 = viewer.scene.globe.pick(pickRay, viewer.scene);
       let artesian3 = viewer.scene.pickPosition(movement.position);
-      let xy = this.cartesian3ToWGS84(artesian3);
+      let xy = cartesian3ToWGS84(artesian3);
       //TODO wanger 分图层查询
       for (let i = 0; i < store.state.vectorlayerlist.length; i++) {
         let obj = store.state.vectorlayerlist[i];
@@ -624,114 +633,23 @@ export default {
           if (!obj.fwgzkj && !obj.fwmc) {
             continue;
           }
-          this.superQuery(xy, obj);
+          superQuery(xy, obj, (data) => this.superQfun(data, obj));
         }
       }
     },
-    async getfieldList(zymlBsm, resetType) {
-      this.fieldList = [];
-      let res = await Getfiledslist({ zymlBsm, resetType });
-      return res.data;
-    },
-    async superQuery(xy, obj) {
-      console.log(
-        obj.source.split(","),
-        `${obj.fwgzkj}:${obj.fwmc}`,
-        obj.source.split(",") == `${obj.fwgzkj}:${obj.fwmc}`
-      );
-      let that = this;
-      let queryByIDParameters = {
-        getFeatureMode: "BUFFER",
-        // getFeatureMode: "SPATIAL",
-        spatialQueryMode: "INTERSECT",
-        datasetNames: [`${obj.fwgzkj}:${obj.fwmc}`], //obj.source.split(","),
-        geometry: {
-          parts: [1],
-          points: [{ y: xy.lat, x: xy.lng }],
-          type: "POINT",
-        },
-        bufferDistance: 0.00005,
-        hasGeometry: true,
-      };
-      let e;
-
-      if (obj.type == "S3M") {
-        e = await that.mapQuery(
-          window.baseModelQueryLayer,
-          queryByIDParameters
-        );
-      } else {
-        e = await that.mapQuery(
-          that.calcIserverURI(obj.url),
-          queryByIDParameters
-        );
+    superQfun({ parts, queryData, geoms, e }, obj) {
+      if (!e.features[0].fieldNames) {
+        this.$message({
+          message: "查询结果为空!",
+          type: "warning",
+          customClass: "messageIndex",
+        });
       }
       if (e && e.totalCount > 0) {
         this.addLayerList(obj.title, obj);
-        let queryData = [];
-        let geoms = [];
-        let parts = [];
-        // let parseJson = JSON.parse(obj.legend);
-        let parseJson = await this.getfieldList(obj.id, false);
-        for (let u = 0; u < e.features.length; u++) {
-          let cur = [];
-          var linSAr = JSON.parse(JSON.stringify(e.features[u]));
-          function condition(ci) {
-            return ci.status != undefined && ci.status;
-          }
-          if (e.features[u].fieldNames) {
-            linSAr.fieldNames.forEach((fieldName, i) => {
-              let perjson = parseJson.filter(
-                (p) => p.filedName.toUpperCase() == fieldName
-              );
-              if (perjson.length > 0) {
-                var show = condition(perjson[0]);
-                var order = perjson[0].order || linSAr.fieldNames.length;
-                if (fieldName != perjson[0].filedNameZh)
-                  fieldName = perjson[0].filedNameZh;
-              }
-              if (show) {
-                let v = linSAr.fieldValues[i];
-                if (v != "" && !isNaN(parseFloat(v))) {
-                  v = Math.round(parseFloat(v) * 100) / 100;
-                }
-                cur.push({ name: fieldName, value: v, order });
-              }
-            });
-          } else {
-            that.$message({
-              message: "查询结果为空!",
-              type: "warning",
-              customClass: "messageIndex",
-            });
-          }
-
-          //排序
-          cur.sort((a, b) => a.order - b.order);
-          let urlNew = obj.url + ".json";
-          let resNew = await axios.get(urlNew);
-          let serCode = resNew.data.prjCoordSys.epsgCode;
-          let points = [];
-          for (let y = 0; y < e.features[u].geometry.points.length; y++) {
-            let c = {};
-            if (serCode == 3857) {
-              c = that.cartesianToCartographic84(
-                e.features[u].geometry.points[y].x,
-                e.features[u].geometry.points[y].y
-              );
-            } else {
-              c = e.features[u].geometry.points[y];
-            }
-            points.push([c.x, c.y]);
-          }
-          parts.push(e.features[u].geometry.parts);
-          geoms.push(points);
-          queryData.push(cur);
-        }
-
-        that.queryResultsGeomPart[obj.id] = parts;
-        that.queryResults[obj.id] = queryData;
-        that.queryResultsGeom[obj.id] = geoms;
+        this.queryResultsGeomPart[obj.id] = parts;
+        this.queryResults[obj.id] = queryData;
+        this.queryResultsGeom[obj.id] = geoms;
       }
       this.setactiveLayerId();
     },
@@ -899,21 +817,14 @@ export default {
         if (!dataUrl) {
           completed(null);
         } else {
-          let e = await this.mapQuery(dataUrl, queryByIDParameters);
+          let e = await mapQuery(dataUrl, queryByIDParameters);
           if (completed) {
             completed(e, Fields);
           }
         }
       }
     },
-    async mapQuery(url, queryObj) {
-      let response = await axios.post(url, queryObj);
-      if (response.data.featureCount > 0) {
-        return response.data;
-      } else {
-        return null;
-      }
-    },
+
     convertCoordinates(coordArray) {
       return coordArray.map((coord) => [coord.x, coord.y]);
     },
@@ -932,51 +843,7 @@ export default {
       removeGeoJSON("geoserver");
       viewer.dataSources.remove(dataSourceLayer);
     },
-    /**
-     * 笛卡尔坐标系转WGS84坐标系(经纬度)
-     * @author
-     * @param {object} point 点,笛卡尔坐标{x:x,y:y,z:z}
-     * @returns {object} -lat: lat, lng: lng, alt: alt
-     */
-    cartesian3ToWGS84(point) {
-      var cartesian3 = new Cesium.Cartesian3(point.x, point.y, point.z);
-      var cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
-      var lat = Cesium.Math.toDegrees(cartographic.latitude);
-      var lng = Cesium.Math.toDegrees(cartographic.longitude);
-      var alt = cartographic.height;
-      return {
-        lat: lat,
-        lng: lng,
-        alt: alt,
-      };
-    },
-    /**
-     * 墨卡托坐标系转WGS84坐标系(经纬度)
-     * @author
-     * @param number x
-     * @param number y
-     * @returns {object} x: x, y: y, z: z
-     */
-    cartesianToCartographic84(x, y) {
-      let cartesian3InMercator = new Cesium.Cartesian3(x, y, 0);
-      let mercator = new Cesium.WebMercatorProjection();
-      let p = mercator.unproject(cartesian3InMercator);
-      // 将墨卡托坐标转换为WGS84坐标
-      // let cartesian3InWGS84 =
-      //   Cesium.Ellipsoid.WGS84.cartesianToCartographic(mercator.unproject(cartesian3InMercator));
-      return {
-        x: Cesium.Math.toDegrees(p.longitude),
-        y: Cesium.Math.toDegrees(p.latitude),
-        z: p.height,
-      };
-    },
-    calcIserverURI(url) {
-      let uriArr = url.split("/");
-      uriArr[5] = uriArr[5].replace("map-", "data-");
-      uriArr[7] = "data";
-      uriArr[8] = "featureResults.rjson?returnContent=true";
-      return uriArr.join("/");
-    },
+
     remove_query_click() {
       for (var i = 0; i < 10; i++) {
         query_click.entities.values.forEach((res) => {
@@ -1078,7 +945,7 @@ export default {
               console.log(res.positions, points);
               this.getGeoserver({ points }, obj);
             } else {
-              this.mapSelect(nReaions,obj);
+              this.mapSelect(nReaions, obj);
             }
           });
         },

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

@@ -0,0 +1,164 @@
+let handler_cockpit = null;
+export const init_handler = (obj, fun) => {
+  if (handler_cockpit == null) {
+    handler_cockpit = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
+  }
+  handler_cockpit.setInputAction(async movement => {
+    let artesian3 = viewer.scene.pickPosition(movement.position);
+    let xy = cartesian3ToWGS84(artesian3);
+    // if (!obj.fwgzkj && !obj.fwmc)
+    //   continue;
+    superQuery(xy, obj, (data) => fun(data, obj));
+  }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+
+}
+
+export async function mapQuery(url, queryObj) {
+  let response = await axios.post(url, queryObj);
+  if (response.data.featureCount > 0) {
+    return response.data;
+  } else {
+    return null;
+  }
+}
+export async function superQuery(xy, obj, fun, fun1) {
+  console.log(
+    obj.source.split(","),
+    `${obj.fwgzkj}:${obj.fwmc}`,
+    obj.source.split(",") == `${obj.fwgzkj}:${obj.fwmc}`
+  );
+
+  let queryByIDParameters = {
+    getFeatureMode: "BUFFER",
+    // getFeatureMode: "SPATIAL",
+    spatialQueryMode: "INTERSECT",
+    datasetNames: [`${obj.fwgzkj}:${obj.fwmc}`], //obj.source.split(","),
+    geometry: {
+      parts: [1],
+      points: [{ y: xy.lat, x: xy.lng }],
+      type: "POINT",
+    },
+    bufferDistance: 0.00005,
+    hasGeometry: true,
+  };
+  let e;
+
+  if (obj.type == "S3M") {
+    e = await mapQuery(
+      window.baseModelQueryLayer,
+      queryByIDParameters
+    );
+  } else {
+    e = await mapQuery(calcIserverURI(obj.url), queryByIDParameters);
+  }
+  if (e && e.totalCount > 0) {
+    let queryData = [];
+    let geoms = [];
+    let parts = [];
+    // let parseJson = JSON.parse(obj.legend);
+    let parseJson = await getfieldList(obj.id, false);
+    for (let u = 0; u < e.features.length; u++) {
+      let cur = [];
+      var linSAr = JSON.parse(JSON.stringify(e.features[u]));
+      function condition(ci) {
+        return ci.status != undefined && ci.status;
+      }
+      if (e.features[u].fieldNames) {
+        linSAr.fieldNames.forEach((fieldName, i) => {
+          let perjson = parseJson.filter(
+            (p) => p.filedName.toUpperCase() == fieldName
+          );
+          if (perjson.length > 0) {
+            var show = condition(perjson[0]);
+            var order = perjson[0].order || linSAr.fieldNames.length;
+            if (fieldName != perjson[0].filedNameZh)
+              fieldName = perjson[0].filedNameZh;
+          }
+          if (show) {
+            let v = linSAr.fieldValues[i];
+            if (v != "" && !isNaN(parseFloat(v))) {
+              v = Math.round(parseFloat(v) * 100) / 100;
+            }
+            cur.push({ name: fieldName, value: v, order });
+          }
+        });
+      }
+      //排序
+      cur.sort((a, b) => a.order - b.order);
+      let urlNew = obj.url + ".json";
+      let resNew = await axios.get(urlNew);
+      let serCode = resNew.data.prjCoordSys.epsgCode;
+      let points = [];
+      for (let y = 0; y < e.features[u].geometry.points.length; y++) {
+        let c = {};
+        if (serCode == 3857) {
+          c = cartesianToCartographic84(
+            e.features[u].geometry.points[y].x,
+            e.features[u].geometry.points[y].y
+          );
+        } else {
+          c = e.features[u].geometry.points[y];
+        }
+        points.push([c.x, c.y]);
+      }
+      parts.push(e.features[u].geometry.parts);
+      geoms.push(points);
+      queryData.push(cur);
+      console.log(u, '-----', e.features.length)
+    }
+    fun({ parts, queryData, geoms, e })
+  } else {
+    fun({ e })
+  }
+
+}
+export function calcIserverURI(url) {
+  let uriArr = url.split("/");
+  uriArr[5] = uriArr[5].replace("map-", "data-");
+  uriArr[7] = "data";
+  uriArr[8] = "featureResults.rjson?returnContent=true";
+  return uriArr.join("/");
+};
+import { Getfiledslist } from "@/api/shared.js";
+export async function getfieldList(zymlBsm, resetType) {
+  let res = await Getfiledslist({ zymlBsm, resetType });
+  return res.data;
+};
+/**
+     * 墨卡托坐标系转WGS84坐标系(经纬度)
+     * @author
+     * @param number x
+     * @param number y
+     * @returns {object} x: x, y: y, z: z
+     */
+function cartesianToCartographic84(x, y) {
+  let cartesian3InMercator = new Cesium.Cartesian3(x, y, 0);
+  let mercator = new Cesium.WebMercatorProjection();
+  let p = mercator.unproject(cartesian3InMercator);
+  // 将墨卡托坐标转换为WGS84坐标
+  // let cartesian3InWGS84 =
+  //   Cesium.Ellipsoid.WGS84.cartesianToCartographic(mercator.unproject(cartesian3InMercator));
+  return {
+    x: Cesium.Math.toDegrees(p.longitude),
+    y: Cesium.Math.toDegrees(p.latitude),
+    z: p.height,
+  };
+}
+/**
+     * 笛卡尔坐标系转WGS84坐标系(经纬度)
+     * @author
+     * @param {object} point 点,笛卡尔坐标{x:x,y:y,z:z}
+     * @returns {object} -lat: lat, lng: lng, alt: alt
+     */
+export function cartesian3ToWGS84(point) {
+  var cartesian3 = new Cesium.Cartesian3(point.x, point.y, point.z);
+  var cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
+  var lat = Cesium.Math.toDegrees(cartographic.latitude);
+  var lng = Cesium.Math.toDegrees(cartographic.longitude);
+  var alt = cartographic.height;
+  return {
+    lat: lat,
+    lng: lng,
+    alt: alt,
+  };
+}

+ 19 - 2
src/views/farmlandProtection/gdzl/index.vue

@@ -176,6 +176,7 @@ import {
 } from "@/api/ghss/gdbhadd.js";
 import { legends } from "../config.js";
 import { loadGeoJSON } from "@/utils/MapHelper/help.js";
+import { init_handler } from "@/utils/MapHelper/clickQuery.js";
 export default {
   props: {
     pageType: {
@@ -271,16 +272,32 @@ export default {
       this.regionChange();
     },
     async GetDate() {
+      this.yearList = [];
       let res = {};
       if (this.$props.pageType == 0) {
         res = await GetGdDate();
       } else {
         res = await GetYjjbntDate();
       }
-      this.yearList = res.data || 0;
+      res.data.forEach((item) => {
+        this.yearList.push({
+          ...item,
+          url: item.serverurl,
+          fwgzkj: item.serverfwgzkj,
+          fwmc: item.serverfwmc,
+          source: "",
+          title: item.year,
+          id: item.serverid,
+        });
+      });
+
       this.nowyear = this.yearList.length ? this.yearList[0].year : "";
+      init_handler(this.yearList[0], this.showInfo);
       this.setImager(this.yearList[0]);
     },
+    showInfo(data, obj) {
+      this.$emit("handleView", data, obj);
+    },
     setImager(obj, isshow = true, fun) {
       console.log(obj, isshow, this.imagelayers[obj.year], viewer, "---");
 
@@ -288,7 +305,7 @@ export default {
       else if (isshow)
         this.imagelayers[obj.year] = viewer.imageryLayers.addImageryProvider(
           new Cesium.SuperMapImageryProvider({
-            url: obj.url || obj.serverurl,
+            url: obj.url,
             name: obj.year,
           })
         );

+ 13 - 12
src/views/farmlandProtection/indexNew.vue

@@ -22,6 +22,7 @@
         ref="gdzl"
         ptaye="gdbh"
         @contrast="goContrast"
+        @handleView="handleView"
       ></Gdzl>
       <Jctb v-show="activeIndex == 2" ref="jctb"></Jctb>
       <Fzyp v-show="activeIndex == 3"></Fzyp>
@@ -40,6 +41,7 @@
         </div>
       </div>
     </div> -->
+    <Details ref="detailModal"></Details>
     <Contrast
       ref="contrastModal"
       v-show="iscontrast"
@@ -57,7 +59,7 @@ import Jctb from "./jctb/index.vue";
 // import List from "./components/list.vue";
 // import preCheck from "./components/preCheck.vue";
 // import Xzgd from "./components/xzgd.vue";
-// import Details from "./components/details.vue";
+import Details from "./gdzl/details.vue";
 import Contrast from "../LandConsolidation/components/contrast.vue";
 import Fzyp from "./index.vue";
 import { legends } from "./config.js";
@@ -70,8 +72,7 @@ export default {
     // Qhdb,
     // List,
     // preCheck,
-    // Details,
-    // Details,
+    Details,
     // Organize,
     // Xzgd,
     Contrast,
@@ -105,7 +106,7 @@ export default {
   mounted() {
     this.xzqh = store.state.cockpit_region.id;
     this.regionChange();
-    this.bus.$on("handleView", this.handleView);
+    // this.bus.$on("handleView", this.handleView);
   },
   methods: {
     changeData(name, updata) {
@@ -145,14 +146,14 @@ export default {
   },
   watch: {
     // activeIndex(val) {},
-    computed_vectorData(newVal) {
-      console.log(newVal, "newVal");
-      newVal.forEach((res) => {
-        if (res.name == "id") {
-          this.handleView({ id: res.value }, ""); //this.$refs.list.getType()
-        }
-      });
-    },
+    // computed_vectorData(newVal) {
+    //   console.log(newVal, "newVal");
+    //   newVal.forEach((res) => {
+    //     if (res.name == "id") {
+    //       this.handleView({ id: res.value }, ""); //this.$refs.list.getType()
+    //     }
+    //   });
+    // },
   },
 };
 </script>