Selaa lähdekoodia

模型分层分户应用

maxiaoxiao 11 kuukautta sitten
vanhempi
commit
bb049da1d1

+ 9 - 0
src/components/Combinations/LayerManage/LayerManage.vue

@@ -384,6 +384,15 @@ export default {
           if (sceneName) {
             this.flyTo(sceneName);
           }
+          if (obj.title == "分层分户") {
+            store.setLayerList(layers[0][0])
+            layers[0][0].setQueryParameter({
+              url: "https://www.supermapol.com/realspace/services/data-HeBing8HaoLou/rest/data",
+              dataSourceName: "Model_8_old",
+              dataSetName: "属性表",
+              keyWord: "SmID",
+            });
+          }
           // for (var i = 0; i < layers.length; i++) {
           //   let style = new Cesium.Style3D();
           //   style.bottomAltitude = window.modelBottomAltitude; //底部高度

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

@@ -82,6 +82,7 @@
 import axios from "axios";
 import { GetGDlnfo, GetXzqhTree } from "../../../api/map";
 import { keys } from "lodash";
+import { handlerModel, clearTranslate } from "./modelLayering";
 let gwtype;
 export default {
   name: "clickQuery",
@@ -241,17 +242,20 @@ export default {
     handleTabClick(item, a) {
       this.activeLayerId = item.name;
     },
+    // 设置数据
+    setData() {
+      this.dataSourceLayer = new Cesium.CustomDataSource("query");
+      this.viewer.dataSources.add(this.dataSourceLayer);
+      this.activeLayerId = "0";
+      this.queryResults = {};
+      this.queryResultsGeom = {};
+    },
     /**
-     * 左键点击查询
+     * 左键点击查询图层
      */
     mapLayerQuery() {
-      this.dataSourceLayer = new Cesium.CustomDataSource("query");
-      this.viewer.dataSources.add(this.dataSourceLayer);
+      this.setData();
       let that = this;
-      that.activeLayerId = "0";
-      that.queryResults = {};
-      that.queryResultsGeom = {};
-      that.viewer.entities.removeAll();
       this.handler.setInputAction(async function (movement) {
         that.activeLayerId = "0";
         that.layerList = [];
@@ -408,6 +412,22 @@ export default {
         that.removeMapLayerQuery();
       }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
     },
+    /**
+     * 左键点击模型查询
+     */
+    mapModelQuery() {
+      this.setData();
+      let that = this;
+      this.handler.setInputAction(async function (movement) {
+        that.viewer.entities.removeAll();
+        that.dataSourceLayer.entities.removeAll();
+        handlerModel(movement);
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+      this.handler.setInputAction(async function (movement) {
+        that.removeMapLayerQuery();
+        clearTranslate();
+      }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
+    },
     /**
      * 超图
      * 根据返回的三维对象查询数据信息
@@ -511,27 +531,29 @@ export default {
       return uriArr.join("/");
     },
     //地图数据查询事件
-    changleQueryItem(item){
+    changleQueryItem(item) {
       switch (item.index) {
         case 1: {
           this.mapLayerQuery(); //图层点击事件
           break;
         }
         case 2: {
-          console.log('我是模型点击');
+          this.mapModelQuery();
           break;
         }
         case 3: {
           this.removeMapLayerQuery(); //清除
+          clearTranslate();
           break;
         }
         default:
           break;
       }
-    }
+    },
   },
   beforeDestroy() {
     this.removeMapLayerQuery();
+    clearTranslate();
   },
 };
 </script>

+ 66 - 0
src/components/Query/clickQuery/modelLayering.js

@@ -0,0 +1,66 @@
+
+var dataurl = "https://www.supermapol.com/realspace/services/data-HeBing8HaoLou/rest/data/featureResults.rjson?returnContent=true";
+var
+    idList = [],
+    totalList = [],
+    scratchNromal = new Cesium.Cartesian3();
+
+function getFeatureBySQL(bg) { //根据查询条件得到对应户型id
+    var tt = bg.split("F");
+    var httpRequest = new XMLHttpRequest();
+    //设置请求参数
+    var entry = {
+        getFeatureMode: "SQL",
+        datasetNames: ["Model_8_old:属性表"],
+        maxFeatures: 100000,
+        queryParameter: {
+            "sortClause": null,
+            "ids": null,
+            "attributeFilter": "BG=" + tt[0],
+            "groupClause": null,
+            "linkItems": null,
+            "joinItems": null,
+            "fields": null
+        }
+    };
+    httpRequest.open("POST", encodeURI(dataurl), false, "", "");
+    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+    httpRequest.send(JSON.stringify(entry));
+
+    var response = JSON.parse(httpRequest.responseText);
+    getBuildingId(response);
+};
+
+function getBuildingId(response) { //得到户型id
+    var length = response.features.length;
+    for (var i = 0; i < length; i++) {
+        idList[i] = response.features[i].ID;
+    }
+}
+
+export function handlerModel(e) {
+    idList = [];
+    let normal = scene.pickNormal(e.position);
+    var position = scene.pickPosition(e.position);
+    if (!position) {
+        position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
+    }
+    viewer.pickEvent.addEventListener(function (feature) {
+        getFeatureBySQL(feature.BG);
+        if (idList.length > 0) {
+            Array.prototype.push.apply(totalList, idList);
+            var offsetNormal = Cesium.Cartesian3.multiplyByScalar(normal, Number(20), scratchNromal); //可以更改偏移默认值
+            console.log(idList, 'idList')
+            store.state.chooseLayer.setObjsTranslate(idList, offsetNormal);
+        }
+
+    });
+}
+
+//清除偏移
+export function clearTranslate() {
+    if (store.state.chooseLayer.setObjsTranslate)
+        store.state.chooseLayer.setObjsTranslate(totalList, new Cesium.Cartesian3(0, 0, 0));
+    idList = [];
+    totalList = [];
+}

+ 4 - 0
src/store/store.js

@@ -29,6 +29,7 @@ var store2 = {
         isEditZ: false,
         vectorlayerlist: [],
         modellayerlist: [],
+        chooseLayer:[]
     },
     setisInitViewer(newValue) {
         this.state.isInitViewer = newValue;
@@ -40,6 +41,9 @@ var store2 = {
     setVectorLayerList(newValue) {
         this.state.vectorlayerlist = newValue;
     },
+    setLayerList(newValue) {//分层分户
+        this.state.chooseLayer = newValue;
+    },
     setModelLayerList(newValue) {
         this.state.modellayerlist = newValue;
     },