Bläddra i källkod

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

gushoubang 1 år sedan
förälder
incheckning
77a890b72f
37 ändrade filer med 2653 tillägg och 2546 borttagningar
  1. 1 0
      package.json
  2. 10 0
      src/api/zt/ztApi.js
  3. 3 0
      src/common/scss/globe.scss
  4. 160 0
      src/components/3DAnalysis/ClippingPlanes/index.vue
  5. 4 4
      src/components/Combinations/LayerManage/LayerManage.vue
  6. 21 5
      src/components/Combinations/LayerManage/LayerManageSplit.vue
  7. 27 17
      src/components/Combinations/analysisCombination/analysisCombination.vue
  8. 793 746
      src/components/Query/clickQuery/MultiLevelQuery.vue
  9. 186 164
      src/components/Query/clickQuery/clickQuery.vue
  10. 81 82
      src/components/TerrainAnalysis/TerrainCutFillAnalysis/TerrainCutFillAnalysisNew.vue
  11. 3 3
      src/components/echartsTemplate/pie.vue
  12. 9 36
      src/components/mapView/range.vue
  13. 16 162
      src/components/sceneAtttribute/basicOptions/basicOptions.vue
  14. 22 0
      src/utils/MapHelper/MapHelper.js
  15. 104 27
      src/utils/MapHelper/help.js
  16. 0 0
      src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.js
  17. 96 71
      src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.vue
  18. 44 16
      src/views/ConstructionApplication3D/Demolition/CQSetInfo.vue
  19. 379 402
      src/views/ConstructionApplication3D/Demolition/DemolitionList.vue
  20. 16 14
      src/views/ConstructionApplication3D/Demolition/ZDSetInfo.vue
  21. 77 46
      src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue
  22. 13 10
      src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue
  23. 169 6
      src/views/ConstructionApplication3D/billboard/addBillboardPoject.vue
  24. 87 74
      src/views/ConstructionApplication3D/billboard/billboardDesign.vue
  25. 1 48
      src/views/ConstructionApplication3D/billboard/billboarddetail.vue
  26. 30 12
      src/views/ConstructionApplication3D/projectInfo/addProjectInfo.vue
  27. 6 8
      src/views/ConstructionApplication3D/projectManagement/projectManagement.vue
  28. 17 155
      src/views/ConstructionApplication3D/skylineAnalysis/TJXResult.vue
  29. 167 38
      src/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue
  30. 0 0
      src/views/ConstructionApplication3D/skylineAnalysis/skylineExecute.js
  31. 4 2
      src/views/ConstructionApplication3D/zt.scss
  32. 43 12
      src/views/aiModel/index.vue
  33. 5 7
      src/views/cockpit/common/VectorSpace/BoxCommonVector.vue
  34. 24 19
      src/views/farmlandProtection/components/fxjg.vue
  35. 3 4
      src/views/farmlandProtection/index.vue
  36. 1 1
      src/views/modelStretch/index.vue
  37. 31 355
      static/Config/config.js

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
         "vue": "^2.7.16",
         "vue-layer": "^1.2.5",
         "vue-lazyload": "^1.3.3",
+        "vue-markdown": "^2.2.4",
         "vue-template-compiler": "2.7.16",
         "wellknown": "^0.5.0"
     },

+ 10 - 0
src/api/zt/ztApi.js

@@ -7,6 +7,7 @@ import { Notification, MessageBox, Message, Loading } from "element-ui";
 import { saveAs } from "file-saver";
 import { getToken } from "@/utils/auth";
 axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
+
 // 是否显示重新登录
 export let isReloginShow = false;
 // 创建axios实例
@@ -938,6 +939,15 @@ export function addBillboardModelList(data) {
   });
 }
 
+// 批量新增广告模型信息
+export function addBillboardModelLists(data) {
+  return request({
+    url: "/model/billboardModelList/adds",
+    method: "post",
+    data: data,
+  });
+}
+
 // 修改广告模型信息
 export function updateBillboardModelList(data) {
   return request({

+ 3 - 0
src/common/scss/globe.scss

@@ -177,6 +177,9 @@ div {
         font-size: 12px;
     }
 }
+.headertwo{
+    height: 72px;
+}
 
 .sm-function-module-content {
     // margin: 0.5rem 1rem 1rem 1rem;

+ 160 - 0
src/components/3DAnalysis/ClippingPlanes/index.vue

@@ -0,0 +1,160 @@
+<template>
+  <div class="sm-function-module-content">
+    <el-form :model="form" ref="ruleForm" label-width="100px">
+      <el-form-item label="裁剪区域宽度:" prop="width">
+        <el-input
+          v-model="form.width"
+          size="mini"
+          type="number"
+          placeholder=""
+          @change="analysis"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="裁剪区域高度:" prop="height">
+        <el-input
+          v-model="form.height"
+          size="mini"
+          type="number"
+          @change="analysis"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="绕X轴旋转:" prop="pitch">
+        <el-slider
+          class="inputwidth"
+          :min="0"
+          :max="360"
+          :step="1"
+          v-model="form.pitch"
+          @input="analysis"
+        ></el-slider>
+      </el-form-item>
+      <el-form-item label="绕Y轴旋转:" prop="roll">
+        <el-slider
+          class="inputwidth"
+          :min="0"
+          :max="360"
+          :step="1"
+          v-model="form.roll"
+          @input="analysis"
+        ></el-slider>
+      </el-form-item>
+      <el-form-item label="绕Z轴旋转:" prop="heading">
+        <el-slider
+          class="inputwidth"
+          :min="0"
+          :max="360"
+          :step="1"
+          v-model="form.heading"
+          @input="analysis"
+        ></el-slider>
+      </el-form-item>
+      <el-form-item label="拉伸高度:" prop="extrudeDistance">
+        <el-slider
+          class="inputwidth"
+          :min="0.01"
+          :max="100"
+          :step="0.02"
+          v-model="form.extrudeDistance"
+          @input="analysis"
+        ></el-slider>
+      </el-form-item>
+    </el-form>
+    <div class="boxchild">
+      <el-button type="primary" size="mini" @click="clickPoint"
+        >点击选择点位</el-button
+      >
+      <el-button type="primary" size="mini" @click="clear">清除</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { pickPoint } from "@/utils/MapHelper/help.js";
+let pos = {};
+export default {
+  name: "ClippingPlanes",
+  props: {},
+  data() {
+    return {
+      form: {
+        width: 100,
+        height: 100,
+        heading: 0,
+        pitch: 0,
+        roll: 0,
+        // 裁剪区域中心点拉伸距离,单位:米,
+        extrudeDistance: 0.01,
+        isMoving: false,
+      },
+    };
+  },
+  computed: {},
+
+  beforeDestroy() {},
+  mounted() {
+    viewer.flyTo(store.state.tempLatData[0][0]);
+  },
+
+  methods: {
+    clickPoint() {
+      pickPoint((lon, lat, hei) => {
+        pos = { lon, lat, hei };
+        this.form.extrudeDistance = 100 - hei;
+        this.analysis();
+      });
+    },
+
+    analysis() {
+      if (!pos.lon) return;
+      // this.vectorlayerlist.push(obj);
+      // store.state.sceneLayerlist[obj.title];
+      // this.layerparams.forEach(laitem => {
+      // this.addEntity();
+      this.updateClip(store.state.tempLatData[0][0]);
+    },
+    addEntity() {
+      viewer.entities.removeAll();
+      let js = 0.0000095;
+      // 计算矩形的边界坐标;
+      var minX = pos.lon - (this.form.width / 2) * js;
+      var maxX = pos.lon + (this.form.width / 2) * js;
+      var minY = pos.lat - (this.form.height / 2) * js;
+      var maxY = pos.lat + (this.form.height / 2) * js;
+      // 创建一个长方形实体
+      viewer.entities.add({
+        rectangle: {
+          coordinates: Cesium.Rectangle.fromDegrees(minX, minY, maxX, maxY),
+          material: new Cesium.Color.BLUE.withAlpha(0.5),
+          outline: true,
+          outlineColor: Cesium.Color.BLACK,
+          height: this.form.extrudeDistance,
+        },
+      });
+    },
+
+    updateClip(layers) {
+      // layers.setCustomClipPlane(pos[0], pos[1], pos[2]);
+      layers.setCustomClipCross({
+        position: Cesium.Cartesian3.fromDegrees(pos.lon, pos.lat, 100),
+        dimensions: new Cesium.Cartesian2(this.form.width, this.form.height),
+        heading: this.form.heading,
+        pitch: this.form.pitch,
+        roll: this.form.roll,
+        extrudeDistance: this.form.extrudeDistance,
+      });
+    },
+    clear() {
+      // layers.clearCustomClipBox();
+      store.state.tempLatData[0][0].clearCustomClipBox();
+      viewer.entities.removeAll();
+    },
+  },
+  watch: {},
+};
+</script>
+
+<style lang="scss" scoped>
+.inputwidth {
+  width: calc(100% - 10px);
+}
+</style>

+ 4 - 4
src/components/Combinations/LayerManage/LayerManage.vue

@@ -198,7 +198,7 @@ export default {
       this.sceneLayers[obj.title] = tileset;
       store.setSceneLayersList(this.sceneLayers);
       let thisLayer = viewer.scene.primitives.add(tileset);
-      viewer.flyTo(thisLayer);
+      // viewer.flyTo(thisLayer);
     },
 
     addImage(LayerURL) {
@@ -227,8 +227,8 @@ export default {
     addWMTS(obj) {
       return viewer.imageryLayers.addImageryProvider(
         new Cesium.WebMapTileServiceImageryProvider({
-          url: obj.url, //"http://192.168.60.52:28085/geoserver/gwc/service/wmts";
-          layer: "demo:dltbgroup", // 替换为你的WMTS图层名称
+          url: obj.url, //'http://192.168.60.52:28085/geoserver/gwc/service/wmts';
+          layer: "demo:czkfbj", // 替换为你的WMTS图层名称
           style: "", // 替换为你的WMTS图层风格
           tileMatrixSetID: "WebMercatorQuadx2", // 或者其他的EPSG代码
           format: "image/png",
@@ -337,7 +337,7 @@ export default {
       if (obj.checked) {
         obj.trans = 100;
         obj.visible = true;
-        this.addlayerdata.push(obj);
+        this.addlayerdata.unshift(obj);//将最新添加的对象放到第一位
         if (obj.title == "测试WMS") {
           this.layerparams[obj.id] = this.addWMS(obj);
           store.setlayerparamsList(this.layerparams);

+ 21 - 5
src/components/Combinations/LayerManage/LayerManageSplit.vue

@@ -70,9 +70,7 @@
         <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)">{{
-                item.title
-              }}</Checkbox>
+              <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)" />
@@ -159,6 +157,7 @@ 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) {
@@ -166,6 +165,7 @@ export default {
           }
         }
       } else {
+        console.log(2222);
         data.favorite = true;
         this.favoriteLayerList.push(data);
       }
@@ -185,6 +185,14 @@ export default {
     },
     checkboxChange(obj, checked, a) {
       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);
+          }
+        }
+      this.$refs.tree.setCheckedKeys(arrData);
       this.handleCheckChange(obj, checked);
     },
     visibleChange(obj, visible, a) {
@@ -203,12 +211,20 @@ export default {
     // 复选框改变
     handleCheckChange(obj, checked) {
       this.getCheckedNodes();
-      console.log(obj, checked);
       if (typeof checked == "boolean") {
         obj.checked = checked;
-      } else {
+        //添加资源目录与个人收藏来回勾选的状态判断
+      } else if(obj.checked && checked.checkedKeys.indexOf(obj.id) >= 0){
+        obj.checked = obj.checked;
+      }else{
         obj.checked = !obj.checked;
       }
+      //资源目录树选中状态改变,修改个人收藏中的目录页
+      this.favoriteLayerList.forEach((item) => {
+        if (item.id == obj.id) {
+          item.checked = obj.checked;
+        }
+      });
       this.$emit("handleCheckChange", obj, checked, this.$props.splitId);
     },
     setDisabledIfChildrenExist(node) {

+ 27 - 17
src/components/Combinations/analysisCombination/analysisCombination.vue

@@ -1,13 +1,16 @@
 <template>
   <div id="3DAnalysis" class="sm-panel" v-show="analysisShow" v-drag>
     <div class="sm-content">
-      <div class="sm-panel-header">
-        <span :class="{titleColor:sightlineShow}" class="title-txt" @click="choose(0)">{{Resource.sightline}}</span>
-        <span :class="{titleColor:viewshedShow}" class="title-txt" @click="choose(1)">{{Resource.viewShed}}</span>
-        <span :class="{titleColor:shadowqueryShow}" class="title-txt" @click="choose(2)">{{Resource.shadowAnalysis}}</span>
-        <span :class="{titleColor:profileShow}" class="title-txt" @click="choose(3)">{{Resource.profile}}</span>
-        <span :class="{titleColor:skylineShow}" class="title-txt" @click="choose(4)">{{Resource.skyline}}</span>
-        <span :class="{titleColor:smashingShow}" class="title-txt" @click="choose(5)">{{Resource.smashing}}</span>
+      <div class="sm-panel-header headertwo">
+        <span :class="{ titleColor: sightlineShow }" class="title-txt" @click="choose(0)">{{ Resource.sightline
+          }}</span>
+        <span :class="{ titleColor: viewshedShow }" class="title-txt" @click="choose(1)">{{ Resource.viewShed }}</span>
+        <span :class="{ titleColor: shadowqueryShow }" class="title-txt" @click="choose(2)">{{ Resource.shadowAnalysis
+          }}</span>
+        <span :class="{ titleColor: profileShow }" class="title-txt" @click="choose(3)">{{ Resource.profile }}</span>
+        <span :class="{ titleColor: skylineShow }" class="title-txt" @click="choose(4)">{{ Resource.skyline }}</span>
+        <span :class="{ titleColor: smashingShow }" class="title-txt" @click="choose(5)">{{ Resource.smashing }}</span>
+        <span :class="{ titleColor: clipPlaneShow }" class="title-txt" @click="choose(6)">模型剖切</span>
         <span class="closeBtn" @click="toggleVisibility">&times;</span>
       </div>
       <!-- 调用子组件 -->
@@ -17,19 +20,22 @@
       <sm3d-profile></sm3d-profile>
       <sm3d-skyline></sm3d-skyline>
       <sm3d-smashing></sm3d-smashing>
+      <ClippingPlanes v-if="clipPlaneShow"></ClippingPlanes>
     </div>
   </div>
 </template>
 
 <script>
+import ClippingPlanes from "../../3DAnalysis/ClippingPlanes/index.vue";
 export default {
   name: "Sm3dAnalysis",
+  components: { ClippingPlanes },
   props: {},
   data() {
     return {
       sharedState: store.state,
       spatialAnalysisUrl:
-       'http://www.supermapol.com/realspace/services/spatialAnalysis-data_all/restjsr/spatialanalyst/geometry/3d/viewshedbody.json',
+        "http://www.supermapol.com/realspace/services/spatialAnalysis-data_all/restjsr/spatialanalyst/geometry/3d/viewshedbody.json",
     };
   },
 
@@ -52,10 +58,12 @@ export default {
     smashingShow: function () {
       return this.sharedState.analysis[5];
     },
+    clipPlaneShow: function () {
+      return this.sharedState.analysis[6];
+    },
     analysisShow: function () {
       return this.sharedState.toolBar[6];
     },
-
   },
 
   methods: {
@@ -73,25 +81,27 @@ export default {
       }
       switch (i) {
         case 0:
-          store.setAnalysisAction([1, 0, 0, 0, 0]);
+          store.setAnalysisAction([1, 0, 0, 0, 0, 0]);
           break;
         case 1:
-          store.setAnalysisAction([0, 1, 0, 0, 0, 0]);
+          store.setAnalysisAction([0, 1, 0, 0, 0, 0, 0]);
           break;
         case 2:
-          store.setAnalysisAction([0, 0, 1, 0, 0, 0]);
+          store.setAnalysisAction([0, 0, 1, 0, 0, 0, 0]);
           break;
         case 3:
-          store.setAnalysisAction([0, 0, 0, 1, 0, 0]);
+          store.setAnalysisAction([0, 0, 0, 1, 0, 0, 0]);
           break;
-          case 5:
-          store.setAnalysisAction([0, 0, 0, 0, 0, 1]);
+        case 5:
+          store.setAnalysisAction([0, 0, 0, 0, 0, 1, 0]);
+          break;
+        case 6:
+          store.setAnalysisAction([0, 0, 0, 0, 0, 0, 1]);
           break;
         default:
-          store.setAnalysisAction([0, 0, 0, 0, 1, 0 ]);
+          store.setAnalysisAction([0, 0, 0, 0, 1, 0]);
       }
     },
   },
 };
 </script>
-

+ 793 - 746
src/components/Query/clickQuery/MultiLevelQuery.vue

@@ -1,885 +1,932 @@
 <template>
-    <el-tabs class="multi_level_query_table" v-if="store.state.query_pick_pane.length > 0" @tab-click="handleClick"
-        @tab-remove="removeTab">
-
-
-        <el-tab-pane :label="store.state.query_pick_last_pane.name" name="second">
-            <el-table :header-cell-style="{
+  <el-tabs
+    class="multi_level_query_table"
+    v-if="store.state.query_pick_pane.length > 0"
+    @tab-click="handleClick"
+    @tab-remove="removeTab"
+    v-model="activeName"
+  >
+    <!-- <el-tab-pane :closable="item.close" :label="item.name" :name="item.name" -->
+    <el-tab-pane
+      :label="item.name"
+      :name="item.name"
+      v-for="(item, index) in store.state.query_pick_pane"
+      :key="index"
+      v-if="item.show"
+    >
+      <div v-if="item.name == '规划地块'">
+        <el-table
+          :header-cell-style="{
+            background: 'rgba(10, 25, 38, 0.6)',
+            color: '#66b1ff',
+            fontSize: '14px',
+            fontFamily: 'Microsoft YaHei',
+            fontWeight: '400',
+          }"
+          :data="item.filteredData"
+          style="width: 100%"
+        >
+          <el-table-column
+            show-overflow-tooltip="true"
+            prop="filedZH"
+            label="属性"
+            width="140"
+            v-if="filedZH != '空间信息'"
+          >
+          </el-table-column>
+          <el-table-column
+            show-overflow-tooltip="true"
+            prop="data"
+            label="属性值"
+          >
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <div v-else-if="item.name != '权属'">
+        <pie
+          class="echart"
+          unit="平方米"
+          :ref="`echartRef`"
+          @echartClick="echartClick"
+        ></pie>
+
+        <el-table
+          :data="tableData"
+          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
+            show-overflow-tooltip="true"
+            width="150"
+            v-for="header in headers"
+            :key="header"
+            :label="header"
+            :prop="header"
+            v-if="header != '空间信息'"
+          >
+          </el-table-column>
+        </el-table>
+      </div>
+      <div v-else>
+        <el-tabs
+          @tab-click="handleClickQwnership"
+          v-model="activeNameQwnership"
+        >
+          <pie class="echart" unit="平方米" :ref="`qwnership_pie`"></pie>
+
+          <el-tab-pane
+            v-for="(item, index) in qwnershipTabs"
+            :key="index"
+            :label="item.dataname"
+            :name="item.dataname"
+          >
+            <el-table
+              :data="tableData_qwnership"
+              style="width: 100%"
+              :header-cell-style="{
                 background: 'rgba(10, 25, 38, 0.6)',
                 color: '#66b1ff',
                 fontSize: '14px',
                 fontFamily: 'Microsoft YaHei',
                 fontWeight: '400',
-            }" :data="store.state.query_pick_last_pane.value" style="width: 100%">
-                <el-table-column show-overflow-tooltip="true" prop="filedZH" label="属性" width="140"
-                    v-if="filedZH != '空间信息'">
-                </el-table-column>
-                <el-table-column show-overflow-tooltip="true" prop="data" label="属性值">
-                </el-table-column>
+              }"
+            >
+              <el-table-column
+                show-overflow-tooltip="true"
+                width="150"
+                v-for="header in headers_qwnership"
+                :key="header"
+                :label="header"
+                :prop="header"
+                v-if="header != '空间信息'"
+              >
+              </el-table-column>
             </el-table>
-        </el-tab-pane>
-
-        <!-- <el-tab-pane :closable="item.close" :label="item.name" :name="item.name" -->
-        <el-tab-pane :label="item.name" :name="item.name" v-for="(item, index) in store.state.query_pick_pane" :key="index"
-            v-if="item.show">
-
-            <div v-if="item.name != '权属'">
-                <pie class="echart" unit="平方米" :ref="`echartRef`" @echartClick="echartClick"></pie>
-
-                <el-table :data="tableData" 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 show-overflow-tooltip="true" width="150" v-for="header in headers" :key="header"
-                        :label="header" :prop="header" v-if="header != '空间信息'">
-                    </el-table-column>
-                </el-table>
-            </div>
-            <div v-else>
-                <el-tabs @tab-click="handleClickQwnership">
-                    <pie class="echart" unit="平方米" :ref="`qwnership_pie`"></pie>
-
-                    <el-tab-pane v-for="(item, index) in qwnershipTabs" :key="index" :label="item.dataname"
-                        :name="item.dataname">
-                        <el-table :data="tableData_qwnership" 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 show-overflow-tooltip="true" width="150" v-for="header in headers_qwnership"
-                                :key="header" :label="header" :prop="header" v-if="header != '空间信息'">
-                            </el-table-column>
-                        </el-table>
-
-
-                    </el-tab-pane>
-                </el-tabs>
-            </div>
-
-        </el-tab-pane>
-
-        <el-tab-pane label="自定义" name="自定义">
-            <!-- <el-input clearable v-model="state" @input="change_witch" class="search" placeholder="请输入内容"></el-input> -->
-            <el-checkbox-group v-model="check_list_active">
-                <el-checkbox v-model="item.ckeck" :label="item.label" v-for="(item, index) in check_list"
-                    :key="index"></el-checkbox>
-
-            </el-checkbox-group>
-            <div style="margin-bottom: 20px;">
-                <el-button size="small" @click="addTab()">
-                    添加
-                </el-button>
-            </div>
-        </el-tab-pane>
-    </el-tabs>
+          </el-tab-pane>
+        </el-tabs>
+      </div>
+    </el-tab-pane>
+
+    <el-tab-pane label="自定义" name="自定义">
+      <!-- <el-input clearable v-model="state" @input="change_witch" class="search" placeholder="请输入内容"></el-input> -->
+      <el-checkbox-group v-model="check_list_active">
+        <el-checkbox
+          v-model="item.ckeck"
+          :label="item.label"
+          v-for="(item, index) in check_list"
+          :key="index"
+        ></el-checkbox>
+      </el-checkbox-group>
+      <div style="margin-bottom: 20px">
+        <el-button size="small" @click="addTab()"> 添加 </el-button>
+      </div>
+    </el-tab-pane>
+  </el-tabs>
 </template>
 
 <script>
 //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
-import { GetTabsData, GetTabsPane } from '@/api/cockpitNew'
+import { GetTabsData, GetTabsPane } from "@/api/cockpitNew";
 import * as wellknown from "wellknown";
 import * as turf from "@turf/turf";
 import pie from "@/components/echartsTemplate/pieNew.vue";
-
+import { loadGeoJSON, colors } from "@/utils/MapHelper/help.js";
 let manager_multi_level_query = null;
 let pick_entity = null;
 
-let manager_multi_level_vector = null;
 let query_click_by_iserver = null;
 
 export default {
-    components: { pie },
-    data() {
-        return {
-            activeName: 'second',
-            activeNameQwnership: 'Qwnership',
-            handler_multi_level_query: null,
-            manager_multi_level_query: null,
-            manager_multi_level_vector: null,
-            pick_entity: null,
-            pick_entity_geo: null,
-            eclickname: '',
-            echartList: {},
-            tabIndex: 2,
-            state: '',
-            activecheckList: [],
-            // check_list: [{ label: '三调', ckeck: true }, { label: '权属', ckeck: true }, { label: '农用' }, { label: '上映' }],
-            check_list_active: [],
-            check_list: [],
-            active_tabs_table: [],
-            rawData: [],
-            headers: [], // 用于存储所有可能的 filedZH 值 
-            qwnershipTabs: [],
-            rawData_qwnership: [],
-            headers_qwnership: [],
-        };
+  components: { pie },
+  data() {
+    return {
+      activeName: "second",
+      activeNameQwnership: "Qwnership",
+      handler_multi_level_query: null,
+      manager_multi_level_query: null,
+      pick_entity: null,
+      pick_entity_geo: null,
+      eclickname: "",
+      echartList: {},
+      tabIndex: 2,
+      state: "",
+      activecheckList: [],
+      // check_list: [{ label: '三调', ckeck: true }, { label: '权属', ckeck: true }, { label: '农用' }, { label: '上映' }],
+      check_list_active: [],
+      check_list: [],
+      active_tabs_table: [],
+      rawData: [],
+      headers: [], // 用于存储所有可能的 filedZH 值
+      qwnershipTabs: [],
+      rawData_qwnership: [],
+      headers_qwnership: [],
+    };
+  },
+  //监听属性 类似于data概念
+  computed: {
+    tableData() {
+      // 首次加载时确定所有可能的 filedZH 值
+      // if (!this.headers.length) {
+      this.headers = [];
+      this.rawData.forEach((item) => {
+        item.forEach((field) => {
+          if (!this.headers.includes(field.filedZH)) {
+            this.headers.push(field.filedZH);
+          }
+        });
+      });
+      // }
+
+      // 转换 rawData 为适合 el-table 使用的格式
+      return this.rawData.map((item) => {
+        // 创建一个包含所有 headers 字段的对象
+        const row = {};
+        this.headers.forEach((header) => {
+          // 查找当前数据项中对应 filedZH 的 data 值
+          const field = item.find((f) => f.filedZH === header);
+          row[header] = field ? field.data : ""; // 如果没有找到,则使用空字符串
+        });
+        return row;
+      });
     },
-    //监听属性 类似于data概念
-    computed: {
-        tableData() {
-            // 首次加载时确定所有可能的 filedZH 值  
-            // if (!this.headers.length) {
-            this.headers = [];
-            this.rawData.forEach(item => {
-                item.forEach(field => {
-                    if (!this.headers.includes(field.filedZH)) {
-                        this.headers.push(field.filedZH);
-                    }
-                });
-            });
-            // }
-
-            // 转换 rawData 为适合 el-table 使用的格式  
-            return this.rawData.map(item => {
-                // 创建一个包含所有 headers 字段的对象  
-                const row = {};
-                this.headers.forEach(header => {
-                    // 查找当前数据项中对应 filedZH 的 data 值  
-                    const field = item.find(f => f.filedZH === header);
-                    row[header] = field ? field.data : ''; // 如果没有找到,则使用空字符串  
-                });
-                return row;
-            });
-        },
-        tableData_qwnership() {
-            // 首次加载时确定所有可能的 filedZH 值  
-            // if (!this.headers.length) {
-            this.headers_qwnership = [];
-            this.rawData_qwnership.forEach(item => {
-                item.forEach(field => {
-                    if (!this.headers_qwnership.includes(field.filedZH)) {
-                        this.headers_qwnership.push(field.filedZH);
-                    }
-                });
-            });
-            // }
-
-            // 转换 rawData 为适合 el-table 使用的格式  
-            return this.rawData_qwnership.map(item => {
-                // 创建一个包含所有 headers 字段的对象  
-                const row = {};
-                this.headers_qwnership.forEach(header => {
-                    // 查找当前数据项中对应 filedZH 的 data 值  
-                    const field = item.find(f => f.filedZH === header);
-                    row[header] = field ? field.data : ''; // 如果没有找到,则使用空字符串  
-                });
-                return row;
-            });
-        },
+    tableData_qwnership() {
+      // 首次加载时确定所有可能的 filedZH 值
+      // if (!this.headers.length) {
+      this.headers_qwnership = [];
+      this.rawData_qwnership.forEach((item) => {
+        item.forEach((field) => {
+          if (!this.headers_qwnership.includes(field.filedZH)) {
+            this.headers_qwnership.push(field.filedZH);
+          }
+        });
+      });
+      // }
+
+      // 转换 rawData 为适合 el-table 使用的格式
+      return this.rawData_qwnership.map((item) => {
+        // 创建一个包含所有 headers 字段的对象
+        const row = {};
+        this.headers_qwnership.forEach((header) => {
+          // 查找当前数据项中对应 filedZH 的 data 值
+          const field = item.find((f) => f.filedZH === header);
+          row[header] = field ? field.data : ""; // 如果没有找到,则使用空字符串
+        });
+        return row;
+      });
     },
-    //监控data中的数据变化
-    watch: {},
-    //方法集合
-    methods: {
-        change_witch() {
-
-        },
-        removeTab(targetName) {
-            // let tabs = store.state.query_pick_pane;
-            // let activeName = this.activeName;
-            // if (activeName === targetName) {
-            //     tabs.forEach((tab, index) => {
-            //         if (tab.name === targetName) {
-            //             let nextTab = tabs[index + 1] || tabs[index - 1];
-            //             if (nextTab) {
-            //                 activeName = nextTab.name;
-            //             }
-            //         }
-            //     });
-            // }
-
-            // this.activeName = activeName;
-            // store.state.query_pick_pane = tabs.filter(tab => tab.name !== targetName);
-        },
-        addTab() {
-            // let newTabName = ++this.tabIndex + '';
-            // store.state.query_pick_pane.push({
-
-            //     name: newTabName,
-            //     value: [1, 2, 3, 4],// element.data
-            //     close: 'closable'
-
-            // });
-            // this.activeName = newTabName;
-
-
-            // this.activecheckList.forEach((res) => {
-
-            //     store.state.query_pick_pane.push({
-
-            //         name: res,
-            //         value: [1, 2, 3, 4],// element.data
-            //         close: 'closable'
-
-            //     });
-
-            //     this.activeName = res;
-
-            // })
-
-            // store.state.query_pick_pane
-            console.log(this.check_list_active, "this.check_list_active");
-            console.log('store.state.query_pick_pane: ', store.state.query_pick_pane);
-            // this.check_list_active.forEach((res) => {
-            //     store.state.query_pick_pane.forEach((item) => {
-
-            //         if (item.name == res) {
-            //             console.log('item.name == res: ', item.name, res);
-            //             item.show = true;
-            //         } else {
-            //             item.show = false;
+  },
+  //监控data中的数据变化
+  watch: {},
+  //方法集合
+  methods: {
+    change_witch() {},
+    removeTab(targetName) {
+      // let tabs = store.state.query_pick_pane;
+      // let activeName = this.activeName;
+      // if (activeName === targetName) {
+      //     tabs.forEach((tab, index) => {
+      //         if (tab.name === targetName) {
+      //             let nextTab = tabs[index + 1] || tabs[index - 1];
+      //             if (nextTab) {
+      //                 activeName = nextTab.name;
+      //             }
+      //         }
+      //     });
+      // }
+      // this.activeName = activeName;
+      // store.state.query_pick_pane = tabs.filter(tab => tab.name !== targetName);
+    },
+    addTab() {
+      // let newTabName = ++this.tabIndex + '';
+      // store.state.query_pick_pane.push({
 
-            //         }
-            //     })
-            // })
+      //     name: newTabName,
+      //     value: [1, 2, 3, 4],// element.data
+      //     close: 'closable'
 
-            this.updateShowProperties(this.check_list_active, store.state.query_pick_pane)
-        },
+      // });
+      // this.activeName = newTabName;
 
-        go(e) {
-            const that = this;
-            e.forEach(element => {
-                if (element.filed == "geom") {
-                    this.gogeojson(element.data)
-                }
-            });
-        },
-        gogeojson(data) {
-            let geojson = wellknown.parse(data);
-
-            const twoDArray = geojson.coordinates[0];
-            const oneDArray = twoDArray.reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
-            this.pick_entity_geo = oneDArray;
-
-            pick_entity.entities.add({
-                polygon: {
-                    // 获取指定属性(positions,holes(图形内需要挖空的区域))
-                    hierarchy: {
-                        positions: Cesium.Cartesian3.fromDegreesArray(oneDArray),
-                    },
-                    // 边框
-                    outline: true,
-                    // 边框颜色
-                    outlineColor: Cesium.Color.RED,
-                    // 边框尺寸
-                    outlineWidth: 2,
-                    // 填充的颜色,withAlpha透明度
-                    material: Cesium.Color.GREEN.withAlpha(0),
-                    // 是否被提供的材质填充
-                    fill: true,
-                    // 恒定高度
-                    height: 1.1,
-                    // 显示在距相机的距离处的属性,多少区间内是可以显示的
-                    // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1000, 10000000),
-                    // 是否显示
-                    show: true,
-                    // 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。
-                    zIndex: 10
-                }
-            });
+      // this.activecheckList.forEach((res) => {
 
-            let flag = true;
-            let time = setInterval(() => {
-                flag = !flag
-                this.switch_show(flag);
-            }, 500);
-            setTimeout(() => {
-                clearInterval(time);
-                pick_entity.entities.values.forEach((res) => {
+      //     store.state.query_pick_pane.push({
 
-                    pick_entity.entities.remove(res);
+      //         name: res,
+      //         value: [1, 2, 3, 4],// element.data
+      //         close: 'closable'
 
-                })
-            }, 6000)
+      //     });
 
+      //     this.activeName = res;
 
-            // 注意:polygon首尾坐标要一致
-            var polygon = turf.polygon([geojson.coordinates[0]]);
+      // })
 
-            var centroid = turf.centroid(polygon).geometry.coordinates;
+      // store.state.query_pick_pane
+      console.log(this.check_list_active, "this.check_list_active");
+      console.log("store.state.query_pick_pane: ", store.state.query_pick_pane);
+      // this.check_list_active.forEach((res) => {
+      //     store.state.query_pick_pane.forEach((item) => {
 
-            viewer.camera.flyTo({
-                duration: 1,
+      //         if (item.name == res) {
+      //             console.log('item.name == res: ', item.name, res);
+      //             item.show = true;
+      //         } else {
+      //             item.show = false;
 
-                destination: Cesium.Cartesian3.fromDegrees(centroid[0], centroid[1], 3000),
-                // destination: {
-                //     x: -6283267.004204832,
-                //     y: 28123682.896774407,
-                //     z: 23709669.98539126
-                // },
-                orientation: {
-                    heading: 6.149339593573709,
-                    pitch: -1.539825618847483,
-                    roll: 0
-                },
-            });
-        },
-        reset() {
-
-            for (let index = 0; index < 10; index++) {
-                var len = viewer.dataSources.length;
-                if (len > 0) {
-                    for (var n = 0; n < len; n++) {
-
-                        if (viewer.dataSources.get(n) != undefined && viewer.dataSources.get(n).name != undefined && viewer.dataSources.get(n).name === 'MultiLevelQuery_echart') {
-                            viewer.dataSources.remove(viewer.dataSources.get(n));
-                        }
-                    }
-                }
-            }
+      //         }
+      //     })
+      // })
 
-        },
-        addPolygon(geom, id, colors, fillreset) {
-            let geojson = wellknown.parse(geom);
-            let _this = this;
-            // viewer.entities.removeAll();
-            let scolor = colors
-                ? Cesium.Color.fromCssColorString(colors)
-                : Cesium.Color.RED;
-            let fcolor =
-                colors && !fillreset
-                    ? Cesium.Color.fromCssColorString(colors)
-                    : Cesium.Color.WHITE;
-
-            let polygon = Cesium.GeoJsonDataSource.load(geojson, {
-                clampToGround: true,
-                stroke: scolor,
-                fill: fcolor.withAlpha(0.3), //注意:颜色必须大写,即不能为blue
-                strokeWidth: 5,
-            });
-            polygon.then(function (dataSource) {
-                // dataSource.id = id;
-                // 将数据源添加到Cesium Viewer
-                dataSource.name = 'MultiLevelQuery_echart'
-                viewer.dataSources.add(dataSource);
-                viewer.zoomTo(dataSource);
-                dataSourceList_gh[id] = dataSource;
-                if (id == "all") _this.isshowAll = true;
+      this.updateShowProperties(
+        this.check_list_active,
+        store.state.query_pick_pane
+      );
+    },
 
-            });
+    go(e) {
+      const that = this;
+      e.forEach((element) => {
+        if (element.filed == "geom") {
+          this.gogeojson(element.data);
+        }
+      });
+    },
+    gogeojson(data) {
+      let geojson = wellknown.parse(data);
+
+      const twoDArray = geojson.coordinates[0];
+      const oneDArray = twoDArray.reduce(
+        (accumulator, currentValue) => accumulator.concat(currentValue),
+        []
+      );
+      this.pick_entity_geo = oneDArray;
+
+      pick_entity.entities.add({
+        polygon: {
+          // 获取指定属性(positions,holes(图形内需要挖空的区域))
+          hierarchy: {
+            positions: Cesium.Cartesian3.fromDegreesArray(oneDArray),
+          },
+          // 边框
+          outline: true,
+          // 边框颜色
+          outlineColor: Cesium.Color.RED,
+          // 边框尺寸
+          outlineWidth: 2,
+          // 填充的颜色,withAlpha透明度
+          material: Cesium.Color.GREEN.withAlpha(0),
+          // 是否被提供的材质填充
+          fill: true,
+          // 恒定高度
+          height: 1.1,
+          // 显示在距相机的距离处的属性,多少区间内是可以显示的
+          // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1000, 10000000),
+          // 是否显示
+          show: true,
+          // 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。
+          zIndex: 10,
         },
-        echartClick(name, { iseyes }) {
-            this.reset();
-
-            this.tableData.forEach((res) => {
-                const keys = Object.keys(res);
-                for (const key of keys) {
-                    let value = res[key];
-                    if (value == name) {
-                        console.log('name: ', name);
-                        console.log('value ', value);
-
-                        this.addPolygon(res.空间信息.split(";")[1], "all", "#ff0000", true);
-                    }
-                }
-
-            })
-
-
+      });
+
+      let flag = true;
+      let time = setInterval(() => {
+        flag = !flag;
+        this.switch_show(flag);
+      }, 500);
+      setTimeout(() => {
+        clearInterval(time);
+        pick_entity.entities.values.forEach((res) => {
+          pick_entity.entities.remove(res);
+        });
+      }, 6000);
+
+      // 注意:polygon首尾坐标要一致
+      var polygon = turf.polygon([geojson.coordinates[0]]);
+
+      var centroid = turf.centroid(polygon).geometry.coordinates;
+
+      viewer.camera.flyTo({
+        duration: 1,
+
+        destination: Cesium.Cartesian3.fromDegrees(
+          centroid[0],
+          centroid[1],
+          3000
+        ),
+        // destination: {
+        //     x: -6283267.004204832,
+        //     y: 28123682.896774407,
+        //     z: 23709669.98539126
+        // },
+        orientation: {
+          heading: 6.149339593573709,
+          pitch: -1.539825618847483,
+          roll: 0,
         },
-        clear_data() {
-            const that = this;
-            store.state.query_pick_last_pane = null;
-            store.state.query_pick_pane = [];
-            this.tableData = [];
-            this.tableData_qwnership = [];
-
-            this.remove_query_click_by_iserver();
-
-            // 图标
-            var entities = manager_multi_level_query.entities.values;
-            for (var i = entities.length - 1; i >= 0; i--) {
-                manager_multi_level_query.entities.remove(entities[i]);
+      });
+    },
+    reset() {
+      for (let index = 0; index < 10; index++) {
+        var len = viewer.dataSources.length;
+        if (len > 0) {
+          for (var n = 0; n < len; n++) {
+            if (
+              viewer.dataSources.get(n) != undefined &&
+              viewer.dataSources.get(n).name != undefined &&
+              viewer.dataSources.get(n).name === "MultiLevelQuery_echart"
+            ) {
+              viewer.dataSources.remove(viewer.dataSources.get(n));
             }
+          }
+        }
+      }
+    },
+    echartClick(name, { iseyes }) {
+      this.reset();
+
+      this.tableData.forEach((res) => {
+        const keys = Object.keys(res);
+        for (const key of keys) {
+          let value = res[key];
+          if (value == name) {
+            console.log("name: ", name);
+            console.log("value ", value);
+            loadGeoJSON(
+              res.空间信息.split(";")[1],
+              "#ff0000",
+              { isfly: true, fill: "#ffffff" },
+              (data) => {
+                data.name = "MultiLevelQuery_echart";
+                dataSourceList_gh[id] = data;
+              }
+            );
+          }
+        }
+      });
+    },
+    clear_data() {
+      const that = this;
+      store.state.query_pick_pane = [];
+      this.tableData = [];
+      this.tableData_qwnership = [];
 
-            this.reset();
+      this.remove_query_click_by_iserver();
 
-        },
-        remove_query_click_by_iserver() {
-            for (var i = 0; i < 10; i++) {
-                query_click_by_iserver.entities.values.forEach((res) => {
+      // 图标
+      var entities = manager_multi_level_query.entities.values;
+      for (var i = entities.length - 1; i >= 0; i--) {
+        manager_multi_level_query.entities.remove(entities[i]);
+      }
 
-                    query_click_by_iserver.entities.remove(res);
+      this.reset();
+    },
+    remove_query_click_by_iserver() {
+      for (var i = 0; i < 10; i++) {
+        query_click_by_iserver.entities.values.forEach((res) => {
+          query_click_by_iserver.entities.remove(res);
+        });
+      }
+    },
+    init_handler() {
+      const that = this;
+      this.check_list_active = [];
+      this.check_list = [];
+
+      that.clear_data();
+      if (that.handler_multi_level_query == null) {
+        that.handler_multi_level_query = new Cesium.ScreenSpaceEventHandler(
+          viewer.scene.canvas
+        );
+      }
+      that.handler_multi_level_query.setInputAction(async (event) => {
+        let pickObj = viewer.scene.pick(event.position);
+        var position = viewer.scene.pickPosition(event.position);
+
+        if (!position)
+          //点击到地球之外
+          return false;
+        var cartographic = Cesium.Cartographic.fromCartesian(position);
+
+        let longitude = Cesium.Math.toDegrees(cartographic.longitude);
+        let latitude = Cesium.Math.toDegrees(cartographic.latitude);
+        let height = cartographic.height;
+        let heading = viewer.scene.camera.heading;
+        let pitch = viewer.scene.camera.pitch;
+
+        if (!position) {
+          position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
+        }
+
+        const geojsonPoint = {
+          type: "Point",
+          coordinates: [longitude, latitude], // 注意经纬度顺序
+        };
 
+        const wkt = wellknown.stringify(geojsonPoint);
+        let id =
+          store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1]
+            .id;
+        let obj = {
+          defaultType: null,
+          layerId: id,
+        };
+        let data = await GetTabsData(obj);
+
+        for (let index = 0; index < data.data.length; index++) {
+          const element = data.data[index];
+          let tableId = element.tableId;
+          let pane_obj = {
+            sourcePointWkt: wkt,
+            sourceLayerId: id,
+
+            // sourcePointWkt: "POINT(109.5139541 18.3146153)",
+            // sourceLayerId: "dd699f839bc04969ae2dc2e1964d0ad1",
+
+            sourceLayerType: "0",
+            queryTableId: tableId,
+          };
+          let res = await GetTabsPane(pane_obj);
+
+          let filteredData =
+            index == 0
+              ? res.data.data[0].filter((res) => {
+                  return res.filed != "geom";
                 })
-            }
-        },
-        init_handler() {
-
-
-            const that = this;
-            this.check_list_active = [];
-            this.check_list = [];
-
-            that.clear_data();
-            if (that.handler_multi_level_query == null) {
-                that.handler_multi_level_query = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
-            }
-            that.handler_multi_level_query.setInputAction(async event => {
-                let pickObj = viewer.scene.pick(event.position);
-                var position = viewer.scene.pickPosition(event.position);
-
-                if (!position)//点击到地球之外
-                    return false;
-                var cartographic = Cesium.Cartographic.fromCartesian(position);
-
-
-                let longitude = Cesium.Math.toDegrees(cartographic.longitude);
-                let latitude = Cesium.Math.toDegrees(cartographic.latitude);
-                let height = cartographic.height;
-                let heading = viewer.scene.camera.heading;
-                let pitch = viewer.scene.camera.pitch;
-
-                if (!position) {
-                    position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
-                }
-
-
-                const geojsonPoint = {
-                    "type": "Point",
-                    "coordinates": [longitude, latitude] // 注意经纬度顺序  
-                };
-
-                const wkt = wellknown.stringify(geojsonPoint);
-                let id = store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1].id
-                let obj = {
-                    defaultType: null,
-                    layerId: id
-                }
-                let data = await GetTabsData(obj);
-
-                for (let index = 0; index < data.data.length; index++) {
-                    const element = data.data[index];
-                    let tableId = element.tableId;
-                    let pane_obj = {
-                        sourcePointWkt: wkt,
-                        sourceLayerId: id,
-
-                        // sourcePointWkt: "POINT(109.5139541 18.3146153)",
-                        // sourceLayerId: "dd699f839bc04969ae2dc2e1964d0ad1",
-
-                        sourceLayerType: '0',
-                        queryTableId: tableId,
-
-                    }
-                    if (index == 0) {
-                        let res = await GetTabsPane(pane_obj);
-
-                        let filteredData = res.data.data[0].filter((res) => {
-                            return res.filed != 'geom'
-                        })
-
-                        store.state.query_pick_last_pane = {
-                            name: element.name,
-                            value: filteredData,
-                        };
+              : [];
 
-                    } else {
-                        let res = await GetTabsPane(pane_obj);
-
-                        if (element.defaultType == "0") {
-                            // store.state.query_pick_pane.push({
-                            //     name: element.name,
-                            //     value: res,
-                            //     close: 'closable',
-                            //     show: true
-                            // });
-                            this.check_list_active.push(element.name);
-                        } else {
-
-                        }
-
-                        store.state.query_pick_pane.push({
-                            name: element.name,
-                            value: res,
-                            close: 'closable',
-                            show: element.defaultType == '0' ? true : false
-                        });
-                    }
-
-                    this.check_list.push({
-                        label: element.name,
-                        ckeck: element.defaultType == '0' ? true : false
-                    });
-
-
-                }
-
-                // this.highlightResults(longitude, latitude);
-                this.highlightResultsPng(longitude, latitude);
-
-                that.handler_multi_level_query.destroy();
-                that.handler_multi_level_query = null;
-            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
-
-
-        },
-        highlightResultsPng(longitude, latitude) {
-            manager_multi_level_query.entities.add({
-                name: "manager_multi_level_query",
-                position: Cesium.Cartesian3.fromDegrees(longitude, latitude, 40),
-                billboard: {
-                    // 图像地址,URI或Canvas的属性
-                    image: "./static/images/overview/go.png",
-                    height: 34,
-                    width: 36,
-                    scale: 1.0,
-                    zIndex: 2,
-                    show: true
-                },
-
-            })
-        },
-        updateShowProperties(firstArray, secondArray) {
-            // 创建一个映射表,用于快速查找第一个数组中的元素  
-            const firstArrayMap = new Map(firstArray.map(name => [name, true]));
-
-            // 遍历第二个数组,更新show属性  
-            secondArray.forEach(obj => {
-                // 如果在第一个数组中存在对应的name,则show为true;否则为false  
-                obj.show = firstArrayMap.has(obj.name);
-            });
-
-            // 返回更新后的secondArray,虽然原始数组被直接修改  
-            return secondArray;
+          if (element.defaultType == "0") {
+            // store.state.query_pick_pane.push({
+            //     name: element.name,
+            //     value: res,
+            //     close: 'closable',
+            //     show: true
+            // });
+            this.check_list_active.push(element.name);
+          } else {
+          }
+
+          store.state.query_pick_pane.push({
+            name: element.name,
+            value: res,
+            filteredData,
+            close: "closable",
+            show: element.defaultType == "0" ? true : false,
+          });
+
+          this.check_list.push({
+            label: element.name,
+            ckeck: element.defaultType == "0" ? true : false,
+          });
+        }
+
+        // this.highlightResults(longitude, latitude);
+        this.highlightResultsPng(longitude, latitude);
+        this.activeName = store.state.query_pick_pane[0].name;
+        this.handleClick();
+        that.handler_multi_level_query.destroy();
+        that.handler_multi_level_query = null;
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+    },
+    highlightResultsPng(longitude, latitude) {
+      manager_multi_level_query.entities.add({
+        name: "manager_multi_level_query",
+        position: Cesium.Cartesian3.fromDegrees(longitude, latitude, 40),
+        billboard: {
+          // 图像地址,URI或Canvas的属性
+          image: "./static/images/overview/go.png",
+          height: 34,
+          width: 36,
+          scale: 1.0,
+          zIndex: 2,
+          show: true,
         },
-        handleClick(tab, event) {
-            let index = Number(tab.index) - 2
-
-            if (tab.name == '权属') {
-                this.qwnershipTabsFun();
-            } else {
-                store.state.query_pick_pane.forEach((res) => {
-                    if (res.name == tab.name) {
-                        let data = [];
-
-                        this.active_tabs_table = res.value.data.data;
-                        this.rawData = res.value.data.data
-                        res.value.data.datalist.forEach((res) => {
-                            data.push({
-                                name: res.groupvalue,
-                                value: res.sumvalue
-                            })
-                        })
-                        this.setEchart(data, "vertical", index);
-                    }
-                })
+      });
+    },
+    updateShowProperties(firstArray, secondArray) {
+      // 创建一个映射表,用于快速查找第一个数组中的元素
+      const firstArrayMap = new Map(firstArray.map((name) => [name, true]));
+
+      // 遍历第二个数组,更新show属性
+      secondArray.forEach((obj) => {
+        // 如果在第一个数组中存在对应的name,则show为true;否则为false
+        obj.show = firstArrayMap.has(obj.name);
+      });
+
+      // 返回更新后的secondArray,虽然原始数组被直接修改
+      return secondArray;
+    },
+    handleClick(tab, event) {
+      this.reset();
+      let tabData = store.state.query_pick_pane.find(
+        (s) => s.name === this.activeName
+      );
+
+      if (this.activeName == "权属") {
+        this.qwnershipTabsFun();
+      } else if (tabData) {
+        tabData.value.data.datalist.forEach((res, ci) => {
+          loadGeoJSON(
+            res.geomvalue,
+            "#ff0000",
+            { isfly: true, fill_a: 1, fill: colors[ci % colors.length] },
+            (data) => {
+              data.name = "MultiLevelQuery_echart";
             }
-
-
-        },
-        handleClickQwnership(tab, event) {
-            let index = 0;
-            this.qwnershipTabs.forEach((res) => {
-                if (res.dataname == tab.name) {
-                    this.rawData_qwnership = res.data
-                    let data = [];
-                    res.datalist.forEach((res) => {
-                        data.push({
-                            name: res.groupvalue,
-                            value: res.sumvalue
-                        })
-                    })
-                    this.setEchart_qwnership(data, "vertical", index);
-                    index++;
-                }
-            })
-        },
-        // 权属tabs
-        qwnershipTabsFun() {
-            store.state.query_pick_pane.forEach((res) => {
-                if (res.name == '权属') {
-                    this.qwnershipTabs = res.value.data.child;
-                    // this.activeNameQwnership = this.qwnershipTabs[0].dataname
-                }
-            })
-
-
-        },
-        setEchart_qwnership(data, type, index) {
-            this.$nextTick(() => {
-                let max = 7
-                let legend_right = "4%"
-
-                this.$refs.qwnership_pie[index].setOptions({ data, type, max, legend_right });
+          );
+        });
+
+        if (tab) {
+          let index = Number(tab.index) - 2;
+          let data = [];
+
+          this.active_tabs_table = tabData.value.data.data;
+          this.rawData = tabData.value.data.data;
+          tabData.value.data.datalist.forEach((res) => {
+            data.push({
+              name: res.groupvalue,
+              value: res.sumvalue,
             });
-        },
-        setEchart(data, type, index) {
-            this.$nextTick(() => {
-                let max = 7
-                let legend_right = "4%"
-                this.$refs.echartRef[index].setOptions({ data, type, max, legend_right });
+          });
+          this.setEchart(data, "vertical", index);
+        }
+      }
+    },
+    handleClickQwnership(tab, event) {
+      let index = 0;
+      this.reset();
+      this.qwnershipTabs.forEach((res) => {
+        if (res.dataname == tab.name) {
+          this.rawData_qwnership = res.data;
+          let data = [];
+          res.datalist.forEach((res, ci) => {
+            data.push({
+              name: res.groupvalue,
+              value: res.sumvalue,
             });
+            loadGeoJSON(
+              res.geomvalue,
+              "#ff0000",
+              { isfly: true, fill_a: 1, fill: colors[ci % colors.length] },
+              (data) => {
+                data.name = "MultiLevelQuery_echart";
+              }
+            );
+          });
+          this.setEchart_qwnership(data, "vertical", index);
+          index++;
+        }
+      });
+    },
+    // 权属tabs
+    qwnershipTabsFun() {
+      store.state.query_pick_pane.forEach((res) => {
+        if (res.name == "权属") {
+          this.qwnershipTabs = res.value.data.child;
+          this.activeNameQwnership = this.qwnershipTabs[0].dataname;
+          this.handleClickQwnership({ name: this.qwnershipTabs[0].dataname });
+        }
+      });
+    },
+    setEchart_qwnership(data, type, index) {
+      this.$nextTick(() => {
+        let max = 7;
+        let legend_right = "4%";
+
+        this.$refs.qwnership_pie[index].setOptions({
+          data,
+          type,
+          max,
+          legend_right,
+        });
+      });
+    },
+    setEchart(data, type, index) {
+      this.$nextTick(() => {
+        let max = 7;
+        let legend_right = "4%";
+        this.$refs.echartRef[index].setOptions({
+          data,
+          type,
+          max,
+          legend_right,
+        });
+      });
+    },
+    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("/");
+    },
+    convertCoordinates(coordArray) {
+      return coordArray.map((coord) => [coord.x, coord.y]);
+    },
+    isArray2D(arr) {
+      // 首先检查arr是否是数组
+      if (!Array.isArray(arr)) {
+        return false;
+      }
+
+      // 检查数组中的每个元素是否也是数组
+      for (let i = 0; i < arr.length; i++) {
+        if (!Array.isArray(arr[i])) {
+          return false;
+        }
+      }
+
+      // 如果所有元素都是数组,那么arr是二维数组
+      return true;
+    },
+    async highlightResults(longitude, latitude) {
+      // 高亮结果
+      let queryByIDParameters = {
+        getFeatureMode: "BUFFER",
+        // getFeatureMode: "SPATIAL",
+        spatialQueryMode: "INTERSECT",
+        datasetNames:
+          store.state.vectorlayerlist[
+            store.state.vectorlayerlist.length - 1
+          ].source.split(","),
+        geometry: {
+          parts: [1],
+          points: [{ y: latitude, x: longitude }],
+          type: "POINT",
         },
-        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("/");
-        },
-        convertCoordinates(coordArray) {
-            return coordArray.map(coord => [coord.x, coord.y]);
-        },
-        isArray2D(arr) {
-            // 首先检查arr是否是数组
-            if (!Array.isArray(arr)) {
-                return false;
-            }
-
-            // 检查数组中的每个元素是否也是数组
-            for (let i = 0; i < arr.length; i++) {
-                if (!Array.isArray(arr[i])) {
-                    return false;
-                }
-            }
-
-            // 如果所有元素都是数组,那么arr是二维数组
-            return true;
-        },
-        async highlightResults(longitude, latitude) {
-            // 高亮结果
-            let queryByIDParameters = {
-                getFeatureMode: "BUFFER",
-                // getFeatureMode: "SPATIAL",
-                spatialQueryMode: "INTERSECT",
-                datasetNames: store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1].source.split(","),
-                geometry: {
-                    parts: [1],
-                    points: [{ y: latitude, x: longitude }],
-                    type: "POINT",
-                },
-                bufferDistance: 0.00005,
-                hasGeometry: true,
-            };
-
-
-
-            let response = await axios.post(this.calcIserverURI(store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1].url), queryByIDParameters);
-
-
-            const outputCoords = this.convertCoordinates(response.data.features[0].geometry.points);
-            outputCoords.push(outputCoords[0])
-
-            let f = { "type": "Polygon", "coordinates": [outputCoords] };
-            let result = turf.buffer(f, 1 / 99999, {
-                units: "kilometers",
-            });
-            let positions = [];
-            const twoDArray = result.geometry.coordinates[0];
-            const oneDArray = twoDArray.reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
-
-            positions = oneDArray;
-
-
-            if (this.isArray2D(oneDArray)) {
-                const oneDArray2 = oneDArray.reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
-                positions = oneDArray2;
-
-            } else {
-
-            }
-
-            query_click_by_iserver.entities.add({
-                polygon: {
-                    // 获取指定属性(positions,holes(图形内需要挖空的区域))
-                    hierarchy: {
-                        positions: Cesium.Cartesian3.fromDegreesArray(positions)
-                    },
-                    // 边框
-                    outline: false,
-                    // 边框颜色
-                    outlineColor: Cesium.Color.RED,
-                    // 边框尺寸
-                    outlineWidth: 10,
-                    // 填充的颜色,withAlpha透明度
-                    material: Cesium.Color.RED,
-
-                    // 是否被提供的材质填充
-                    fill: true,
-                    // 恒定高度
-                    height: 1.1,
-                    // 显示在距相机的距离处的属性,多少区间内是可以显示的
-                    // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1000, 10000000),
-                    // 是否显示
-                    show: true,
-                    // 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。
-                    zIndex: 10
-                }
-            });
-
-
+        bufferDistance: 0.00005,
+        hasGeometry: true,
+      };
+
+      let response = await axios.post(
+        this.calcIserverURI(
+          store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1]
+            .url
+        ),
+        queryByIDParameters
+      );
+
+      const outputCoords = this.convertCoordinates(
+        response.data.features[0].geometry.points
+      );
+      outputCoords.push(outputCoords[0]);
+
+      let f = { type: "Polygon", coordinates: [outputCoords] };
+      let result = turf.buffer(f, 1 / 99999, {
+        units: "kilometers",
+      });
+      let positions = [];
+      const twoDArray = result.geometry.coordinates[0];
+      const oneDArray = twoDArray.reduce(
+        (accumulator, currentValue) => accumulator.concat(currentValue),
+        []
+      );
+
+      positions = oneDArray;
+
+      if (this.isArray2D(oneDArray)) {
+        const oneDArray2 = oneDArray.reduce(
+          (accumulator, currentValue) => accumulator.concat(currentValue),
+          []
+        );
+        positions = oneDArray2;
+      } else {
+      }
+
+      query_click_by_iserver.entities.add({
+        polygon: {
+          // 获取指定属性(positions,holes(图形内需要挖空的区域))
+          hierarchy: {
+            positions: Cesium.Cartesian3.fromDegreesArray(positions),
+          },
+          // 边框
+          outline: false,
+          // 边框颜色
+          outlineColor: Cesium.Color.RED,
+          // 边框尺寸
+          outlineWidth: 10,
+          // 填充的颜色,withAlpha透明度
+          material: Cesium.Color.RED,
+
+          // 是否被提供的材质填充
+          fill: true,
+          // 恒定高度
+          height: 1.1,
+          // 显示在距相机的距离处的属性,多少区间内是可以显示的
+          // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1000, 10000000),
+          // 是否显示
+          show: true,
+          // 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。
+          zIndex: 10,
         },
-
+      });
     },
-    beforeCreate() { }, //生命周期 - 创建之前
-    created() { }, //生命周期 - 创建完成(可以访问当前this实例)
-    beforeMount() { }, //生命周期 - 挂载之前
-    mounted() {
-        const that = this;
-        this.$nextTick(() => {
-            query_click_by_iserver = new Cesium.CustomDataSource("query_click_by_iserver");
-            viewer.dataSources.add(query_click_by_iserver);
-
-            manager_multi_level_query = new Cesium.CustomDataSource("manager_multi_level_query");
-            viewer.dataSources.add(manager_multi_level_query);
-        })
-
-    }, //生命周期 - 挂在完成
-    beforeUpdate() { }, //生命周期 - 更新之前
-    updated() { }, //生命周期 - 更新之后
-    beforeDestroy() { }, //生命周期 - 销毁之前
-    destroy() { },//生命周期 - 销毁完成
-    activated() { }, //若组件实例是 <KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用。
-    deactivated() { } //若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  created() {}, //生命周期 - 创建完成(可以访问当前this实例)
+  beforeMount() {}, //生命周期 - 挂载之前
+  mounted() {
+    const that = this;
+    this.$nextTick(() => {
+      query_click_by_iserver = new Cesium.CustomDataSource(
+        "query_click_by_iserver"
+      );
+      viewer.dataSources.add(query_click_by_iserver);
+
+      manager_multi_level_query = new Cesium.CustomDataSource(
+        "manager_multi_level_query"
+      );
+      viewer.dataSources.add(manager_multi_level_query);
+    });
+  }, //生命周期 - 挂在完成
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroy() {}, //生命周期 - 销毁完成
+  activated() {}, //若组件实例是 <KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用。
+  deactivated() {}, //若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。
 };
 </script>
 <style lang="scss" scoped>
 .el-collapse {
-    // width: 95%;
-    border: none;
-    background-color: transparent !important;
+  // width: 95%;
+  border: none;
+  background-color: transparent !important;
 }
 
 .el-scrollbar {
-    border: 1px solid #0f7ac8 !important;
-    // padding: 0 10px;
+  border: 1px solid #0f7ac8 !important;
+  // padding: 0 10px;
 }
 
 .el-collapse-item__header {
-    // border-bottom: 1px solid rgba(102, 126, 143, 0.747);
-    background-color: transparent !important;
-    color: rgb(217, 237, 254) !important;
-    border-color: transparent !important;
+  // border-bottom: 1px solid rgba(102, 126, 143, 0.747);
+  background-color: transparent !important;
+  color: rgb(217, 237, 254) !important;
+  border-color: transparent !important;
 }
 
 .el-collapse-item__wrap {
-    background-color: transparent !important;
-    border-color: transparent !important;
+  background-color: transparent !important;
+  border-color: transparent !important;
 }
 
 .el-collapse-item__content {
-    // background-color: rgba(255, 192, 203, 0.425) !important;
-    background-color: transparent !important;
-    color: rgb(217, 237, 254) !important;
+  // background-color: rgba(255, 192, 203, 0.425) !important;
+  background-color: transparent !important;
+  color: rgb(217, 237, 254) !important;
 }
 </style>
 <style lang="scss" scoped>
 .echart {
-    width: 300px;
-    height: 420px;
+  width: 300px;
+  height: 420px;
 }
 
 .echart1 {
-    height: 280px;
+  height: 280px;
 }
 
 .multi_level_query_table {
-    position: absolute;
-    top: 7rem;
-    width: 19rem;
-
-
+  position: absolute;
+  top: 7rem;
+  width: 19rem;
 }
 
 /* 去掉tabs标签栏下的下划线 */
 ::v-deep .el-tabs__nav-wrap::after {
-    position: static !important;
-    /* background-color: #fff; */
+  position: static !important;
+  /* background-color: #fff; */
 }
 
 /* 下划线切换高亮 */
 ::v-deep .el-tabs__active-bar {
-    background-color: #30fdff;
+  background-color: #30fdff;
 }
 
 ::v-deep .el-collapse-item__header {
-    color: #64daff !important;
-    font-weight: 600;
+  color: #64daff !important;
+  font-weight: 600;
 }
 
-
 .el-tab-pane {
-    height: 33rem;
-    overflow: auto;
+  height: 33rem;
+  overflow: auto;
 }
 
-
 .list_vector_multi {
-    background-image: url("/static/images/ghzc/内容框.png");
+  background-image: url("/static/images/ghzc/内容框.png");
 
-    width: 18rem;
-    border-top: 1px solid #CCC;
-    font-size: 14px;
-    padding: 0.1rem 0rem 0.1rem 0rem;
-    border-left: 1px solid #CCC;
+  width: 18rem;
+  border-top: 1px solid #ccc;
+  font-size: 14px;
+  padding: 0.1rem 0rem 0.1rem 0rem;
+  border-left: 1px solid #ccc;
 
-    border-right: 1px solid #CCC;
+  border-right: 1px solid #ccc;
 
-    // border-bottom:1px solid #CCC ;
+  // border-bottom:1px solid #CCC ;
 }
 
 .list_vector_multi:last-child {
-
-    border-bottom: 1px solid #CCC;
+  border-bottom: 1px solid #ccc;
 }
 
 .filed_box {
-    display: inline-block;
+  display: inline-block;
 }
 
 .el-checkbox {
-    color: white;
+  color: white;
 }
 
 .is-disabled {
-    display: inline;
+  display: inline;
 }
 
-
 /deep/ .el-table tr {
-    background: rgba(10, 25, 38, 0.5) !important;
+  background: rgba(10, 25, 38, 0.5) !important;
 }
 
 /deep/ .el-table td.el-table__cell,
 .el-table th.el-table__cell.is-leaf {
-    background: rgba(10, 25, 38, 0.5) !important;
+  background: rgba(10, 25, 38, 0.5) !important;
 
-    border-bottom: 0px solid #ebeef5;
+  border-bottom: 0px solid #ebeef5;
 }
 
 .el-table {
-    color: #fff;
-    background: rgba(10, 25, 38, 0.5) !important;
+  color: #fff;
+  background: rgba(10, 25, 38, 0.5) !important;
 }
 
 /deep/ .el-table__fixed-right::before,
 .el-table__fixed::before {
-    background: rgba(10, 25, 38, 0.9) !important;
+  background: rgba(10, 25, 38, 0.9) !important;
 }
 
 /deep/ .el-table__fixed-right-patch {
-    background: rgba(10, 25, 38, 0.9) !important;
+  background: rgba(10, 25, 38, 0.9) !important;
 }
 
 /deep/ .el-table--border::after,
 .el-table--group::after,
 .el-table::before {
-    background: rgba(10, 25, 38, 0) !important;
+  background: rgba(10, 25, 38, 0) !important;
 }
 
 .content_item {
-    color: #30fdff;
+  color: #30fdff;
 
-    .item_field {
-        color: #30fdff;
-
-    }
+  .item_field {
+    color: #30fdff;
+  }
 }
 </style>
 

+ 186 - 164
src/components/Query/clickQuery/clickQuery.vue

@@ -1,28 +1,14 @@
 <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
@@ -33,51 +19,28 @@
     </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">
@@ -103,6 +66,7 @@ import MultiLevelQuery from "./MultiLevelQuery.vue";
 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";
 let gwtype;
 let query_click = null;
 let manager_layer_png = null;
@@ -182,7 +146,7 @@ export default {
         : true;
     },
   },
-  created() {},
+  created() { },
   watch: {
     activeLayerId(val) {
       if (val && val != "0") {
@@ -380,12 +344,17 @@ export default {
       var tempArr = [];
       // "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);
+        // 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",
@@ -398,7 +367,8 @@ export default {
           };
           let e = await this.mapQuery(url2, queryByIDParameters);
           if (e && e.totalCount > 0) {
-            that.layerList.push(store.state.vectorlayerlist[i]);
+            // 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]));
@@ -421,7 +391,7 @@ export default {
 
                 //获取图层id的参数
                 let substring = pickedFeature.primitive._baseUri.query;
-                for (let p = 0; p < store.state.vectorlayerlist.length; i++) {
+                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;
@@ -439,7 +409,7 @@ export default {
               }
             }
           }
-        }
+        // }
       }
 
       that.loading = true;
@@ -462,118 +432,164 @@ export default {
         }
       });
     },
-    async pickPosition(movement) {
-      let that = this;
+    pickPosition(movement) {
       //拾取图层
       // 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 = that.cartesian3ToWGS84(artesian3);
+      let xy = this.cartesian3ToWGS84(artesian3);
       //TODO wanger 分图层查询
       for (let i = 0; i < store.state.vectorlayerlist.length; i++) {
         let obj = store.state.vectorlayerlist[i];
         if (!obj.source) {
           continue;
         }
-        let queryByIDParameters = {
-          getFeatureMode: "BUFFER",
-          // getFeatureMode: "SPATIAL",
-          spatialQueryMode: "INTERSECT",
-          datasetNames: 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
-          );
+        // 结果高亮
+        this.highlightResultsPng(xy.lng, xy.lat);
+        if (obj.title == "测试WMS") {
+          this.getGeoserver(xy, obj);
         } else {
-          e = await that.mapQuery(
-            that.calcIserverURI(obj.url),
-            queryByIDParameters
-          );
+          this.superQuery(xy, obj);
         }
+      }
+    },
+    async superQuery(xy, obj) {
+      let that = this;
+      let queryByIDParameters = {
+        getFeatureMode: "BUFFER",
+        // getFeatureMode: "SPATIAL",
+        spatialQueryMode: "INTERSECT",
+        datasetNames: obj.source.split(","),
+        geometry: {
+          parts: [1],
+          points: [{ y: xy.lat, x: xy.lng }],
+          type: "POINT",
+        },
+        bufferDistance: 0.00005,
+        hasGeometry: true,
+      };
+      let e;
 
-        // 结果高亮
-
-        this.highlightResultsPng(xy.lng, xy.lat);
-        if (e && e.totalCount > 0) {
-          that.layerList.push(store.state.vectorlayerlist[i]);
-          let queryData = [];
-          let geoms = [];
-          let parts = [];
-          let parseJson = JSON.parse(obj.legend);
-          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.fieldname.toUpperCase() == fieldName
-                );
-                if (perjson.length > 0) {
-                  var show = condition(perjson[0]);
-                  var order = perjson[0].order || linSAr.fieldNames.length;
-                  if (fieldName != perjson[0].fieldaliasname)
-                    fieldName = perjson[0].fieldaliasname;
-                }
-                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 });
+      if (obj.type == "S3M") {
+        e = await that.mapQuery(
+          window.baseModelQueryLayer,
+          queryByIDParameters
+        );
+      } else {
+        e = await that.mapQuery(
+          that.calcIserverURI(obj.url),
+          queryByIDParameters
+        );
+      }
+      if (e && e.totalCount > 0) {
+        this.addLayerList(obj.title, obj);
+        let queryData = [];
+        let geoms = [];
+        let parts = [];
+        let parseJson = JSON.parse(obj.legend);
+        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.fieldname.toUpperCase() == fieldName
+              );
+              if (perjson.length > 0) {
+                var show = condition(perjson[0]);
+                var order = perjson[0].order || linSAr.fieldNames.length;
+                if (fieldName != perjson[0].fieldaliasname)
+                  fieldName = perjson[0].fieldaliasname;
+              }
+              if (show) {
+                let v = linSAr.fieldValues[i];
+                if (v != "" && !isNaN(parseFloat(v))) {
+                  v = Math.round(parseFloat(v) * 100) / 100;
                 }
-              });
-            } 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];
+                cur.push({ name: fieldName, value: v, order });
               }
-              points.push([c.x, c.y]);
-            }
-            parts.push(e.features[u].geometry.parts);
-            geoms.push(points);
-            queryData.push(cur);
+            });
+          } else {
+            that.$message({
+              message: "查询结果为空!",
+              type: "warning",
+              customClass: "messageIndex",
+            });
           }
 
-          that.queryResultsGeomPart[obj.id] = parts;
-          that.queryResults[obj.id] = queryData;
-          that.queryResultsGeom[obj.id] = geoms;
+          //排序
+          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;
       }
-      if (that.layerList.length > 0) {
-        that.activeLayerId = that.layerList[0].id;
+      this.setactiveLayerId();
+    },
+    setactiveLayerId() {
+      if (this.layerList.length > 0) {
+        this.activeLayerId = this.layerList[0].id;
+      } else {
+        this.$message({
+          message: "查询结果为空!",
+          type: "warning",
+          customClass: "messageIndex",
+        });
+      }
+    },
+    async getGeoserver(xy, obj) {
+      let url = "http://192.168.60.52:28085/geoserver/demo/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",
+      };
+      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);
+        });
       } else {
         that.$message({
           message: "查询结果为空!",
@@ -581,6 +597,8 @@ export default {
           customClass: "messageIndex",
         });
       }
+
+      this.setactiveLayerId();
     },
     highlightResultsPng(longitude, latitude) {
       manager_layer_png.entities.add({
@@ -597,14 +615,18 @@ export default {
         },
       });
     },
-    addLayerList(label) {
+    addLayerList(label, obj) {
       if (this.layerList.findIndex((a) => a.label == label) >= 0) return;
-      let layers = store.state.vectorlayerlist.filter(
-        (element) => element.label === label
-      );
-      if (layers.length > 0) {
-        this.activeLayerId = layers[0].id;
-        this.layerList.push(layers[0]);
+      if (obj) {
+        this.layerList.push(obj);
+      } else {
+        let layers = store.state.vectorlayerlist.filter(
+          (element) => element.label === label
+        );
+        if (layers.length > 0) {
+          this.activeLayerId = layers[0].id;
+          this.layerList.push(layers[0]);
+        }
       }
     },
     /**

+ 81 - 82
src/components/TerrainAnalysis/TerrainCutFillAnalysis/TerrainCutFillAnalysisNew.vue

@@ -7,21 +7,39 @@
     element-loading-spinner="el-icon-loading"
     element-loading-background="rgba(0, 0, 0, 0.8)"
   >
-    <el-radio v-model="radio" label="cut">地形填挖方分析</el-radio>
-    <el-radio v-model="radio" label="smooth">地形平整分析</el-radio>
+    <!-- <el-radio v-model="radio" label="cut">地形填挖方分析</el-radio>
+    <el-radio v-model="radio" label="smooth">地形平整分析</el-radio> -->
     <el-form
       :model="cutData"
       ref="ruleForm"
-      label-width="100px"
+      label-width="80px"
       :rules="rules"
       class="ruleForm"
     >
       <el-form-item label="分析范围:" prop="xzmj">
-        <range type="cutfill" :keys="['hx', 'sc']" class="range" ref="range" />
+        <range
+          type="cutfill"
+          :keys="['hx', 'sc']"
+          class="range"
+          ref="range"
+          @cutfill="getDsm"
+        />
       </el-form-item>
-      <el-form-item label="填挖基准:" v-if="radio == 'cut'">
+      <el-form-item label="高程数据:">
+        <span>最小:{{ cutData.min || 0 }}米 </span>
+        <span> 最大:{{ cutData.max || 0 }}米 </span>
+        <span> 平均:{{ cutData.avg || 0 }}米 </span>
+      </el-form-item>
+      <el-form-item label="填挖基准:" v-if="radio == 'cut'" prop="height">
         <!-- readonly="readonly" -->
-        <el-input v-model="smooth_height" placeholder="" size="mini"></el-input>
+        <el-input
+          v-model="form.height"
+          placeholder="不填入基准为平整土地"
+          size="mini"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="缓冲区:" prop="height">
+        <el-input v-model="form.buffer" placeholder="" size="mini"></el-input>
       </el-form-item>
       <div class="sdatadiv">
         分析结果:
@@ -71,19 +89,23 @@ export default {
   components: { range },
   data() {
     return {
-      radio: "smooth",
+      radio: "cut",
       sharedState: store.state,
       loading: false,
-      smooth_height: "",
+      form: {
+        height: "",
+        buffer: 5,
+        geom: "",
+      },
       cutData: {},
       // 石方量
       sdata: [
-        { name: "填土体积:", prop: "fillVolume", unit: "立方米", value: "" },
-        { name: "开挖体积:", prop: "cutVolume", unit: "立方米", value: "" },
-        { name: "填挖差值:", prop: "cz", unit: "立方米", value: "" },
-        { name: "最大高程:", prop: "maxHeight", unit: "米", value: "" },
-        { name: "最小高程:", prop: "minHeight", unit: "米", value: "" },
-        { name: "填挖基准:", prop: "midHeight", unit: "米", value: "" },
+        { name: "填土体积:", prop: "fillVolume", unit: "立方米" },
+        { name: "开挖体积:", prop: "cutVolume", unit: "立方米" },
+        { name: "填挖差值:", prop: "cz", unit: "立方米" },
+        { name: "最大高程:", prop: "maxHeight", unit: "米" },
+        { name: "最小高程:", prop: "minHeight", unit: "米" },
+        { name: "填挖基准:", prop: "midHeight", unit: "米" },
       ],
       sdh: [
         { scS: "填土", fill: "#1E90A8" },
@@ -103,6 +125,11 @@ export default {
   methods: {
     reset() {
       this.cutData = {};
+      this.form = {
+        height: "",
+        buffer: 5,
+        geom: "",
+      };
       this.$refs.range.reset();
       viewer.entities.removeAll();
       viewer.dataSources.removeAll();
@@ -113,84 +140,59 @@ export default {
         this.$message.warning("请绘制或导入分析范围!");
         return;
       }
-      this.cutFill(_temp.geom);
+      this.form.geom = _temp.geom;
+      this.cutFill();
     },
     clear() {
       common.clearHandlerDrawing("Polygon");
     },
-    async cutFill(geom) {
+
+    async getDsm(geom) {
+      let res = await getDsm({ geom, type: "all" });
+      this.cutData = {
+        min: res.data.min.toFixed(2),
+        max: res.data.max.toFixed(2),
+        avg: res.data.avg.toFixed(2),
+      };
+    },
+    async cutFill() {
       this.loading = true;
-      let res = await cutFill({
-        geom,
-        height: this.smooth_height,
-      });
+      let res = await cutFill(this.form);
+      this.loading = false;
       if (res.success) {
         this.$refs.range.reset();
         if (!res.data) this.$message.error("抱歉!不在分析范围内");
-        this.cutData = res.data;
-
-        Object.keys(this.cutData).forEach((key) => {
-          if (typeof this.cutData[key] == "number")
-            this.cutData[key] = this.cutData[key].toFixed(2);
+        // this.cutData = { ...this.cutData, ...res.data };
+        Object.keys(res.data).forEach((key) => {
+          if (typeof res.data[key] == "number")
+            this.cutData[key] = res.data[key].toFixed(2);
         });
-        this.cutData.cz = res.data.cutVolume - res.data.fillVolume;
+        this.cutData.cz = this.cutData.cutVolume - this.cutData.fillVolume;
 
-        this.loading = false;
-        let pitch = Cesium.Math.toRadians(-45.0);
+        // let pitch = Cesium.Math.toRadians(-45.0);
         let params = { sw: 0.001, fill_a: 0.8 };
-        loadGeoJSON(res.data.bottomGeom, "#1E90A8", params, (data) => {
-          viewer.flyTo(data, {
-            offset: new Cesium.HeadingPitchRange(0, -45, 100),
-          });
-        });
-        loadGeoJSON(res.data.midGeom, "#ff0000", params, (data) => {
-          viewer.flyTo(data, {
-            offset: new Cesium.HeadingPitchRange(0, -45, 100),
-          });
-        });
+        // let fn = (data) => {  data.name = "cut_fill" };
+        viewer.entities.removeAll();
+        viewer.dataSources.removeAll();
+        loadGeoJSON(res.data.bottomGeom, "#1E90A8", params);
+        loadGeoJSON(res.data.midGeom, "#ff0000", params);
       }
-
-      // let newArr = positions.map((item, index) => {
-      //   return (index + 1) % 3 === 0 ? data.data : item;
-      // });
-      // viewer.scene.globe.removeAllModifyRegion();
-      // viewer.scene.globe.addModifyRegion({
-      //   name: "ggg",
-      //   position: newArr,
-      // });
-
-      // this.smooth_height = data.data.toFixed(2);
-      // // let cutVolume = cutFillAnalysis.VolumeAnalysis1(threeArray, Number(height));
-      // // console.log('cutVolume: ', cutVolume);
-
-      // let newArray = [];
-      // for (let i = 0; i < positions_noHeight.length; i += 2) {
-      //   // 将每两个连续的元素组合成一个新的数组,并添加到新数组中
-      //   newArray.push([positions_noHeight[i], positions_noHeight[i + 1]]);
-      // }
-      // newArray.push(newArray[0]);
-
-      // var polygon = turf.polygon([newArray]);
-
-      // this.result_area = turf.area(polygon).toFixed(2);
     },
     ExportResult() {
-      let _this = this;
-      // let box = that.squarePolygon(entitys);
-      // viewer.camera.flyTo({
-      //   destination: Cesium.Rectangle.fromDegrees(
-      //     box[0][0] + 0.0002,
-      //     box[0][1] - 0.0002,
-      //     box[2][0] - 0.0002,
-      //     box[2][1] + 0.0002
-      //   ),
-      // });
-      setTimeout(function () {
-        var promise = scene.outputSceneToFile();
-        Cesium.when(promise, function (base64data) {
-          download(base64data, _this.drawLegends);
-        });
-      }, 1000);
+      var legends = [];
+      // legends.push({ name: "最小高程", value: this.cutData.min, unit: "米" });
+      // legends.push({ name: "最大高程", value: this.cutData.max, unit: "米" });
+      // legends.push({ name: "平均高程", value: this.cutData.avg, unit: "米" });
+      legends.push({ name: "填挖基准", value: this.form.height, unit: "米" });
+      legends.push({ name: "缓冲区", value: this.form.buffer, unit: "米" });
+      this.sdata.forEach((si) =>
+        legends.push({ ...si, value: this.cutData[si.prop] })
+      );
+      legends = [...legends, ...this.sdh];
+      var promise = scene.outputSceneToFile();
+      Cesium.when(promise, (base64data) => {
+        download(base64data, legends);
+      });
     },
     /**
      * 根据图片生成画布
@@ -198,9 +200,6 @@ export default {
 
     // 绘制图例
     drawLegends(canvas, ctx) {
-      let _this = this;
-      console.log("-----");
-      var legends = [...this.sdata, ...this.sdh];
       var padding = 10; // 图例与边缘的间距
       var lineHeight = 30; // 每行图例的高度
       var labW = 200;
@@ -242,7 +241,7 @@ export default {
 <style lang="scss" scoped>
 .cut_fill_box {
   width: 100%;
-  height: 580px;
+  height: 700px;
   padding: 20px;
   box-sizing: border-box;
   position: relative;

+ 3 - 3
src/components/echartsTemplate/pie.vue

@@ -194,9 +194,9 @@ export default {
       });
       if (cartData.type == "vertical") {
         option.series[0].radius = ["27%", "42%"];
-        option.series[0].center = ["50%", "30%"];
-        option.legend.height = "40%";
-        option.legend.top = "60%";
+        option.series[0].center = ["50%", "100"];
+        option.legend.height = cartData.data.length * 10;
+        option.legend.top = "200";
         option.legend.orient = "vertical";
         option.legend.left = "2%";
       } else {

+ 9 - 36
src/components/mapView/range.vue

@@ -20,7 +20,7 @@
         <el-button size="mini" @click="clearAll">清除</el-button>
       </div>
     </div>
-    <div>
+    <div v-if="type != 'cutfill'">
       <span v-if="model.xzmj != 0">{{ model.xzmj }} 亩</span>
       <el-tooltip
         v-if="fileList.length > 0"
@@ -118,41 +118,9 @@ export default {
           this.model.xzfw = res.data.id;
           this.model.geom = res.data.geom;
           this.addPolygon(parse(res.data.geom));
-          // let geoms = res.data.geom
-          //   .substring(
-          //     res.data.geom.indexOf("(((") + 3,
-          //     res.data.geom.length - 3
-          //   )
-          //   .split(")),((");
-          // for (let i = 0; i < geoms.length; i++) {
-          //   let geom = geoms[i].split(",");
-          //   let points = [];
-          //   for (let j = 0; j < geom.length; j++) {
-          //     points.push(parseFloat(geom[j].split(" ")[0]));
-          //     points.push(parseFloat(geom[j].split(" ")[1]));
-          //   }
-          //   points.push(parseFloat(geom[0].split(" ")[0]));
-          //   points.push(parseFloat(geom[0].split(" ")[1]));
-          //   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: {
-          //         positions: Cesium.Cartesian3.fromDegreesArray(points),
-          //       },
-          //       material: Cesium.Color.WHITE.withAlpha(0.3),
-          //       clampToGround: true,
-          //       outline: true,
-          //       outlineWidth: 5,
-          //       outlineColor: Cesium.Color.RED,
-          //     },
-          //   });
-          // }
-          // viewer.flyTo(viewer.entities);
+          if (this.$props.type == "cutfill") {
+            this.$emit("cutfill", this.model.geom);
+          }
         }
       });
     },
@@ -267,6 +235,11 @@ export default {
           // var parse = require("wellknown"); //引入wellknow
           const wktPolygon = parse.stringify(geojsonPolygon);
           // console.log("WKT Polygon:", wktPolygon);
+          if (this.$props.type == "cutfill") {
+            this.model.geom = wktPolygon;
+            this.$emit("cutfill", this.model.geom);
+            return;
+          }
 
           const formdata = new FormData();
           // formdata.append("file", file.raw);

+ 16 - 162
src/components/sceneAtttribute/basicOptions/basicOptions.vue

@@ -20,121 +20,6 @@
       <label>{{ Resource.nightView }}</label>
       <input type="checkbox" v-model="nightView" />
     </div>
-    <div class="sm-function-module-sub-section">
-      <label class="label-container">{{ Resource.brightness }}</label>
-      <div class="sm-solider-input-box">
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 63%"
-          type="range"
-          v-model="brightness"
-        />
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 34%"
-          type="number"
-          v-model="brightness"
-        />
-      </div>
-    </div>
-    <div class="sm-function-module-sub-section">
-      <label class="label-container">{{ Resource.contrast }}</label>
-      <div class="sm-solider-input-box">
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 63%"
-          type="range"
-          v-model="contrast"
-        />
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 34%"
-          type="number"
-          v-model="contrast"
-        />
-      </div>
-    </div>
-    <div class="sm-function-module-sub-section">
-      <label class="label-container">{{ Resource.hue }}</label>
-      <div class="sm-solider-input-box">
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 63%"
-          type="range"
-          v-model="hue"
-        />
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 34%"
-          type="number"
-          v-model="hue"
-        />
-      </div>
-    </div>
-    <div class="sm-function-module-sub-section">
-      <label class="label-container">{{ Resource.saturation }}</label>
-      <div class="sm-solider-input-box">
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 63%"
-          type="range"
-          v-model="saturation"
-        />
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 34%"
-          type="number"
-          v-model="saturation"
-        />
-      </div>
-    </div>
-    <div class="sm-function-module-sub-section">
-      <label class="label-container">{{ Resource.gamma }}</label>
-      <div class="sm-solider-input-box">
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 63%"
-          type="range"
-          v-model="gamma"
-        />
-        <input
-          class="min-solider"
-          min="0"
-          max="3"
-          step="0.02"
-          style="width: 34%"
-          type="number"
-          v-model="gamma"
-        />
-      </div>
-    </div>
     <div class="sm-function-module-sub-section">
       <label class="label-container">{{ Resource.queryCoordinates }}</label>
       <input
@@ -157,10 +42,9 @@
 </template>
 
 <script>
-let layers, imageryLayers, handler;
+let layers, imageryLayers, handler, tooltip;
 //夜景
 import Nightscape from "../../../../src/components/Combinations/NightscapeAnalysis/index.js";
-
 export default {
   name: "sceneBasicOptions",
   data() {
@@ -175,11 +59,6 @@ export default {
       atomsphereRender: true,
       fogEffect: false,
       nightView: false,
-      brightness: 1,
-      contrast: 1,
-      hue: 0,
-      saturation: 1,
-      gamma: 1,
       queryCoordinates: null,
       isDestroyFlag: true,
     };
@@ -204,7 +83,8 @@ export default {
     }
   },
   mounted() {
-    if (this.SceneAtttributeShow && this.basicOptions) {
+    // if (this.SceneAtttributeShow && this.basicOptions) {
+    if (this.basicOptions) {
       this.init();
     }
     this.depthAgainst = false;
@@ -216,19 +96,23 @@ export default {
       if (layers) {
         return;
       }
-      if (!isPCBroswer) {
-        this.sunShow = false;
-      }
-      layers = viewer.scene.layers.layerQueue;
-      imageryLayers = viewer.imageryLayers;
-      handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
+      // if (!isPCBroswer) { //暂时没有isPCBroswer这个字段,不知道PCB是啥
+      //   this.sunShow = false;
+      // }
+      this.$nextTick(() => {
+        layers = viewer.scene.layers.layerQueue;
+        imageryLayers = viewer.imageryLayers;
+      });
+      // handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
       //   camera = scene.camera;
       //   camera.flyCircleLoop = true;
     },
     onQueryCoordinatesClk() {
+      handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
+      tooltip = createTooltip(document.body);
       this.isDestroyFlag = false;
       handler.setInputAction(function (movement) {
-        window.tooltip.showAt(movement.endPosition, "点击查询坐标值");
+        tooltip.showAt(movement.endPosition, "点击查询坐标值");
       }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
       handler.setInputAction((e) => {
         let position = scene.pickPosition(e.position);
@@ -242,7 +126,7 @@ export default {
         let searchHeight = cartographic.height.toFixed(2);
         this.queryCoordinates =
           searchLongitude + ", " + searchLatitude + ", " + searchHeight;
-        window.tooltip.setVisible(false);
+        tooltip.setVisible(false);
         handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
         handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
       }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
@@ -251,7 +135,7 @@ export default {
       this.isDestroyFlag = true;
       handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
       handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
-      window.tooltip.setVisible(false);
+      tooltip.setVisible(false);
       this.queryCoordinates = null;
     },
   },
@@ -307,36 +191,6 @@ export default {
         Nightscape.closNightSwitch();
       }
     },
-    brightness(val) {
-      if (imageryLayers.length > 0) {
-        let layer = imageryLayers.get(0);
-        layer["brightness"] = Number(val);
-      }
-    },
-    contrast(val) {
-      if (imageryLayers.length > 0) {
-        let layer = imageryLayers.get(0);
-        layer["contrast"] = Number(val);
-      }
-    },
-    hue(val) {
-      if (imageryLayers.length > 0) {
-        let layer = imageryLayers.get(0);
-        layer["hue"] = Number(val);
-      }
-    },
-    saturation(val) {
-      if (imageryLayers.length > 0) {
-        let layer = imageryLayers.get(0);
-        layer["saturation"] = Number(val);
-      }
-    },
-    gamma(val) {
-      if (imageryLayers.length > 0) {
-        let layer = imageryLayers.get(0);
-        layer["gamma"] = Number(val);
-      }
-    },
   },
 };
 </script>

+ 22 - 0
src/utils/MapHelper/MapHelper.js

@@ -44,6 +44,28 @@ export const mapQuery = async (url, queryObj) => {
     return null;
   }
 };
+export const mapanalyzePost = async (url, queryObj) => {
+  let response = await CTservice.post(url, queryObj);
+  debugger;
+  if (response && response.data) {
+    return response.data;
+  } else {
+    return null;
+  }
+};
+export const mapanalyze = async (url, params) => {
+  let response = await CTservice({
+    url: url,
+    method: "get",
+    params: params,
+  });
+
+  if (response && response.data) {
+    return response.data;
+  } else {
+    return null;
+  }
+};
 
 /**
  * 墨卡托转经纬度

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

@@ -1,5 +1,17 @@
 import * as turf from "@turf/turf";
 import parse from "wellknown";
+export let colors = [
+  "#62ADED",
+  "#DFE15A",
+  "#6EDC8D",
+  "#00A42E",
+  "#F9B447",
+  "#7F4FE5",
+  "#FF6969",
+  "#27CED9",
+  "#DF56F5",
+  "#DCFFAF",
+];
 export function getCentroid(geojson, eindex) {
   if (turf.getType(geojson) === "Feature") {
     geojson = geojson.geometry;
@@ -35,8 +47,8 @@ export function loadGeoJSON(geom, yanse, adata, fun) {
     stroke: yanse
       ? Cesium.Color.fromCssColorString(yanse)
       : Cesium.Color.RED.withAlpha(0),
-    fill: yanse
-      ? Cesium.Color.fromCssColorString(yanse).withAlpha(adata.fill_a || 0.4)
+    fill: yanse || adata.fill
+      ? Cesium.Color.fromCssColorString(adata.fill || yanse).withAlpha(adata.fill_a || 0.4)
       : Cesium.Color.WHITE.withAlpha(0), //Cesium.Color.fromCssColorString("rgba(10, 95, 152, 0.4)"), //注意:颜色必须大写,即不能为blue
     strokeWidth: adata.sw || 2,
   })
@@ -73,9 +85,47 @@ export function loadGeoJSON(geom, yanse, adata, fun) {
   //   }
   // });
 }
-/**
-    * 下载图片
-    */
+export function addPonit() {
+  // manager_multi_level_query.entities.add({
+  //   name: "manager_multi_level_query",
+  //   position: Cesium.Cartesian3.fromDegrees(longitude, latitude, 40),
+  //   billboard: {
+  //     // 图像地址,URI或Canvas的属性
+  //     image: "./static/images/overview/go.png",
+  //     height: 34,
+  //     width: 36,
+  //     scale: 1.0,
+  //     zIndex: 2,
+  //     show: true,
+  //   },
+  // });
+}
+export function clearPoint() {
+  // 图标
+  // var entities = manager_multi_level_query.entities.values;
+  // for (var i = entities.length - 1; i >= 0; i--) {
+  //   manager_multi_level_query.entities.remove(entities[i]);
+  // }
+}
+export function pickPoint(fun) {
+  let handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
+  handler.setInputAction((event) => {
+    var position = viewer.scene.pickPosition(event.position);
+    if (!position)
+      //点击到地球之外
+      return false;
+    var cartographic = Cesium.Cartographic.fromCartesian(position);
+    let lon = Cesium.Math.toDegrees(cartographic.longitude);
+    let lat = Cesium.Math.toDegrees(cartographic.latitude);
+    let height = cartographic.height;
+    // let heading = viewer.scene.camera.heading;
+    // let pitch = viewer.scene.camera.pitch;
+    fun(lon, lat, height)
+    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+  }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+}
+
+// 导出结果下载图片
 export function download(base64data, fu) {
   var image = new Image();
   image.src = base64data;
@@ -89,25 +139,23 @@ export function download(base64data, fu) {
     a.dispatchEvent(event); // 触发超链接的点击事件
   };
 }
-/**
-     * 根据图片生成画布
-     */
+// 根据图片生成画布
 function convertImageToCanvas(image, fu) {
   var canvas = document.createElement("canvas");
   canvas.width = image.width;
   canvas.height = image.height;
   var ctx = canvas.getContext("2d");
   ctx.drawImage(image, 0, 0);
-  fu(canvas, ctx)
-  // this.drawLegends(canvas, ctx);
+  if (typeof fu == 'function')
+    fu(canvas, ctx)
+  else drawLegends(canvas, ctx, fu);
   return canvas;
 }
 // 绘制图例
-function drawLegends(canvas, ctx) {
-  var legends = this.sdh;
+function drawLegends(canvas, ctx, legends) {
   var padding = 10; // 图例与边缘的间距
   var lineHeight = 30; // 每行图例的高度
-  var labW = 120;
+  var labW = 200;
   var x = canvas.width - padding - labW; // 图例的起始X坐标
   var y = canvas.height - legends.length * lineHeight - padding; // 图例的起始Y坐标
   // 绘制颜色块
@@ -120,19 +168,48 @@ function drawLegends(canvas, ctx) {
   );
   legends.forEach(function (legend, index) {
     // 绘制文本
-    ctx.fillStyle = "black";
-    ctx.fillText(
-      legend.scS + "小时",
-      x,
-      y + index * lineHeight + lineHeight / 2
-    );
-    // 绘制颜色块
-    ctx.fillStyle = legend.fill;
-    ctx.fillRect(
-      x + (labW / 3) * 2,
-      y + index * lineHeight,
-      30,
-      lineHeight
-    );
+    if (legend.scS) {
+      ctx.fillStyle = "black";
+      ctx.fillText(legend.scS, x, y + index * lineHeight + lineHeight / 2);
+      // 绘制颜色块
+      ctx.fillStyle = legend.fill;
+      ctx.fillRect(
+        x + (labW / 3) * 2,
+        y + index * lineHeight,
+        30,
+        lineHeight
+      );
+    } else {
+      ctx.fillStyle = "black";
+      let text = `${legend.name}:${legend.value}${legend.unit}`;
+      ctx.fillText(text, x, y + index * lineHeight + lineHeight / 2);
+    }
   });
+}
+
+/**
+*wms数据查询计算用户坐标应该减去的差值
+*/
+function getZoomBbox(zoom) {
+  let level0 = 142.03125
+  let box = level0 / Math.pow(2, zoom)
+  box = box / 2
+  return box
+}
+
+/**
+*根据用户点击的坐标计算 bbox参数
+*/
+export function bbox(latlng, zoom) {
+  let box = getZoomBbox(zoom)
+  let boxMin = {
+    lat: latlng.lat - box,
+    lng: latlng.lng - box
+  }
+  let boxMax = {
+    lat: latlng.lat + box,
+    lng: latlng.lng + box
+  }
+  // console.table({zoom,box,latlng,boxMin, boxMax })
+  return `${boxMin.lng},${boxMin.lat},${boxMax.lng},${boxMax.lat}`
 }

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.js


+ 96 - 71
src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.vue

@@ -76,24 +76,26 @@
                         </el-col>
                       </el-row>
                       <el-row>
-                        <el-col :span="12">
+                        <el-col :span="8">
                           <el-button v-if="itemModel.AnalysisStatus == '完成'" size="mini" type="primary">{{
                             itemModel.AnalysisStatus }}</el-button>
                           <el-button v-if="itemModel.AnalysisStatus == '正在分析'" size="mini" type="success">{{
                             itemModel.AnalysisStatus }}</el-button>
                           <el-button v-if="itemModel.AnalysisStatus == '异常'" size="mini" type="danger">{{
                             itemModel.AnalysisStatus }}</el-button>
-                          <el-button v-if="itemModel.AnalysisStatus == '异常'" size="mini" type="danger">{{
-                            itemModel.AnalysisStatus }}</el-button>
                         </el-col>
                         <el-col :span="12">
-                          <div style="float: right">
+                           <div ><!--style="float: right" -->
                             <!-- <el-button size="mini" type="default">日志</el-button> -->
                             <el-button size="mini" type="default"
                               @click="openAnalyzeResults(itemModel.id)">结果</el-button>
                             <el-button size="mini" type="default" @click="handleGetBG(itemModel.id)">报告</el-button>
                           </div>
                         </el-col>
+                        <el-col :span="4">
+                          <el-button size="mini" type="warning"
+                            @click="deleteAnalyzeResults(itemModel.id)">删除</el-button>
+                        </el-col>
                       </el-row>
                     </el-card>
                   </el-col>
@@ -122,6 +124,7 @@ import BenchmarkLandPrice from "./BenchmarkLandPrice.js";
 import {
   cartesian3ToWGS84,
   mapQuery,
+  mapanalyze,
   flatten,
   mercator2lonLat,
   undergroundMode,
@@ -135,7 +138,7 @@ import {
   midpoint,
   difference,
 } from "@turf/turf";
-import { getJZDJWord, listBenchmarkLandPrices, addBenchmarkLandPrices, updateBenchmarkLandPrices, addZtBenchmarkLandPriceResults, getBenchmarkLandPrices, listZtBenchmarkLandPriceResults, getAnalyseResult } from "@/api/zt/ztApi.js";
+import { getJZDJWord, listBenchmarkLandPrices, addBenchmarkLandPrices, updateBenchmarkLandPrices, addZtBenchmarkLandPriceResults, getBenchmarkLandPrices, listZtBenchmarkLandPriceResults, getAnalyseResult, delBenchmarkLandPrices } from "@/api/zt/ztApi.js";
 let handlerPolygon; var polygonEntity = null;
 export default {
   data() {
@@ -349,7 +352,7 @@ export default {
       that.loading = true;
       this.$refs[formName].validate(async (valid) => {
         if (valid) {
-          var area = that.getRegionArea() / 666.66;
+          var area = await that.getRegionArea() / 666.66;
           if (area > 3000) {
             this.clear();
             that.loading = false;
@@ -510,7 +513,7 @@ export default {
       viewer.flyTo(polygonEntity)
     },
     //范围面积
-    getRegionArea() {
+    async getRegionArea() {
       debugger
       var points1 = this.form.ProjectScope;
       var parts1 = [];
@@ -520,9 +523,31 @@ export default {
       }
       poly1 = polygon([parts1]);
       var textarea = area(poly1) * window.earthRadius;
-      return textarea;
+return textarea;
+      // let sd = { point2Ds: JSON.stringify(points1), unit: 'METER', prjCoordSys: { epsgcode: 4326 } };
+      // let data = await mapanalyze(window.supermapIServerUrl + '/iserver/services/geometry/restjsr/v1/geometry/area.rjson', sd);
+      // if (data) {
+      //   return data.area;
+      // } else {
+      //   return 0
+      // }
+
     },
 
+    /**
+     * 删除基准地价分析结果
+     * @param BenchmarkLandPriceid 基准地价id
+     */
+    async deleteAnalyzeResults(BenchmarkLandPriceid) {
+      let data = await delBenchmarkLandPrices(BenchmarkLandPriceid);
+      if (data.code == 200) {
+        this.$message({
+          message: "删除成功",
+          type: "success",
+        });
+      }
+      this.init();
+    },
     /**
      *  打开分析结果弹窗
      * @param BenchmarkLandPrice 基准地价信息
@@ -722,69 +747,69 @@ export default {
       }
 
     },
-    /**
-     * 与已有的规划地块比较看是否包含
-     * @param points
-     */
-    calculateBooleanContains(points) {
-      let DataPs = points.map((item) => {
-        let xyz = cartesian3ToWGS84(item);
-        return [xyz.lng, xyz.lat];
-      });
-      if (DataPs.length > 0) {
-        if (
-          JSON.stringify(DataPs[0]) != JSON.stringify(DataPs[DataPs.length - 1])
-        ) {
-          DataPs.push(DataPs[0]);
-        }
-        //绘制的图形边界
-        let polygonPs = polygon([DataPs]);
-        //规划地块的范围
-        for (let index = 0; index < this.LayerData.GHDKData.length; index++) {
-          const geometry = this.LayerData.GHDKData[index].geometry;
-
-          let point3ds = [];
-          let pointholes = [];
-          let startindex = 0;
-          for (let index = 0; index < geometry.parts.length; index++) {
-            let thisps = [];
-            const endindex = startindex + geometry.parts[index];
-            let geometryPoints = geometry.points.slice(startindex, endindex);
-            for (
-              let pointindex = 0;
-              pointindex < geometryPoints.length;
-              pointindex++
-            ) {
-              const point = geometryPoints[pointindex];
-              thisps.push([point.x, point.y]);
-            }
-            if (geometry.partTopo[index] === 1) {
-              point3ds.push(thisps);
-            } else {
-              pointholes.push(thisps);
-            }
-
-            startindex = endindex;
-          }
-
-          // 主多边形
-          var mainPolygon = polygon(point3ds);
-
-          // 岛洞多边形
-          var holePolygon = polygon(pointholes);
-
-          // 计算差集 得到有导洞的图形
-          var getdifference = difference(mainPolygon, holePolygon);
-          let areaPs = booleanContains(getdifference, polygonPs);
-          if (areaPs) {
-            return true;
-          }
-        }
-        return false;
-      } else {
-        return false;
-      }
-    },
+    // /**
+    //  * 与已有的规划地块比较看是否包含
+    //  * @param points
+    //  */
+    // calculateBooleanContains(points) {
+    //   let DataPs = points.map((item) => {
+    //     let xyz = cartesian3ToWGS84(item);
+    //     return [xyz.lng, xyz.lat];
+    //   });
+    //   if (DataPs.length > 0) {
+    //     if (
+    //       JSON.stringify(DataPs[0]) != JSON.stringify(DataPs[DataPs.length - 1])
+    //     ) {
+    //       DataPs.push(DataPs[0]);
+    //     }
+    //     //绘制的图形边界
+    //     let polygonPs = polygon([DataPs]);
+    //     //规划地块的范围
+    //     for (let index = 0; index < this.LayerData.GHDKData.length; index++) {
+    //       const geometry = this.LayerData.GHDKData[index].geometry;
+
+    //       let point3ds = [];
+    //       let pointholes = [];
+    //       let startindex = 0;
+    //       for (let index = 0; index < geometry.parts.length; index++) {
+    //         let thisps = [];
+    //         const endindex = startindex + geometry.parts[index];
+    //         let geometryPoints = geometry.points.slice(startindex, endindex);
+    //         for (
+    //           let pointindex = 0;
+    //           pointindex < geometryPoints.length;
+    //           pointindex++
+    //         ) {
+    //           const point = geometryPoints[pointindex];
+    //           thisps.push([point.x, point.y]);
+    //         }
+    //         if (geometry.partTopo[index] === 1) {
+    //           point3ds.push(thisps);
+    //         } else {
+    //           pointholes.push(thisps);
+    //         }
+
+    //         startindex = endindex;
+    //       }
+
+    //       // 主多边形
+    //       var mainPolygon = polygon(point3ds);
+
+    //       // 岛洞多边形
+    //       var holePolygon = polygon(pointholes);
+
+    //       // 计算差集 得到有导洞的图形
+    //       var getdifference = difference(mainPolygon, holePolygon);
+    //       let areaPs = booleanContains(getdifference, polygonPs);
+    //       if (areaPs) {
+    //         return true;
+    //       }
+    //     }
+    //     return false;
+    //   } else {
+    //     return false;
+    //   }
+    // },
 
     clearGHDK() {
       //删除规划地块图层

+ 44 - 16
src/views/ConstructionApplication3D/Demolition/CQSetInfo.vue

@@ -337,15 +337,32 @@ export default {
      * 保存修改
      */
     save() {
-      if (this.bcbz == "") {
-        this.$layer.alert("请选择补偿标准");
+      var that = this;
+      if (that.bcbz == "") {
+        that.$layer.alert("请选择补偿标准");
         return;
       }
+
       debugger;
-      var index = window.ZSBC.CQBCList.findIndex((t) => t.value == this.bcbz);
-      if (index > -1) {
-        window.ZSBC.CQBCList[index] = this.curBCBZ;
-        this.$layer.alert("保存完成");
+      if (window.isUseDB) {
+        var item = {
+          id: that.curBCBZ.id,
+          name: that.curBCBZ.name
+        }
+        updateCqBcbz(item).then((res) => {
+          if (res)
+            that.$layer.alert("保存完成");
+
+        }).catch((err) => {
+          console.log(err)
+        })
+      }
+      else {
+        var index = window.ZSBC.CQBCList.findIndex((t) => t.value == this.bcbz);
+        if (index > -1) {
+          window.ZSBC.CQBCList[index] = this.curBCBZ;
+          this.$layer.alert("保存完成");
+        }
       }
     },
     /***
@@ -377,14 +394,25 @@ export default {
     saveData() {
       debugger;
       var val = (window.ZSBC.CQBCList.length + 1).toString();
+      var that=this;
       var newBCBZ = {
-        label: this.ruleForm.name,
-        value: val,
-        BCBZ: this.curBCBZ.BCBZ,
-      };
-      window.ZSBC.CQBCList.push(newBCBZ);
-      this.bcbzList = window.ZSBC.CQBCList;
-      this.bcbz = val;
+          id: val,
+          name: that.ruleForm.name,
+          bcbz: that.curBCBZ.bcbz,
+        };
+      if (window.isUseDB) {
+        addCqBcbz(newBCBZ).then((res)=>{
+          if(res)
+          that.$layer.alert("保存完成");
+        }).catch((err)=>{
+          console.log(err)
+        })
+      }
+      else {
+        window.ZSBC.CQBCList.push(newBCBZ);
+        that.bcbzList = window.ZSBC.CQBCList;
+        that.bcbz = val;
+      }
     },
     /**
      * 编辑按钮
@@ -400,10 +428,10 @@ export default {
       this.$layer.confirm("确定要删除吗?", {}, function () {
         delCqBcbzItem([row.id]).then((res) => {
           if (res)
-          this.$layer.alert("数据已删除!");
+            this.$layer.alert("数据已删除!");
         }).catch((err) => {
-            console.log(err)
-          })
+          console.log(err)
+        })
 
       }, function () {
         return

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 379 - 402
src/views/ConstructionApplication3D/Demolition/DemolitionList.vue


+ 16 - 14
src/views/ConstructionApplication3D/Demolition/ZDSetInfo.vue

@@ -220,7 +220,9 @@ export default {
 
           if (response && response.code == 200) {
             this.$layer.alert("保存完成");
+            that.getInitData();
           }
+         
         }).catch((err) => {
           console.log(err)
         });
@@ -259,23 +261,23 @@ export default {
     saveData() {
       debugger;
       var val = (window.ZSBC.ZDBCList.length + 1)
+      var that=this;
       var newBCBZ =
       {
-        "azbcbs": this.curBCBZ.azbcbs,
-        "azbcf": this.curBCBZ.azbcf,
-        "bchj": this.curBCBZ.bchj,
+        "azbcbs": that.curBCBZ.azbcbs,
+        "azbcf": that.curBCBZ.azbcf,
+        "bchj": that.curBCBZ.bchj,
         "id": val,
-        "name": this.ruleForm.name,
-        "tbcz": this.curBCBZ.tbcz,
-        "tdbcbs": this.curBCBZ.tdbcbs,
-        "tdbcf": this.curBCBZ.tdbcf,
-
+        "name": that.ruleForm.name,
+        "tbcz": that.curBCBZ.tbcz,
+        "tdbcbs": that.curBCBZ.tdbcbs,
+        "tdbcf": that.curBCBZ.tdbcf,
       };
       if (window.isUseDB) {
-        Model.id = null
         addZdBcbz(newBCBZ).then((response) => {
           if (response && response.code == 200) {
-            this.$layer.alert("保存完成");
+            that.$layer.alert("保存完成");
+            that.getInitData();
           }
         }).catch((err) => {
           console.log(err)
@@ -283,10 +285,10 @@ export default {
       }
       else {
         window.ZSBC.ZDBCList.push(newBCBZ);
-        this.bcbzList = JSON.parse(JSON.stringify(window.ZSBC.ZDBCList));
-        this.bcbz = val;
-        this.curBCBZ = this.bcbzList.find(t => t.id == this.bcbz);
-        this.$layer.alert("保存完成");
+        that.bcbzList = JSON.parse(JSON.stringify(window.ZSBC.ZDBCList));
+        that.bcbz = val;
+        that.curBCBZ = that.bcbzList.find(t => t.id == that.bcbz);
+        that.$layer.alert("保存完成");
       }
 
     },

+ 77 - 46
src/views/ConstructionApplication3D/NightscapeAnalysis/NightscapeAnalysis.vue

@@ -52,18 +52,19 @@
           <el-col :span="24" style="border: 1px solid #fff">
             <el-form
               ref="dgyform"
+              :rules="rules"
               :model="dgyform"
               label-width="80px"
               style="padding: 1rem 1rem 0rem 1rem"
             >
-              <el-form-item label="光源名称">
+              <el-form-item label="光源名称" prop="lightname">
                 <el-input
                   size="mini"
                   v-model="dgyform.lightname"
                   placeholder="请输入光源名称"
                 ></el-input>
               </el-form-item>
-              <el-form-item label="光源类型">
+              <el-form-item label="光源类型" prop="lighttype">
                 <el-select
                   size="mini"
                   v-model="dgyform.lighttype"
@@ -79,6 +80,8 @@
                   size="mini"
                   v-model="dgyform.color"
                 ></el-color-picker>
+              </el-form-item>
+              <el-form-item label="光源位置" prop="location">
                 <el-button size="mini" @click="addPoint"
                   >添加光源位置</el-button
                 >
@@ -133,7 +136,7 @@
               </el-form-item>
             </el-form>
             <div class="SaveCenter">
-              <el-button size="mini" type="primary" @click="onSubmit"
+              <el-button size="mini" type="primary" @click="onSubmit('dgyform')"
                 >保存</el-button
               >
               <el-button size="mini" @click="resetForm">取消</el-button>
@@ -184,6 +187,17 @@ export default {
         //   z: 0,
         // },
       },
+      rules: {
+        lightname: [
+          { required: true, message: "请输入光源名称", trigger: "blur" },
+        ],
+        lighttype: [
+          { required: true, message: "请输入光源类型", trigger: "blur" },
+        ],
+        // location: [
+        //   { required: true, message: "请绘制光源位置", trigger: "blur" },
+        // ],
+      },
     };
   },
   props: {
@@ -267,51 +281,64 @@ export default {
       });
     },
 
-    async onSubmit() {
-      //更新
-      if (this.dgyform.id) {
-        // let gydata = this.gyTableData.find((c) => c.id == this.dgyform.id);
-        // let data = JSON.parse(JSON.stringify(this.dgyform));
-        // gydata.lightname = data.lightname;
-        // gydata.color = data.color;
-        // gydata.cutoffdistance = data.cutoffdistance;
-        // gydata.decay = data.decay;
-        // gydata.intensity = data.intensity;
-        // gydata.location = data.location;
-        // gydata.LightSource = this.dgyform.LightSource;
-        this.dgyform.location = JSON.stringify(this.dgyform.location);
-        var rownum = await updateZtLightList(this.dgyform);
-        this.resetForm();
-        if (rownum.code == 200) {
-          this.$message({
-            message: "修改成功",
-            type: "success",
-          });
-          //更新列表及光源
-          this.getModelLightData();
-        }
+    async onSubmit(formName) {
+      if (!this.dgyform.location || !this.dgyform.location.x) {
+        this.$message({
+          message: "请点击添加光源位置按钮添加光源",
+          type: "warning",
+        });
+        return;
       }
-      //添加
-      else {
-        debugger;
-        this.dgyform.id = uuidv4();
-        // let data = JSON.parse(JSON.stringify(this.dgyform));
-        // data.LightSource = this.dgyform.LightSource;
-        // this.gyTableData.push(this.dgyform);
-        this.dgyform.location = JSON.stringify(this.dgyform.location);
-        this.dgyform.isModelAssociated = true;
-        this.dgyform.modelId = this.info.id;
-        var rownum = await addZtLightList(this.dgyform);
-        this.resetForm();
-        if (rownum.code == 200) {
-          this.$message({
-            message: "添加成功",
-            type: "success",
-          });
-          //更新列表及光源
-          this.getModelLightData();
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          //更新
+          if (this.dgyform.id) {
+            // let gydata = this.gyTableData.find((c) => c.id == this.dgyform.id);
+            // let data = JSON.parse(JSON.stringify(this.dgyform));
+            // gydata.lightname = data.lightname;
+            // gydata.color = data.color;
+            // gydata.cutoffdistance = data.cutoffdistance;
+            // gydata.decay = data.decay;
+            // gydata.intensity = data.intensity;
+            // gydata.location = data.location;
+            // gydata.LightSource = this.dgyform.LightSource;
+            this.dgyform.location = JSON.stringify(this.dgyform.location);
+            var rownum = await updateZtLightList(this.dgyform);
+            this.resetForm();
+            if (rownum.code == 200) {
+              this.$message({
+                message: "修改成功",
+                type: "success",
+              });
+              //更新列表及光源
+              this.getModelLightData();
+            }
+          }
+          //添加
+          else {
+            debugger;
+            this.dgyform.id = uuidv4();
+            // let data = JSON.parse(JSON.stringify(this.dgyform));
+            // data.LightSource = this.dgyform.LightSource;
+            // this.gyTableData.push(this.dgyform);
+            this.dgyform.location = JSON.stringify(this.dgyform.location);
+            this.dgyform.isModelAssociated = true;
+            this.dgyform.modelId = this.info.id;
+            var rownum = await addZtLightList(this.dgyform);
+            this.resetForm();
+            if (rownum.code == 200) {
+              this.$message({
+                message: "添加成功",
+                type: "success",
+              });
+              //更新列表及光源
+              this.getModelLightData();
+            }
+          }
+        } else {
+          return false;
         }
-      }
+      });
 
       // this.clearLightSource(false);
     },
@@ -720,4 +747,8 @@ export default {
 .el-form-item {
   margin-bottom: 0;
 }
+.el-form-item /deep/.el-form-item__error {
+  line-height: 0 !important;
+  padding-top: 0px !important;
+}
 </style>

+ 13 - 10
src/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue

@@ -55,7 +55,7 @@
                       <el-input
                         v-model="row.rghszb"
                         size="small"
-                        @blur="handleSave(row, DKZBData.TableData)"
+                        @change="handleSave(row, DKZBData.TableData)"
                       ></el-input>
                     </template>
                   </el-table-column>
@@ -165,15 +165,18 @@ export default {
             YDMJrow.rgzbid = rgzbid;
             YDMJrow.rgzbName = "YDMJ";
           }
-          if (YDMJrow.kgyq && YDMJrow.rghszb) {
-            if (Number(YDMJrow.kgyq) >= Number(YDMJrow.rghszb)) {
-              YDMJrow.jl = true;
-            } else {
-              YDMJrow.jl = false;
-            }
-          } else {
-            YDMJrow.jl = null;
-          }
+
+          //20240911提出用地面积不进行合规性判断
+          YDMJrow.jl = null;
+          // if (YDMJrow.kgyq && YDMJrow.rghszb) {
+          //   if (Number(YDMJrow.kgyq) >= Number(YDMJrow.rghszb)) {
+          //     YDMJrow.jl = true;
+          //   } else {
+          //     YDMJrow.jl = false;
+          //   }
+          // } else {
+          //   YDMJrow.jl = null;
+          // }
 
           TableData.push(YDMJrow);
 

+ 169 - 6
src/views/ConstructionApplication3D/billboard/addBillboardPoject.vue

@@ -40,7 +40,11 @@
               >
             </el-col>
           </el-form-item> -->
-          <el-form-item label="模型地址" size="mini" prop="url">
+          <el-form-item label="是否报建" size="mini" prop="url">
+            <el-switch v-model="isbjmx" active-text="是" inactive-text="否">
+            </el-switch>
+          </el-form-item>
+          <el-form-item v-show="isbjmx" label="模型地址" size="mini" prop="url">
             <el-col :span="20">
               <el-input
                 size="mini"
@@ -49,7 +53,12 @@
               ></el-input>
             </el-col>
           </el-form-item>
-          <el-form-item label="模型数据地址" size="mini" prop="dataurl">
+          <el-form-item
+            v-show="isbjmx"
+            label="模型数据地址"
+            size="mini"
+            prop="dataurl"
+          >
             <el-col :span="20">
               <el-input
                 size="mini"
@@ -58,7 +67,12 @@
               ></el-input>
             </el-col>
           </el-form-item>
-          <el-form-item label="模型数据源" size="mini" prop="datasourcename">
+          <el-form-item
+            v-show="isbjmx"
+            label="模型数据源"
+            size="mini"
+            prop="datasourcename"
+          >
             <el-col :span="20">
               <el-input
                 size="mini"
@@ -67,7 +81,12 @@
               ></el-input>
             </el-col>
           </el-form-item>
-          <el-form-item label="模型数据集" size="mini" prop="datasetname">
+          <el-form-item
+            v-show="isbjmx"
+            label="模型数据集"
+            size="mini"
+            prop="datasetname"
+          >
             <el-col :span="20">
               <el-input
                 size="mini"
@@ -107,7 +126,10 @@ import {
   mercator2lonLat,
   undergroundMode,
 } from "@/utils/MapHelper/MapHelper.js";
-import { addZtBillboardInfoList } from "@/api/zt/ztApi.js";
+import {
+  addZtBillboardInfoList,
+  addBillboardModelLists,
+} from "@/api/zt/ztApi.js";
 export default {
   data() {
     return {
@@ -142,7 +164,7 @@ export default {
         //   { required: true, message: "请获取项目范围", trigger: "blur" },
         // ],
       },
-
+      isbjmx: false,
       //绘制事件
       handlerPolygon: null,
     };
@@ -180,10 +202,151 @@ export default {
       let that = this;
       this.$refs[formName].validate(async (valid) => {
         if (valid) {
+          if (that.isbjmx) {
+            if (
+              !that.form.url ||
+              !that.form.dataurl ||
+              !that.form.datasourcename ||
+              !that.form.datasetname
+            ) {
+              that.$message({
+                message: "请填写报建模型相关信息",
+                type: "warning",
+              });
+              return;
+            } else {
+            }
+          }
+
           that.form.id = uuidv4();
           // window.billboardInfoList.push(that.form);
           let result = await addZtBillboardInfoList(that.form);
           if (result.code) {
+            if (that.form.dataurl) {
+              let queryBySQLParameters = {
+                getFeatureMode: "SQL",
+                datasetNames: [that.form.datasourcename + ":" + "GGP"],
+                queryParameter: {
+                  attributeFilter: "1=1",
+                },
+                hasGeometry: "true",
+              };
+              let e = await mapQuery(
+                that.form.dataurl + "/featureResults.json?returnContent=true",
+                queryBySQLParameters
+              );
+              if (e && e.totalCount > 0) {
+                let featureDataList = [];
+                e.features.forEach((feature) => {
+                  let featureData = {
+                    id: uuidv4(),
+                    data: [],
+                    geometry: feature.geometry,
+                  };
+
+                  feature.fieldNames.forEach((fieldName, i) => {
+                    let Field = e.datasetInfos
+                      ? e.datasetInfos[0].fieldInfos.find(
+                          (c) =>
+                            c.name &&
+                            c.name.toUpperCase() == fieldName.toUpperCase() &&
+                            c.name.toUpperCase().indexOf("SM") == -1
+                        )
+                      : null;
+                    if (Field) {
+                      featureData.data.push({
+                        label: fieldName,
+                        labelCN: Field ? Field.caption : fieldName,
+                        value: feature.fieldValues[i],
+                      });
+                    }
+                  });
+                  featureDataList.push(featureData);
+                });
+                debugger;
+                let billboardModelList = [];
+                featureDataList.forEach((featureData) => {
+                  let billboardModel = {};
+                  billboardModel.id = uuidv4();
+                  billboardModel.billboardName = featureData.data.find(
+                    (c) => c.label == "MODELNAME"
+                  )
+                    ? featureData.data.find((c) => c.label == "MODELNAME").value
+                    : "";
+                  billboardModel.billboardType = featureData.data.find(
+                    (c) => c.label == "BILLBOARDTYPE"
+                  )
+                    ? featureData.data.find((c) => c.label == "BILLBOARDTYPE")
+                        .value
+                    : "";
+                  billboardModel.isAddModel = true;
+                  billboardModel.billboardInfoId = that.form.id;
+
+                  billboardModel.x = featureData.data.find(
+                    (c) => c.label == "X"
+                  )
+                    ? featureData.data.find((c) => c.label == "X").value
+                    : "";
+                  billboardModel.y = featureData.data.find(
+                    (c) => c.label == "Y"
+                  )
+                    ? featureData.data.find((c) => c.label == "Y").value
+                    : "";
+                  billboardModel.z = featureData.data.find(
+                    (c) => c.label == "Z"
+                  )
+                    ? featureData.data.find((c) => c.label == "Z").value
+                    : "";
+
+                  var billboardModelRule = JSON.parse(
+                    JSON.stringify(
+                      window.billboardModelRuleList.find(
+                        (c) => c.code == "bjModel"
+                      ).template
+                    )
+                  );
+                  this.selectbillboardModelRule =
+                    billboardModelRule.length > 0
+                      ? billboardModelRule[0]
+                      : null;
+                  var template = {
+                    ModelType: "bjModel",
+                    ...that.selectbillboardModelRule,
+                  };
+
+                  billboardModel.template = JSON.stringify(template);
+
+                  billboardModel.templateBottom = "{}";
+                  billboardModel.templateCentre = "{}";
+
+                  var xl = featureData.data.find((c) => c.label == "XL")
+                    ? featureData.data.find((c) => c.label == "XL").value
+                    : "";
+                  var yl = featureData.data.find((c) => c.label == "YL")
+                    ? featureData.data.find((c) => c.label == "YL").value
+                    : "";
+                  var zl = featureData.data.find((c) => c.label == "ZL")
+                    ? featureData.data.find((c) => c.label == "ZL").value
+                    : "";
+                  var templateTop = {
+                    x: billboardModel.x,
+                    y: billboardModel.y,
+                    z: billboardModel.z,
+                    xL: xl,
+                    yL: yl,
+                    zL: zl,
+                  };
+
+                  billboardModel.templateTop = JSON.stringify(templateTop);
+                  billboardModelList.push(billboardModel);
+                });
+
+                if (billboardModelList.length > 0) {
+                  await addBillboardModelLists(billboardModelList);
+                }
+              }
+            }
+
             that.$message({
               message: "添加成功",
               type: "success",

+ 87 - 74
src/views/ConstructionApplication3D/billboard/billboardDesign.vue

@@ -27,7 +27,7 @@
     <el-row>
       <div style="height: 90%">
         <el-row v-for="item in projects" :key="item.id">
-          <el-card class="box-card">
+          <el-card class="box-card card_body_style">
             <el-row>
               <span>{{ item.projectname }}</span></el-row
             >
@@ -43,8 +43,11 @@
                 ></i>
                 <a @click="billboarddetial(item)">详情</a>
               </el-col>
-              <!-- v-if="!item.dataurl" -->
-              <el-col class="con-col hover_style" style="cursor: pointer">
+              <el-col
+                class="con-col hover_style"
+                v-if="!item.dataurl"
+                style="cursor: pointer"
+              >
                 <i
                   style="font-size: 2rem"
                   class="el-icon-folder-add"
@@ -226,14 +229,14 @@ export default {
      * @param Mitem 模型实体
      */
     locationSingleModel(Mitem) {
-      let entitie = viewer.entities.getById("top_billboard_" + Mitem.id);
+      let entitie = viewer.entities.getById("pointBillboard_" + Mitem.id);
       if (entitie) {
         viewer.flyTo(entitie);
       } else {
         //渲染单个广告牌
         // if (billboardModel.id == Mitem.id) {
         this.DrawBillboard(Mitem);
-        let entitie = viewer.entities.getById("top_billboard_" + Mitem.id);
+        let entitie = viewer.entities.getById("pointBillboard_" + Mitem.id);
         viewer.flyTo(entitie);
         // }
       }
@@ -437,14 +440,6 @@ export default {
         billboardModel.y,
         billboardModel.z
       );
-      var orientation = Cesium.Transforms.headingPitchRollQuaternion(
-        newposition,
-        new Cesium.HeadingPitchRoll(
-          Cesium.Math.toRadians(billboardModel.rotateZ),
-          Cesium.Math.toRadians(billboardModel.rotateY),
-          Cesium.Math.toRadians(billboardModel.rotateX)
-        )
-      );
 
       if (billboardModel.template) {
         var imageurl = "../../../../static/ModelData/billboard/1.jpg";
@@ -452,11 +447,19 @@ export default {
         switch (billboardModel.template.ModelType) {
           //矩形广告
           case "rectangleBillboard":
+            var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+              newposition,
+              new Cesium.HeadingPitchRoll(
+                Cesium.Math.toRadians(billboardModel.rotateZ),
+                Cesium.Math.toRadians(billboardModel.rotateY),
+                Cesium.Math.toRadians(billboardModel.rotateX)
+              )
+            );
             //计算当前实体的xyz
             var p = Cesium.Cartesian3.fromDegrees(
-              billboardModel.templateTop.x,
-              billboardModel.templateTop.y,
-              billboardModel.templateTop.z
+              Number(billboardModel.templateTop.x),
+              Number(billboardModel.templateTop.y),
+              Number(billboardModel.templateTop.z)
             );
             var topentity = viewer.entities.add({
               id: "top_billboard_" + billboardModel.id,
@@ -468,9 +471,9 @@ export default {
                */
               box: {
                 dimensions: new Cesium.Cartesian3(
-                  billboardModel.templateTop.xL,
-                  billboardModel.templateTop.zL,
-                  billboardModel.templateTop.yL
+                  Number(billboardModel.templateTop.xL),
+                  Number(billboardModel.templateTop.zL),
+                  Number(billboardModel.templateTop.yL)
                 ),
                 show: true,
                 material: Cesium.Color.LIGHTGREEN,
@@ -482,6 +485,14 @@ export default {
             break;
           // 立杆型广告
           case "postsBillboard":
+            var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+              newposition,
+              new Cesium.HeadingPitchRoll(
+                Cesium.Math.toRadians(billboardModel.rotateZ),
+                Cesium.Math.toRadians(billboardModel.rotateY),
+                Cesium.Math.toRadians(billboardModel.rotateX)
+              )
+            );
             var c_p = Cesium.Cartesian3.fromDegrees(
               billboardModel.templateCentre.x,
               billboardModel.templateCentre.y,
@@ -516,9 +527,9 @@ export default {
             //计算当前实体的xyz
 
             var t_p = Cesium.Cartesian3.fromDegrees(
-              billboardModel.templateTop.x,
-              billboardModel.templateTop.y,
-              billboardModel.templateTop.z
+              Number(billboardModel.templateTop.x),
+              Number(billboardModel.templateTop.y),
+              Number(billboardModel.templateTop.z)
             );
             var topentity = viewer.entities.add({
               id: "top_billboard_" + billboardModel.id,
@@ -530,9 +541,9 @@ export default {
                */
               box: {
                 dimensions: new Cesium.Cartesian3(
-                  billboardModel.templateTop.xL,
-                  billboardModel.templateTop.zL,
-                  billboardModel.templateTop.yL
+                  Number(billboardModel.templateTop.xL),
+                  Number(billboardModel.templateTop.zL),
+                  Number(billboardModel.templateTop.yL)
                 ),
                 material: Cesium.Color.LIGHTGREEN,
                 // outline: false,
@@ -546,6 +557,14 @@ export default {
             break;
           //底座型立杆广告
           case "ColumnWithaseBillboard":
+            var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+              newposition,
+              new Cesium.HeadingPitchRoll(
+                Cesium.Math.toRadians(billboardModel.rotateZ),
+                Cesium.Math.toRadians(billboardModel.rotateY),
+                Cesium.Math.toRadians(billboardModel.rotateX)
+              )
+            );
             var b_p = Cesium.Cartesian3.fromDegrees(
               billboardModel.templateBottom.x,
               billboardModel.templateBottom.y,
@@ -613,9 +632,9 @@ export default {
             entityList.push(Centreentity);
 
             var t_p = Cesium.Cartesian3.fromDegrees(
-              billboardModel.templateTop.x,
-              billboardModel.templateTop.y,
-              billboardModel.templateTop.z
+              Number(billboardModel.templateTop.x),
+              Number(billboardModel.templateTop.y),
+              Number(billboardModel.templateTop.z)
             );
 
             var topentity = viewer.entities.add({
@@ -628,9 +647,9 @@ export default {
                */
               box: {
                 dimensions: new Cesium.Cartesian3(
-                  billboardModel.templateTop.xL,
-                  billboardModel.templateTop.zL,
-                  billboardModel.templateTop.yL
+                  Number(billboardModel.templateTop.xL),
+                  Number(billboardModel.templateTop.zL),
+                  Number(billboardModel.templateTop.yL)
                 ),
                 material: Cesium.Color.LIGHTGREEN,
                 // outline: false,
@@ -644,10 +663,18 @@ export default {
             break;
           //实物型广告(模型型)
           case "ModelBillboard":
+            var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+              newposition,
+              new Cesium.HeadingPitchRoll(
+                Cesium.Math.toRadians(billboardModel.rotateZ),
+                Cesium.Math.toRadians(billboardModel.rotateY),
+                Cesium.Math.toRadians(billboardModel.rotateX)
+              )
+            );
             var p = Cesium.Cartesian3.fromDegrees(
-              billboardModel.templateTop.x,
-              billboardModel.templateTop.y,
-              billboardModel.templateTop.z
+              Number(billboardModel.templateTop.x),
+              Number(billboardModel.templateTop.y),
+              Number(billboardModel.templateTop.z)
             );
             var url = billboardModel.template.templateTopUrl || modelurl;
             var entity = viewer.entities.add({
@@ -668,10 +695,18 @@ export default {
             break;
           //图片型广告
           case "imgBillboard":
+            var orientation = Cesium.Transforms.headingPitchRollQuaternion(
+              newposition,
+              new Cesium.HeadingPitchRoll(
+                Cesium.Math.toRadians(billboardModel.rotateZ),
+                Cesium.Math.toRadians(billboardModel.rotateY),
+                Cesium.Math.toRadians(billboardModel.rotateX)
+              )
+            );
             var p = Cesium.Cartesian3.fromDegrees(
-              billboardModel.templateTop.x,
-              billboardModel.templateTop.y,
-              billboardModel.templateTop.z
+              Number(billboardModel.templateTop.x),
+              Number(billboardModel.templateTop.y),
+              Number(billboardModel.templateTop.z)
             );
             var url = billboardModel.template.templateTopUrl || imageurl;
             var entity = viewer.entities.add({
@@ -684,57 +719,33 @@ export default {
                */
               billboard: {
                 image: url,
-                width: billboardModel.templateTop.xL,
-                height: billboardModel.templateTop.yL,
-                rotation: billboardModel.rotateX,
+                width: Number(billboardModel.templateTop.xL),
+                height: Number(billboardModel.templateTop.yL),
+                rotation: Number(billboardModel.rotateX),
                 sizeInMeters: true,
               },
               orientation: orientation,
             });
             entityList.push(entity);
             break;
-          default:
-            //计算当前实体的xyz
-            var p = Cesium.Cartesian3.fromDegrees(
-              billboardModel.templateTop.x,
-              billboardModel.templateTop.y,
-              billboardModel.templateTop.z
-            );
-            var topentity = viewer.entities.add({
-              id: "top_billboard_" + billboardModel.id,
-              name: "gltf",
-              show: true,
-              position: p,
-              /**
-               * 长方体
-               */
-              box: {
-                dimensions: new Cesium.Cartesian3(
-                  billboardModel.templateTop.xL,
-                  billboardModel.templateTop.zL,
-                  billboardModel.templateTop.yL
-                ),
-                show: true,
-                material: Cesium.Color.LIGHTGREEN,
-              },
-              orientation: orientation,
-            });
-            entityList.push(topentity);
-            break;
         }
 
         var h = 0;
         if (billboardModel.templateTop.yL) {
-          h = billboardModel.templateTop.yL / 2;
+          h = Number(billboardModel.templateTop.yL) / 2;
         }
-
+        viewer.entities.removeById("pointBillboard_" + billboardModel.id);
+        lodash.remove(
+          entityList,
+          (entity) => entity.id === "pointBillboard_" + billboardModel.id
+        );
         const point = viewer.entities.add({
           id: "pointBillboard_" + billboardModel.id,
           //点
           position: Cesium.Cartesian3.fromDegrees(
-            billboardModel.templateTop.x,
-            billboardModel.templateTop.y,
-            billboardModel.templateTop.z + h
+            Number(billboardModel.templateTop.x),
+            Number(billboardModel.templateTop.y),
+            Number(billboardModel.templateTop.z) + h
           ),
           label: {
             text: billboardModel.billboardName, //描述内容
@@ -758,6 +769,7 @@ export default {
             heightReference: Cesium.HeightReference.NONE,
           },
         });
+        entityList.push(point);
       }
 
       // if (billboardModel.isAddModel) {
@@ -928,6 +940,7 @@ export default {
      * @param info
      */
     intoModel(info) {
+      let that = this;
       if (info.url && this.selectBillardId != info.id) {
         this.selectBillardId = info.id;
         this.thislayers.forEach((element) => {
@@ -942,7 +955,7 @@ export default {
                 that.thislayers.push(element.name);
               });
             });
-            this.yp(info);
+            that.yp(info);
           } catch (error) {
             console.log(error);
           }

+ 1 - 48
src/views/ConstructionApplication3D/billboard/billboarddetail.vue

@@ -42,6 +42,7 @@ import {
   undergroundMode,
 } from "@/utils/MapHelper/MapHelper.js";
 import { listBillboardModelList } from "@/api/zt/ztApi.js";
+import { v4 as uuidv4 } from "uuid";
 export default {
   data() {
     return {
@@ -79,59 +80,11 @@ export default {
     async init() {
       let that = this;
       debugger;
-      // if (that.info.projectInfo.dataurl) {
-      //   let queryBySQLParameters = {
-      //     getFeatureMode: "SQL",
-      //     datasetNames: [that.info.projectInfo.datasourcename + ":" + "GGP"],
-      //     queryParameter: {
-      //       attributeFilter: "1=1",
-      //     },
-      //     hasGeometry: "true",
-      //   };
-      //   let e = await mapQuery(
-      //     that.info.projectInfo.dataurl +
-      //       "/featureResults.json?returnContent=true",
-      //     queryBySQLParameters
-      //   );
-      //   if (e && e.totalCount > 0) {
-      //     e.features.forEach((feature) => {
-      //       let featureData = {
-      //         id: uuidv4(),
-      //         data: [],
-      //         geometry: feature.geometry,
-      //       };
-
-      //       feature.fieldNames.forEach((fieldName, i) => {
-      //         let Field = e.datasetInfos
-      //           ? e.datasetInfos[0].fieldInfos.find(
-      //               (c) =>
-      //                 c.name &&
-      //                 c.name.toUpperCase() == fieldName.toUpperCase() &&
-      //                 c.name.toUpperCase().indexOf("SM") == -1
-      //             )
-      //           : null;
-      //         if (Field) {
-      //           featureData.data.push({
-      //             label: fieldName,
-      //             labelCN: Field ? Field.caption : fieldName,
-      //             value: feature.fieldValues[i],
-      //           });
-      //         }
-      //       });
-      //       featureDataList.push(featureData);
-      //     });
-      //     debugger;
-      //     this.billboardModelList = [];
-      //   } else {
-      //     this.billboardModelList = [];
-      //   }
-      // } else {
       let data = await listBillboardModelList({
         billboardInfoId: that.info.projectInfo.id,
       });
       debugger;
       this.billboardModelList = data.rows;
-      // }
 
       // this.billboardModelList = window.billboardModelList.filter(
       //   (c) => c.billboardInfoId == that.info.projectInfo.id

+ 30 - 12
src/views/ConstructionApplication3D/projectInfo/addProjectInfo.vue

@@ -100,7 +100,7 @@
         </el-form>
         <div class="SaveCenter">
           <el-button type="primary" @click="submitForm('ruleForm')"
-            >添加</el-button
+            >完成</el-button
           >
           <el-button @click="resetForm('ruleForm')">重置</el-button>
         </div>
@@ -111,7 +111,10 @@
 
 <script>
 import { v4 as uuidv4 } from "uuid";
-import { addProjectinformation } from "@/api/zt/ztApi.js";
+import {
+  addProjectinformation,
+  updateProjectinformation,
+} from "@/api/zt/ztApi.js";
 export default {
   data() {
     return {
@@ -170,23 +173,38 @@ export default {
   },
   computed: {},
   mounted() {
+    debugger;
     // this.init();
+    if (this.info) {
+      this.form = this.info;
+    }
   },
   methods: {
     submitForm(formName) {
       let that = this;
       this.$refs[formName].validate(async (valid) => {
         if (valid) {
-          that.form.id = uuidv4();
-          that.form.meetingprogress = "0";
-          // window.projectinformation.push(that.form);
-          let result = await addProjectinformation(that.form);
-          if (result.code) {
-            that.$message({
-              message: "添加成功",
-              type: "success",
-            });
-            that.$layer.close(that.layerid);
+          if (this.info) {
+            let result = await updateProjectinformation(that.form);
+            if (result.code) {
+              that.$message({
+                message: "修改成功",
+                type: "success",
+              });
+              that.$layer.close(that.layerid);
+            }
+          } else {
+            that.form.id = uuidv4();
+            that.form.meetingprogress = "0";
+            // window.projectinformation.push(that.form);
+            let result = await addProjectinformation(that.form);
+            if (result.code) {
+              that.$message({
+                message: "添加成功",
+                type: "success",
+              });
+              that.$layer.close(that.layerid);
+            }
           }
           debugger;
           // that.lyoption.cancel();

+ 6 - 8
src/views/ConstructionApplication3D/projectManagement/projectManagement.vue

@@ -1154,7 +1154,7 @@ export default {
           data: { info }, //props
         },
         offset: [left, top], //left top
-        area: ["300px", "250px"],
+        area: ["300px", "450px"],
         title: "天际线分析",
         maxmin: false,
         shade: false, //是否显示遮罩
@@ -2659,20 +2659,18 @@ export default {
             (t) => t.landNo == item.KG_Data.DKBM
           );
           if (land == null) continue;
-          tableDataList[i].FA_Data.JZMJ = land.jrmj;
+          tableDataList[i].FA_Data.JZMJ = land.mj;
           tableDataList[i].FA_Data.JRJZMJ = land.jrmj;
           debugger;
           //20240814改为使用建筑面积计算容积率
+          // tableDataList[i].FA_Data.RJL = (land.jrmj / item.FA_Data.YDMJ).toFixed(2);
           tableDataList[i].FA_Data.RJL = (
-            land.jrmj / item.FA_Data.YDMJ
+            (land.mj - land.dxjzmj) /
+            item.FA_Data.YDMJ
           ).toFixed(2);
-          // tableDataList[i].FA_Data.RJL = (
-          //   (land.mj - land.dxjzmj) /
-          //   item.FA_Data.YDMJ
-          // ).toFixed(2);
           //开发商提交的方案文档指标
           debugger;
-          tableDataList[i].TJFA_Data.JZMJ = land.fajrmj;
+          tableDataList[i].TJFA_Data.JZMJ = land.famj;
           tableDataList[i].TJFA_Data.JRJZMJ = land.fajrmj;
           tableDataList[i].infoData = land;
         }

+ 17 - 155
src/views/ConstructionApplication3D/skylineAnalysis/TJXResult.vue

@@ -1,14 +1,15 @@
 <template>
     <div style="margin: 1rem; padding: 0.5rem; width: 99%;height: 99%;">
         <!-- <img :src="imageData.data" style="height: auto; width: auto;" />"> -->
-        <canvas id="mycan1" ref="mycan1" width="907" height="350" style="background-color: azure;display: none;"></canvas>
-        <canvas id="mycan2" ref="mycan2" width="907" height="350" style="height: 100%;height: 100%;"></canvas>
         <el-button type="primary" @click="download">下载</el-button>
-        <!-- <img id="img"  ref="img" style=" width: 100%;height: :100%;"/> -->
+        <br>
+        <canvas id="mycan1" ref="mycan1" style="height: 100%;height: 100%;background-color: transparent;"></canvas>
+        <!-- <canvas id="mycan2" ref="mycan2" width="907" height="350" style="height: 100%;height: 100%;"></canvas> -->
+
     </div>
 </template>
 <script>
-
+import skylineExecute from './skylineExecute.js'
 export default {
     props: ['imageData'],
     data() {
@@ -22,161 +23,19 @@ export default {
         init() {
             var that = this;
 
-            var image = new Image();
+            //最小高程
             var minH = that.imageData.minH;
+            //绘制的长度和宽度
+            var viewW = that.imageData.width;
+            var viewH = that.imageData.height;
 
-            image.src = this.imageData.data;
-            image.onload = function () {
-                var canvas1 = that.$refs["mycan1"]
-                var canvas2 = that.$refs["mycan2"]
-                var context = canvas2.getContext("2d")
-                canvas2.width = image.width;
-                canvas2.height = image.height;
-                // var dW = image.width
-                // var dh = image.height
-
-                // var xRate = dW / that.imageData.width;
-                // var yRate = dh / that.imageData.height;
-                // var clipH = minH * yRate
-                // var scale = that.imageData.height / (that.imageData.height - minH)
-
-                // var drawScaleY = 350 / image.height;
-                // yRate = canvas2.height / that.imageData.height;
-                // scale = canvas2.height / (canvas2.height - clipH * drawScaleY)
-                context.drawImage(image, 0, 0);// image.width, image.height, 0, 0, canvas2.width, canvas2.height
-                // context.fillStyle = '#fff';
-                // context.fillRect(0, 0, canvas2.width, canvas2.height);
-                // 将canvas的透明背景设置成白色
-                var imageData = context.getImageData(0, 0, canvas2.width, canvas2.height);
-                // 遍历像素点,将彩色像素点转换为黑白像素点
-                var data = imageData.data
-                for (var i = 0; i < data.length; i += 4) {
-                    debugger
-                    var r = data[i];
-                    var g = data[i + 1];
-                    var b = data[i + 2];
-                    // // var a = imageData.data[i + 3];
-                    // if (r == 0 && b == 0 && g == 0) {
-                    //     imageData.data[i] = 132;
-                    //     imageData.data[i + 1] = 180;
-                    //     imageData.data[i + 2] = 237;
-                    // }
-                    if (r + b + g == 0)
-                        data[i + 3] = 0;
-                }
-                context.putImageData(imageData, 0, 0)
-                context.strokeStyle = "rgba(255,0,0,1)";
-                context.lineWidth = 2
-                context.strokeRect(0, 0, canvas2.width, canvas2.height)
-                var xRate = canvas2.width / that.imageData.width;
-                var  yRate = canvas2.height / (that.imageData.height);
-                var dataX = parseInt(that.imageData.width / 50) * 10
-                for (var i = 0; i <= that.imageData.width; i += dataX) {
-                    context.font = "30px serif";
-                    context.strokeText(i, i * xRate, 20);
-                    context.strokeText(i, i * xRate, canvas2.height);
-                }
-                var datay = parseInt(that.imageData.height / 50) * 10
-                for (var j = datay; j <= that.imageData.height; j += datay) {
-                    context.font = "30px serif";
-                    context.strokeText(j, 10, canvas2.height - j * yRate);
-                    context.strokeText(j, canvas2.width - 50, canvas2.height - j * yRate);
-                }
-                //context.scale(1, scale)
-            }
-            // image.onload = function () {
-            //     var canvas1 = that.$refs["mycan1"]
-            //     var canvas2 = that.$refs["mycan2"]
-            //     var ctx = canvas1.getContext("2d");
-
-            //     // canvas1.height = image.height;
-            //     // canvas1.width = image.width;
-            //     var xRate = canvas1.width / that.imageData.width;
-            //     var yRate = canvas1.height / that.imageData.height;
-
-            //     var clipH = minH * yRate;
-
-            //     // canvas1.height -= clipH;
-
-            //     ctx.drawImage(image, 0, 0, image.width, image.height , 0, 0, canvas1.width, canvas1.height);
-
-            //     // var canvasData = ctx.getImageData(0, 0, canvas1.width, canvas1.height); //读取图片数据
-            //     // var lOffset = canvasData.width;
-            //     // var rOffset = 0;
-            //     // var tOffset = canvasData.height;
-            //     // var bOffset = 0;
-            //     // for (var i = 0; i < image.width; i++) {
-            //     //     for (var j = 0; j < image.height; j++) {
-            //     //         // var pos = (i + canvas1.width * j) * 4
-            //     //         var pos = (i + image.width * j) * 4
-            //     //             if (canvasData.data[pos] == 0|| canvasData.data[pos + 1] == 0 || canvasData.data[pos + 2] == 0 || canvasData.data[pos + 3] ==0) {
-            //     //             bOffset = Math.max(j, bOffset); // 找到有色彩的最下端
-            //     //             rOffset = Math.max(i, rOffset); // 找到有色彩的最右端
-            //     //             tOffset = Math.min(j, tOffset); // 找到有色彩的最上端
-            //     //             lOffset = Math.min(i, lOffset); // 找到有色彩的最左端
-            //     //         }
-            //     //     }
-            //     // }
-            //     // for(var j=0;j<image.height;j++)
-            //     // {
-            //     //     for(var i=0;i<image.width;i++)
-            //     //     {
-
-            //     //     }
-            //     // }
+            var skyRgb = that.imageData.rgb
+            var canvas1 = that.$refs["mycan1"]
 
-
-            //     // lOffset++;
-            //     // rOffset++;
-            //     // tOffset++;
-            //     // bOffset++;
-
-            //     // canvas2.width = rOffset - lOffset;
-            //     // canvas2.height = bOffset - tOffset;
-
-            //     // xRate = canvas2.width / that.imageData.width;
-            //     // yRate = canvas2.height / that.imageData.height;
-            //     // debugger
-            //     // var context = canvas2.getContext("2d");
-            //     // var drawScaleY = canvas2.height / canvas1.height;
-
-
-            //     // // context.putImageData(canvasData, lOffset, tOffset, canvas1.width, canvas1.height, 0, 0, canvas2.width, canvas2.height);//绘制
-            //     // context.putImageData(canvasData, lOffset, tOffset)
-            //     // var canvasData2 = context.getImageData(0, 0, canvas2.width, canvas2.height);
-
-            //     // // // 遍历像素点,将彩色像素点转换为黑白像素点
-            //     // // for (var i = 0; i < canvasData2.data.length; i += 4) {
-            //     // //     var r = canvasData2.data[i];
-            //     // //     var g = canvasData2.data[i + 1];
-            //     // //     var b = canvasData2.data[i + 2];
-            //     // //     // var a = imageData.data[i + 3];
-            //     // //     if (r == 0 && b == 0 && g == 0) {
-            //     // //         canvasData2.data[i] = 132;
-            //     // //         canvasData2.data[i + 1] = 180;
-            //     // //         canvasData2.data[i + 2] = 237;
-            //     // //     }
-            //     // // }
-            //     // // context.putImageData(canvasData2, 0, 0)
-
-            //     // context.strokeStyle = "rgba(255,0,0,1)";
-            //     // var dataX = parseInt(that.imageData.width / 50) * 10;
-            //     // for (var i = 0; i <= that.imageData.width; i += dataX) {
-            //     //     context.font = "20px serif";
-            //     //     context.strokeText(i, i * xRate, 20);
-            //     //     context.strokeText(i, i * xRate, canvas2.height);
-            //     // }
-            //     // var datay = parseInt(that.imageData.height / 50) * 10;
-            //     // for (var j = datay; j <= that.imageData.height; j += datay) {
-            //     //     context.font = "20px serif";
-            //     //     context.strokeText(j, 10, canvas2.height - j * yRate);
-            //     //     context.strokeText(j, canvas2.width - 30, canvas2.height - j * yRate);
-            //     // }
-            //     // console.log(canvas2.toDataURL());//得到最终裁剪出来的base64
-            // }
+            skylineExecute.drawCanvas(canvas1, that.imageData.data, viewW, viewH, skyRgb)
         },
         download() {
-            var canvas = this.$refs['mycan2']
+            var canvas = this.$refs['mycan1']
 
             // var context = canvas.getContext("2d")
             var url = canvas.toDataURL("image/png");
@@ -193,4 +52,7 @@ export default {
 .vl-notify-content {
     background-color: white;
 }
-</style>) -->
+</style>
+    background-color: white;
+}
+</style>

+ 167 - 38
src/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue

@@ -2,15 +2,28 @@
   <div class="ZTGlobal" style="margin: 1rem;">
     <el-form>
       <el-form-item>宽度:
-        <el-input-number min="0" max="1000" :step="1" v-model="faceW" @change="farChange"></el-input-number>
+        <el-input-number min="0" max="5000" :step="1" v-model="faceW" @change="farChange"></el-input-number>
       </el-form-item>
       <el-form-item>高度:
         <el-input-number min="0" max="500" :step="1" v-model="faceH" @change="heightChange"></el-input-number>
       </el-form-item>
       <el-form-item>
-        <el-button @click="draw">绘制范围</el-button>
-        <el-button @click="create">分析</el-button>
-        <el-button @click="clear">取消</el-button>
+        <div style="display:flex;">
+          天空颜色: <el-color-picker v-model="skyColor" show-alpha></el-color-picker>
+        </div>
+      </el-form-item>
+      <el-form-item>
+        <div style="display:flex;">
+          方向:<el-select v-model="slider" @change="sliderChange" style="width:60%">
+            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+            </el-option>
+          </el-select>
+        </div>
+      </el-form-item>
+      <el-form-item>
+        <el-button size="small" @click="draw">绘制范围</el-button>
+        <el-button size="small" @click="create">分析</el-button>
+        <el-button size="small" @click="clear">取消</el-button>
       </el-form-item>
     </el-form>
   </div>
@@ -18,24 +31,37 @@
 <script>
 import TJXResult from './TJXResult.vue'
 var drawHandler;
-var facade
+var facade;
+var startPoint;
+var endPoint;
 export default {
   data() {
     return {
+      skyColor: 'rgba(87, 126, 197, 0.23)',
       faceW: 200,
       faceH: 100,
       minH: 0,
-      viewW:0,
-      layerid:null,
+      viewW: 0,
+      layerid: null,
+      slider: 'left',
+      options: [{
+        value: 'left',
+        label: '左侧'
+      }, {
+        value: 'right',
+        label: '右侧'
+      },
+      ]
     }
   },
   mounted() {
     facade = new Cesium.Facade(scene);
     facade.build();
+    
   },
-  beforeDestroy()
-  {
-     this.clear()
+
+  beforeDestroy() {
+    this.clear()
   },
   methods: {
     draw() {
@@ -49,37 +75,111 @@ export default {
         0
       );
       drawHandler.activate()
-      // drawHandler.activeEvt.addEventListener(function (isActive) {
-      // });
-      // drawHandler.movingEvt.addEventListener(function (windowPosition) {
 
-      // });
       drawHandler.drawEvt.addEventListener(function (result) {
         debugger
-        // var averageH = result.object.positions[0].z + result.object.positions[1].z
-        var startPoint = result.object.positions[0];
-        var endPoint = result.object.positions[1];
-
-        // var averageH =(startPoint.z +endPoint.z)/2
-        // startPoint.z = averageH
-        // endPoint.z = averageH
+        startPoint = result.object.positions[0];
+        endPoint = result.object.positions[1];
         var point1 = that.Cartesian2toDegrees(startPoint)
         that.minH = point1[2]
         var point2 = that.Cartesian2toDegrees(endPoint)
         if (point2[2] < that.minH)
           that.minH = point2[2]
 
-      that.  viewW=Math.sqrt((startPoint.y-endPoint.y)*(startPoint.y-endPoint.y)+(startPoint.x-endPoint.x)*(startPoint.x-endPoint.x))
-        // point2[2] += 2
-        // facade.startPoint = Cesium.Cartesian3.fromDegrees(point1[0], point1[1], point1[2]);
-        // facade.endPoint = Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2]);
-        // facade.startPoint = startPoint
-        // facade.endPoint = endPoint
-        facade.setBoundByPoints(startPoint,endPoint)
-        facade.maxHeight = parseFloat(that.faceH)
-        facade.farDistance = parseFloat(that.faceW)
+        that.viewW = Math.sqrt((startPoint.y - endPoint.y) * (startPoint.y - endPoint.y) + (startPoint.x - endPoint.x) * (startPoint.x - endPoint.x))
+        if (that.slider == "left") {
+          facade.setBoundByPoints(startPoint, endPoint);
+        }
+        else {
+          facade.setBoundByPoints(endPoint, startPoint);
+        }
+
+        facade.maxHeight = parseFloat(that.faceH);
+        facade.farDistance = parseFloat(that.faceW);
+        
+       
+       
+        // viewer.entities.add(
+        //   {
+        //     id: "ZDGYQS_",
+        //     show: true,
+        //     position : Cesium.Cartesian3.fromDegrees((point1[0]+point2[0])/2, (point1[1]+point2[1])/2+0.001,100),
+        //     point: {
+        //       color: Cesium.Color.RED,
+        //       pixelSize: 200,
+        //     }
+        //   })
+        drawHandler.deactivate()
       })
     },
+    /***
+     * 计算相机视角
+     */
+    ComputationalPerspective(fromPoint,toPoint) {
+      var point1;
+      var point2;
+
+      if (this.slider=="left") {
+        point1 = [
+        fromPoint[0],
+        fromPoint[1],
+        fromPoint[2],
+        ];
+        point2 = [
+        toPoint[0],
+        toPoint[1],
+        toPoint[2],
+        ];
+      } else {
+        point1 = [
+          [0],
+          toPoint[1],
+          toPoint[2],
+        ];
+        point2 = [
+        fromPoint[0],
+        fromPoint[1],
+        fromPoint[2],
+        ];
+      }
+      var positionA = Cesium.Cartesian3.fromDegrees(
+        point1[0],
+        point1[1],
+        point1[2]
+      );
+      var positionB = Cesium.Cartesian3.fromDegrees(
+        point2[0],
+        point2[1],
+        point2[2]
+      );
+      var midpoint=[(point1[0]+point1[0])/2,(point1[1]+point1[1])/2,(point1[2]+point1[2])/2+2];
+      let finalPosition = new Cesium.Cartesian3();
+      let matrix4 = Cesium.Transforms.eastNorthUpToFixedFrame(positionA);
+      Cesium.Matrix4.inverse(matrix4, matrix4);
+      Cesium.Matrix4.multiplyByPoint(matrix4, positionB, finalPosition);
+      Cesium.Cartesian3.normalize(finalPosition, finalPosition);
+      const resultHead = Cesium.Math.toDegrees(
+        Math.atan2(finalPosition.x, finalPosition.y)
+      );
+      const resultPitch = Cesium.Math.toDegrees(Math.asin(finalPosition.z));
+      viewer.camera.setView({
+        destination: midpoint,
+        orientation: {
+          heading: Cesium.Math.toRadians(resultHead), // east, default value is 0.0 (north)
+          pitch: Cesium.Math.toRadians(resultPitch), // default value (looking down)
+          roll: 0.0, // default value
+        },
+      });
+    },
+    sliderChange() {
+      facade.clear();
+      if (this.slider == "left") {
+        facade.setBoundByPoints(startPoint, endPoint);
+      }
+      else {
+        facade.setBoundByPoints(endPoint, startPoint);
+      }
+    },
     Cartesian2toDegrees(position) {
       var cartographic = Cesium.Cartographic.fromCartesian(position);
       var longitude = Cesium.Math.toDegrees(cartographic.longitude);
@@ -88,20 +188,22 @@ export default {
       return [longitude, latitude, height];
     },
     create() {
+    
       var that = this;
       facade.build();
       facade.readyPromise.then(function (base64data) {
         debugger
-        if( that.layerid)
-        that.$layer.close( that.layerid)
-      that.layerid=  that.$layer.iframe({
+
+        // that.download(base64data)
+        if (that.layerid)
+          that.$layer.close(that.layerid)
+        that.layerid = that.$layer.iframe({
           content: {
             content: TJXResult, //传递的组件对象
             parent: that, //当前的vue对象
-            data: { 'imageData': { 'height': that.faceH, 'width': that.viewW, 'data': base64data,'minH':that.minH } }, //props
+            data: { 'imageData': { 'height': that.faceH, 'width': that.viewW, 'data': base64data, 'minH': that.minH, "rgb": that.skyColor } }, //props
           },
-         
-          area: ["60rem", "30rem"], //宽 高
+          area: ["100rem", "35rem"], //宽 高
           title: "天际线分析结果",
           maxmin: true,
           shade: false, //是否显示遮罩
@@ -112,6 +214,28 @@ export default {
         });
       });
     },
+    convertImageToCanvas(image) {
+      var canvas = document.createElement("canvas");
+      canvas.width = image.width;
+      canvas.height = image.height;
+      canvas.getContext("2d").drawImage(image, 0, 0);
+      return canvas;
+    },
+
+    download(base64data) {
+      var that = this;
+      var image = new Image();
+      image.src = base64data;
+      image.onload = function () {
+        var canvas = that.convertImageToCanvas(image);
+        var url = canvas.toDataURL("image/jpeg");
+        var a = document.createElement('a');
+        var event = new MouseEvent('click');
+        a.download = (new Date()).getTime() + ".jpg"; // 指定下载图片的名称
+        a.href = url;
+        a.dispatchEvent(event); // 触发超链接的点击事件
+      }
+    },
     farChange() {
       facade.farDistance = parseFloat(this.faceW)
     },
@@ -121,10 +245,15 @@ export default {
     clear() {
       viewer.entities.removeAll()
       facade.clear();
-      drawHandler.clear();
+      // drawHandler.clear();
+      viewer.entities.removeAll();
     }
 
   }
 }
 </script>
-<style></style>
+<style scoped>
+.el-color-picker__trigger {
+  width: 100px;
+}
+</style>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/views/ConstructionApplication3D/skylineAnalysis/skylineExecute.js


+ 4 - 2
src/views/ConstructionApplication3D/zt.scss

@@ -305,7 +305,8 @@
 .el-icon-share,
 .el-icon-delete,
 .el-icon-folder-add,
-.el-icon-tickets
+.el-icon-tickets,
+.el-icon-edit
 {
   color: #20a0fc;
 }
@@ -315,7 +316,8 @@
 .el-icon-share+a,
 .el-icon-delete+a,
 .el-icon-folder-add+a,
-.el-icon-tickets+a
+.el-icon-tickets+a,
+.el-icon-edit+a
 {
   color: #cddeeb;
 }

+ 43 - 12
src/views/aiModel/index.vue

@@ -25,12 +25,8 @@
             @click="sendToBackend(item.content, index)"
           ></i>
           <div class="content">
-            <audio
-              v-if="item.mp3url"
-              controls
-              autoplay
-              :src="item.mp3url"
-            ></audio>
+            <!-- autoplay -->
+            <audio v-if="item.mp3url" controls :src="item.mp3url"></audio>
             <div v-if="item.content">
               <span>{{ item.content }}</span>
               <i class="el-icon-document-copy" @click="copy(item)"></i>
@@ -46,10 +42,24 @@
             <img src="/static/images/aiModel/kefu.png" />
           </div>
           <div class="content">
-            <span v-if="item.type" class="tit">参考意见</span>
-            <span :class="{ high: item.type }" @click="onClick(item)">
-              {{ item.content }}
-            </span>
+            <!-- breaks:是否将连续的换行符转换为<br>标签,默认值为false。
+            typographer:是否启用智能引号和破折号等Typographer功能,默认值为false。
+            linkify:是否将URL转换为链接,默认值为false。
+            highlight:是否启用代码高亮,默认值为true。 -->
+            <VueMarkdown
+              v-if="item.type == 'answer'"
+              class="markdowm"
+              :source="item.content"
+              :breaks="true"
+              :linkify="true"
+              :highlight="false"
+            ></VueMarkdown>
+            <div v-else>
+              <span v-if="item.data" class="tit">参考意见</span>
+              <span :class="{ high: item.type }" @click="onClick(item)">
+                {{ item.content }}
+              </span>
+            </div>
           </div>
         </div>
       </div>
@@ -84,6 +94,7 @@
         clearable
         v-model="sendContent"
         @input="change_witch"
+        @keyup.enter.native="send"
         class="search"
         placeholder="请输入问题"
       ></el-input>
@@ -99,9 +110,13 @@
 import { AddFzxz } from "../../api/ghss/ghxz.js";
 import { GetMsg, uploadAudio, closeMsg } from "../../api/aiModel.js";
 import record from "./record.js";
+import VueMarkdown from "vue-markdown";
 let recognition = null;
 export default {
   props: {},
+  components: {
+    VueMarkdown,
+  },
   data() {
     return {
       questionList: [],
@@ -229,10 +244,16 @@ export default {
             this.questionList[mindex].mstatus = 2;
             if (mres.data.code == 200 && mres.data.data) {
               if (mres.data.type == "selectLand") {
-                this.questionList.push({ content: "分析中...请稍等" });
+                this.questionList.push({
+                  type: mres.data.type,
+                  content: "分析中...请稍等",
+                });
                 this.AddFzxz(mres.data.data, mres.data.type);
               } else {
-                this.questionList.push({ content: mres.data.data });
+                this.questionList.push({
+                  type: mres.data.type,
+                  content: mres.data.data,
+                });
               }
             } else {
               this.questionList.push({
@@ -276,6 +297,7 @@ export default {
         });
     },
     onClick(item) {
+      if (!item.data) this.$message("抱歉,没有分析结果");
       if (item.type == "selectLand") {
         this.$router.push({
           path: "/siteselection",
@@ -382,6 +404,15 @@ export default {
         color: #ffffff;
         line-height: 20px;
       }
+      .markdowm {
+        width: 100%;
+        word-break: break-word; /* 超出容器宽度时自动换行 */
+        white-space: pre-wrap; /* 保持空白符序列,但是正常地换行 */
+        // overflow-wrap: break-word;
+        /deep/ pre {
+          white-space: pre-wrap;
+        }
+      }
     }
     .counsel-left {
       margin-bottom: 30px;

+ 5 - 7
src/views/cockpit/common/VectorSpace/BoxCommonVector.vue

@@ -32,7 +32,7 @@
           </div>
         </div>
         <div v-if="cockpit_vector.showtotal" class="shownum">
-          上报总数量:{{ active_dableData.length }}个
+          上报总数量:{{ active_dableData.length }}{{ isShallow }}
         </div>
         <el-table :row-class-name="tableRowClassName" ref="singleTable" :data="active_dableData" style="width: 100%"
           height="670" :header-cell-style="{
@@ -100,7 +100,7 @@ export default {
       state: "",
       timeout: null,
       title: "",
-      active_dableData: null,
+      active_dableData: [],
       tableData: null,
       layersData: {},
       scrollTop_index: null,
@@ -115,13 +115,10 @@ export default {
   },
   methods: {
     closeIsShallow() {
-      this.isShallow = false
-      store.state.vectorData = []
+      this.isShallow = false;
+      this.details = [];
     },
     cockpit() {
-      if (!this.isShallow) {
-        this.isShallow = true
-      }
       //驾驶舱矢量数据点选查询
       pick_cockpit_vector.init_handler();
     },
@@ -631,6 +628,7 @@ export default {
     },
     computed_vectorData(newVal, oldVal) {
       this.details = newVal;
+      this.isShallow = true;
       newVal.forEach((res) => {
         if (res.name == "index") {
           const TableRows = this.$refs.singleTable.bodyWrapper.querySelectorAll(

+ 24 - 19
src/views/farmlandProtection/components/fxjg.vue

@@ -45,12 +45,12 @@
         </div>
         <!-- <el-button size="mini" @click="zdyModel">图表切换</el-button> -->
       </div>
-      <div>
+      <div class="echartCon">
         <pie
           class="echart"
           :style="`height: ${200 + edata.length * 10}px`"
           unit="㎡"
-          @echartClick="(name) => echartClick(name, item.value)"
+          @echartClick="(name) => echartClick(name)"
           :ref="`echartRef`"
         ></pie>
       </div>
@@ -118,6 +118,7 @@ export default {
   methods: {
     download() {},
     resultDeatils(val, mxbsm) {
+      viewer.dataSources.removeAll();
       let obj = {
         bsm: this.fxjgObj.bsm,
         mxbsm: mxbsm,
@@ -130,7 +131,6 @@ export default {
       QueryGdbhJg({ bsm: this.fxjgObj.bsm }).then((res) => {
         let data = [];
         if (res.statuscode == 200) {
-          console.log(res, ":resresres");
           if (res.data.sandiao.mx_data.length) {
             res.data.sandiao.mx_data.forEach((el) => {
               data.push({
@@ -156,20 +156,17 @@ export default {
         }
       });
     },
-    echartClick(name, { iseyes }) {
-      console.log(name, ":name");
-      // this.reset();
-
-      // this.tableData.forEach((res) => {
-      //   const keys = Object.keys(res);
-      //   for (const key of keys) {
-      //     let value = res[key];
-      //     if (value == name) {
-      //       this.addPolygon(res.空间信息.split(";")[1], "all", "#ff0000", true);
-      //     }
-      //   }
+    echartClick(name) {
+      this.edata.forEach((res) => {
+        const keys = Object.keys(res);
+        for (const key of keys) {
+          let value = res[key];
+          if (value == name) {
+            this.loadGeoJSON(parse(res.geom), res.itemStyle.color, "all");
+          }
+        }
 
-      // })
+      })
     },
     drawWktPloygon(item, itemColor, id) {
       // console.log(geometry, "geometry");
@@ -186,6 +183,7 @@ export default {
     },
     // 加载GeoJSON数据
     loadGeoJSON(geojson, yanse, id, height, name) {
+      viewer.dataSources.removeAll()
       let _this = this;
       let fcolor =
         id && id != "all"
@@ -224,11 +222,14 @@ export default {
           if (id) {
             dataSources[id] = data;
           }
-          if (id == "all") _this.isshowAll = true;
         });
     },
   },
   mounted() {},
+  beforeDestroy() {
+    viewer.entities.removeAll();
+    viewer.dataSources.removeAll();
+  },
 };
 </script>
 
@@ -239,7 +240,11 @@ export default {
   overflow-x: hidden;
   padding-right: 10px;
   line-height: 40px;
-
+.echartCon{
+  height: 350px;
+  overflow: hidden;
+  overflow-y: auto;
+}
   .echart {
     // width: 19rem;
     // height: 350px;
@@ -318,7 +323,7 @@ export default {
   }
 
   .Integration {
-    max-height: 32vh;
+    max-height: 15vh;
     overflow: hidden;
     overflow-y: auto;
 

+ 3 - 4
src/views/farmlandProtection/index.vue

@@ -20,8 +20,7 @@
         </el-tab-pane>
       </el-tabs>
     </div>
-    <RzDtails :rzBsm="rzBsm" @updateParent="changeData" :interObj="interObj" v-if="showInter"></RzDtails>
-
+    <RzDtails :rzBsm="rzBsm" :rzMc="nowObj.xmmc" @updateParent="changeData"></RzDtails>
   </div>
 </template>
 
@@ -29,7 +28,7 @@
 import FZJCYP from "./components/fzjcyp.vue";
 import FXJG from "./components/fxjg.vue";
 import Lsjl from "../complianceAnalysis/components/lsjl.vue";
-import RzDtails from "./components/interDetails.vue";
+import RzDtails from "../complianceAnalysis/components/rzDtails.vue";
 export default {
   name: "farmlandProtection",
   components: {
@@ -73,7 +72,7 @@ export default {
         this.$nextTick(() => {
           this.$refs.fxjg.initData();
         });
-      }else{
+      } else {
         this.showInter = false
       }
     },

+ 1 - 1
src/views/modelStretch/index.vue

@@ -236,7 +236,7 @@ export default {
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
           if (!this.form.xzfw) {
-            Message.warning("请绘制或导入平面范围!");
+            this.$message.warning("请绘制或导入平面范围!");
             return;
           }
           this.form.geojson = parse(_temp.geom);

+ 31 - 355
static/Config/config.js

@@ -769,159 +769,6 @@ window.bjConfig = {
     tcwType: "",
   },
 };
-/**
- * //项目信息
- * meetingprogress (未上会:0,已上会:1)
- */
-window.projectinformation = [
-  {
-    id: "ertyuiop",
-    meetingprogress: "0",
-    applicant: "三亚投资发展有限公司",
-    projectname: "东岸卓越城项目",
-    projectaddress: "抱坡路",
-    plotnumber: "BP08-03,BP08-11",
-    landarea: "45540平方米",
-    landusenature: "商服用地",
-    projectpositioning: "商业",
-    landsituation: "",
-    totalprojectinvestment: "约19亿元",
-    fundingsource: "企业投资",
-    ztConstructionmodelList: [
-      {
-        id: "hfgdg",
-        projectinformationid: "ertyuiop",
-        modelname: "报建模型1",
-        creationtime: "2024-04-24 17:22:13",
-        url: "http://192.168.60.2:8090/iserver/services/3D-fangan/rest/realspace",
-        dataurl:
-          "http://192.168.60.2:8090/iserver/services/data-fangan/rest/data",
-        datasourcename: "DongAnZhuoYueCheng",
-        datasetname: "建筑轮廓",
-        selectionStatus: false,
-        designunit: "筑博设计股份有限公司",
-        totalarea: "",
-        groundarea: "",
-        groundcapacity: "",
-        buildingarea: "",
-        plandescription:
-          "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
-      },
-      {
-        id: "2hfgddfzg",
-        projectinformationid: "ertyuiop",
-        modelname: "报建模型2",
-        creationtime: "2024-04-24 17:22:13",
-
-        url: "http://192.168.60.2:8090/iserver/services/3D-fangan2/rest/realspace",
-        dataurl:
-          "http://192.168.60.2:8090/iserver/services/data-fangan2/rest/data",
-        datasourcename: "DongAnZhuoYueCheng2",
-        datasetname: "建筑轮廓",
-        selectionStatus: false,
-        designunit: "2筑博设计股份有限公司",
-        totalarea: "",
-        groundarea: "",
-        groundcapacity: "",
-        buildingarea: "",
-        plandescription:
-          "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
-      },
-    ],
-  },
-  {
-    id: "222ertyuiop",
-    projectname: "三亚投资发展有限公司",
-    meetingprogress: "1",
-    applicant: "东岸卓越城项目",
-    projectaddress: "抱坡路",
-    plotnumber: "BP08-03,BP08-11",
-    landarea: "45540平方米",
-    landusenature: "商服用地",
-    projectpositioning: "商业",
-    landsituation: "",
-    totalprojectinvestment: "约19亿元",
-    fundingsource: "企业投资",
-    ztConstructionmodelList: [
-      {
-        id: "hfgdg",
-        projectinformationid: "ertyuiop",
-        modelname: "报建模型1",
-        creationtime: "2024-04-24 17:22:13",
-        url: "http://192.168.60.2:8090/iserver/services/3D-fangan/rest/realspace",
-        dataurl:
-          "http://192.168.60.2:8090/iserver/services/data-fangan/rest/data",
-        datasourcename: "DongAnZhuoYueCheng",
-        datasetname: "建筑轮廓",
-        selectionStatus: true,
-        designunit: "筑博设计股份有限公司",
-        totalarea: "",
-        groundarea: "",
-        groundcapacity: "",
-        buildingarea: "",
-        plandescription:
-          "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
-      },
-      {
-        id: "2hfgddfzg",
-        projectinformationid: "ertyuiop",
-        modelname: "报建模型2",
-        creationtime: "2024-04-24 17:22:13",
-
-        url: "http://192.168.60.2:8090/iserver/services/3D-fangan2/rest/realspace",
-        dataurl:
-          "http://192.168.60.2:8090/iserver/services/data-fangan2/rest/data",
-        datasourcename: "DongAnZhuoYueCheng2",
-        datasetname: "建筑轮廓",
-        selectionStatus: false,
-        designunit: "2筑博设计股份有限公司",
-        totalarea: "",
-        groundarea: "",
-        groundcapacity: "",
-        buildingarea: "",
-        plandescription:
-          "拟建15栋25-26层安居房、 1栋3层幼儿园、 1栋1层配套用房、 1栋1层开闭所及1个2层整体地下室。总建筑面积约23.81万平方米, 其中计容建筑面积约17.41万平方米, 不计容建筑面积约6.40万平方米。 容积率3.0, 建筑密度17.59%, 建筑高度80米, 绿地率40%, 总户数1552户。机动车停车位1944个(地上154个, 地下1790个) , 非机动车位3270个",
-      },
-    ],
-  },
-  {
-    id: "A1",
-    projectname: "榕华四季",
-    meetingprogress: "0",
-    applicant: "榕华四季",
-    projectaddress: "抱坡路",
-    plotnumber: "BP08-11-2",
-    landarea: "",
-    landusenature: "",
-    projectpositioning: "商业",
-    landsituation: "",
-    totalprojectinvestment: "",
-    fundingsource: "企业投资",
-    ztConstructionmodelList: [
-      {
-        // 榕华四季
-        id: "A",
-        projectinformationid: "A1",
-        modelname: "A1",
-        creationtime: "2024-04-24 17:22:13",
-        url: "http://192.168.60.2:8090/iserver/services/3D-RHSJ/rest/realspace",
-        dataurl:
-          "http://192.168.60.2:8090/iserver/services/data-RHSJ/rest/data",
-        datasourcename: "RHSJ",
-        datasetname: "建筑轮廓",
-        selectionStatus: false,
-        designunit: "",
-        totalarea: "",
-        groundarea: "",
-        groundcapacity: "",
-        buildingarea: "",
-        plandescription: "",
-      },
-    ],
-  },
-];
-//项目模型指标人工核算值
-window.project_model_zb = [{ id: "qwertyuiop", dkbm: "" }];
 
 //图层服务查询分组树
 window.layerTree = [
@@ -1821,13 +1668,7 @@ window.dict = {
     { label: "已通过", value: "已通过" },
     { label: "未通过", value: "未通过" },
   ],
-  //基准地价中项目类型
-  // zt_jzdj_ProjectType: [
-  //   { label: "居住建筑", value: "居住建筑" },
-  //   { label: "公共建筑", value: "公共建筑" },
-  //   { label: "工业建筑", value: "工业建筑" },
-  //   { label: "农业建筑", value: "农业建筑" },
-  // ],
+
   //基准地价中土地用途
   zt_jzdj_LandUse: [
     { label: "商服用地", value: "商服用地" },
@@ -1842,70 +1683,6 @@ window.NightViewLayerName = [
   // "抱坡规划区域建筑基底@building",
   // "规划区基底高度@sanyaLAT",
 ];
-//广告项目信息
-window.billboardInfoList = [
-  {
-    id: "1",
-    projectname: "广告项目1",
-    address: "项目地址",
-    checkDate: "2024-01-02 12:00:00",
-    design: "设计单位",
-    description: "简介",
-    url: "http://192.168.60.2:8090/iserver/services/3D-fangan/rest/realspace",
-    dataurl: "http://192.168.60.2:8090/iserver/services/data-fangan/rest/data",
-    datasourcename: "DongAnZhuoYueCheng",
-    datasetname: "建筑轮廓",
-  },
-  {
-    id: "2",
-    projectname: "广告项目2",
-    address: "项目地址",
-    checkDate: "2024-01-02 12:00:00",
-    design: "设计单位",
-    description: "简介",
-    url: "http://192.168.60.2:8090/iserver/services/3D-fangan/rest/realspace",
-    dataurl: "http://192.168.60.2:8090/iserver/services/data-fangan/rest/data",
-    datasourcename: "DongAnZhuoYueCheng",
-    datasetname: "建筑轮廓",
-  },
-];
-//广告模型信息
-window.billboardModelList = [
-  {
-    id: "1",
-    billboardInfoId: "1",
-    billboardName: "GUCCI",
-    billboardType: "附设于建筑一层门楣的广告",
-    x: 109.511396,
-    y: 18.316283,
-    z: 25.18,
-    xL: 40,
-    yL: 1.16,
-    zL: 0.1,
-    rotateX: 102.1,
-    rotateY: 0,
-    rotateZ: 0,
-    ReviewStatus: "",
-    ReviewComments: "",
-  },
-  {
-    id: "3",
-    billboardInfoId: "1",
-    billboardName: "广告模型2",
-    billboardType: "平行建筑主体户外广告",
-    x: 109.511509,
-    y: 18.315612,
-    z: 28.69,
-    xL: 10,
-    yL: 5,
-    zL: 0.1,
-    rotateX: 0,
-    rotateY: 0,
-    rotateZ: 0,
-    ReviewStatus: "",
-    ReviewComments: "",
-  },
-];
 //广告模型审查规则
 window.billboardReviewList = [
   {
@@ -1918,7 +1695,7 @@ window.billboardReviewList = [
         code: "00101",
         billboardType: "平行建筑主体户外广告",
         isAddModel: true,
-        ModelType: "rectangleBillboard",
+        ModelType: "bjModel",
         ReviewItems: [
           {
             id: "4553",
@@ -1930,7 +1707,7 @@ window.billboardReviewList = [
           {
             id: "4534553",
             code: "0010101",
-            ReviewMethod: "动审查",
+            ReviewMethod: "动审查",
             ReviewContent: "户外广告上沿不得突出墙面(包括女儿墙)的外轮廓线",
           },
           {
@@ -1949,7 +1726,7 @@ window.billboardReviewList = [
           {
             id: "453sd4we553",
             code: "0010104",
-            ReviewMethod: "动审查",
+            ReviewMethod: "动审查",
             ReviewContent:
               "广告设施宽度应与墙面相协调,周围不应超出墙面外轮廓线,垂直方向突出墙面距离不宜大于0.5米",
           },
@@ -1979,7 +1756,7 @@ window.billboardReviewList = [
             code: "0010201",
             billboardType: "底层以上没有出挑结构的建筑",
             isAddModel: true,
-            ModelType: "rectangleBillboard",
+            ModelType: "bjModel",
             ReviewItems: [
               {
                 id: "4553",
@@ -2004,7 +1781,7 @@ window.billboardReviewList = [
               {
                 id: "453sd45xcv53",
                 code: "001020103",
-                ReviewMethod: "动审查",
+                ReviewMethod: "动审查",
                 ReviewContent:
                   "户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)",
               },
@@ -2020,7 +1797,7 @@ window.billboardReviewList = [
                 code: "001020201",
                 billboardType: "附设于建筑一层门楣的广告",
                 isAddModel: true,
-                ModelType: "rectangleBillboard",
+                ModelType: "bjModel",
                 ReviewItems: [
                   {
                     id: "4553",
@@ -2043,16 +1820,10 @@ window.billboardReviewList = [
                     ReviewContent:
                       "一层建筑层高≤4.5m并且广告高度≤1.5m或者一层建筑层高>4.5m并且广告高度小于等于2m",
                   },
-                  // {
-                  //   id: "453sd45xcv53",
-                  //   code: "00102020103",
-                  //   ReviewMethod: "自动审查",
-                  //   ReviewContent: "一层建筑层高>4.5m并且广告高度小于等于2m",
-                  // },
                   {
                     id: "453sd45xcv53",
                     code: "00102020104",
-                    ReviewMethod: "动审查",
+                    ReviewMethod: "手动审查",
                     ReviewContent:
                       "户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告则外表面距离墙面不得超过0.5米)",
                   },
@@ -2063,7 +1834,7 @@ window.billboardReviewList = [
                 code: "001020202",
                 billboardType: "设于建筑出挑部分的墙面上",
                 isAddModel: true,
-                ModelType: "rectangleBillboard",
+                ModelType: "bjModel",
                 ReviewItems: [
                   {
                     id: "4553",
@@ -2100,7 +1871,7 @@ window.billboardReviewList = [
                   {
                     id: "453sd45xcv53",
                     code: "00102020205",
-                    ReviewMethod: "动审查",
+                    ReviewMethod: "动审查",
                     ReviewContent:
                       "户外广告外表面距离墙面不得超过0.3米(霓虹灯户外广告外表面距离墙面不得超过0.5米)",
                   },
@@ -2115,7 +1886,7 @@ window.billboardReviewList = [
         code: "00103",
         billboardType: "围墙上设置的户外广告",
         isAddModel: true,
-        ModelType: "rectangleBillboard",
+        ModelType: "bjModel",
         ReviewItems: [
           {
             id: "4534553",
@@ -2984,6 +2755,21 @@ window.billboardModelRuleList = [
       },
     ],
   },
+  {
+    id: "wesdwasd",
+    code: "bjModel",
+    billboardType: "报建广告牌",
+    template: [
+      {
+        //模板名称
+        templateName: "矩形广告牌名称1",
+        //缩略图
+        thumbnailUrl: "../../../../static/ModelData/billboard/1.jpg",
+        //模板顶部类型
+        templateTopType: "box",
+      },
+    ],
+  },
   {
     id: "wewasd",
     code: "rectangleBillboard",
@@ -3365,16 +3151,6 @@ window.NightLightUrl = {
   //道路流动线
   dlzxx: {
     url: "static/data/道路中线_1.json",
-    // lddxWidth: 5, //流动线底线线宽
-    // lddxColor: { r: 0 / 255, g: 0 / 255, b: 0 / 255, a: 0.3 }, //流动线底线颜色
-    // ldxWidth: 2, //流动线线宽
-    // ldxOutlineColor: { r: 255 / 255, g: 255 / 255, b: 255 / 255, a: 0.3 }, //流动线轮廓颜色
-    // ldxOutlineWidth: 3, //流动轮廓线宽
-    // ldxOutlineColor: { r: 255 / 255, g: 255 / 255, b: 255 / 255, a: 0.3 }, //流动线轮廓颜色
-    // ldxColor: { r: 127 / 255, g: 255 / 255, b: 0 / 255, a: 1 }, //流动线线型填充颜色
-    // trailLength: 0.3, //流动线在整条线中占比例
-    // period: 1, //尾迹线从起点到终点的运行周期
-
     lddxWidth: 5, //流动线底线线宽
     lddxColor: { r: 0 / 255, g: 0 / 255, b: 212 / 255, a: 0.2 }, //流动线底线颜色
 
@@ -3435,16 +3211,6 @@ window.NightLightUrl = {
   //楼顶流动线
   buildTopLine: {
     url: "static/data/楼顶流动线.json",
-    // lddxWidth: 5, //流动线底线线宽
-    // lddxColor: { r: 0 / 255, g: 0 / 255, b: 0 / 255, a: 0.3 }, //流动线底线颜色
-    // ldxWidth: 2, //流动线线宽
-    // ldxOutlineColor: { r: 255 / 255, g: 255 / 255, b: 255 / 255, a: 0.3 }, //流动线轮廓颜色
-    // ldxOutlineWidth: 3, //流动轮廓线宽
-    // ldxOutlineColor: { r: 255 / 255, g: 255 / 255, b: 255 / 255, a: 0.3 }, //流动线轮廓颜色
-    // ldxColor: { r: 127 / 255, g: 255 / 255, b: 0 / 255, a: 1 }, //流动线线型填充颜色
-    // trailLength: 0.5, //流动线在整条线中占比例
-    // period: 2, //尾迹线从起点到终点的运行周期
-
     lddxWidth: 100, //流动线底线线宽
     lddxColor: { r: 255 / 255, g: 255 / 255, b: 255 / 255, a: 0.2 }, //流动线底线颜色
     ldxWidth: 100, //流动线线宽
@@ -3463,35 +3229,12 @@ window.NightLightUrl = {
     intensity: 1, //强度
   },
 };
-
-/**
- * 基准地价分析列表
- */
-window.BenchmarkLandPriceList = [
-  // {
-  //   id: "wefw",
-  //   ProjectScope: [],
-  //   ProjectName: "基准地价分析1",
-  //   ProjectType: "居住建筑",
-  //   ConstructionUnit: "建设单位名称",
-  //   analysisDate: "2024-06-01 10:11:21",
-  //   AnalysisStatus: "完成",
-  //   ReportPath:""
-  // },
-];
 //基准地价 规划中的用地性质与地价分析中的土地用途对应关系
 window.landUseNatureRelation = [
   {
     tdyt: "商服用地",
     GHDKType: [{ ydxz: "商服用地", ydxzdl: "09" }],
     layerinfo: [
-      // {
-      //   layerCore: "006006",
-      //   tdjbField: "级别_终",
-      //   ydlxTypeField: "",
-      //   ydlxPriceField: "集体楼面单价_终",
-      //   qsTYPE: "JT",
-      // },
       {
         tableName: "C12Sfjb",
         layerCore: "006001",
@@ -3506,13 +3249,6 @@ window.landUseNatureRelation = [
     tdyt: "住宅用地",
     GHDKType: [{ ydxz: "居住用地", ydxzdl: "07" }],
     layerinfo: [
-      // {
-      //   layerCore: "006002",
-      //   tdjbField: "级别_终",
-      //   ydlxTypeField: "",
-      //   ydlxPriceField: "集体楼面单价_终",
-      //   qsTYPE: "JT",
-      // },
       {
         tableName: "C22Zzjb",
         layerCore: "006008",
@@ -3530,13 +3266,6 @@ window.landUseNatureRelation = [
       { ydxz: "仓储用地", ydxzdl: "11" },
     ],
     layerinfo: [
-      // {
-      //   layerCore: "006005",
-      //   tdjbField: "级别_终",
-      //   ydlxTypeField: "",
-      //   ydlxPriceField: "集体楼面单价_终",
-      //   qsTYPE: "JT",
-      // },
       {
         tableName: "C32Gyjb",
         layerCore: "006003",
@@ -3556,13 +3285,6 @@ window.landUseNatureRelation = [
         tdyt: "机关团体用地",
         GHDKType: [{ ydxz: "机关团体用地", ydxzdl: "0801" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "机关团体用地",
-          //   ydlxPriceField: "机关_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3598,13 +3320,6 @@ window.landUseNatureRelation = [
         tdyt: "文化用地",
         GHDKType: [{ ydxz: "文化用地", ydxzdl: "0803" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "文化设施、体育用地",
-          //   ydlxPriceField: "文化_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3619,13 +3334,6 @@ window.landUseNatureRelation = [
         tdyt: "教育用地",
         GHDKType: [{ ydxz: "教育用地", ydxzdl: "0804" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "教育、科研用地",
-          //   ydlxPriceField: "教育_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3640,13 +3348,6 @@ window.landUseNatureRelation = [
         tdyt: "体育用地",
         GHDKType: [{ ydxz: "体育用地", ydxzdl: "0805" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "文化设施、体育用地",
-          //   ydlxPriceField: "文化_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3661,13 +3362,6 @@ window.landUseNatureRelation = [
         tdyt: "医疗卫生用地",
         GHDKType: [{ ydxz: "医疗卫生用地", ydxzdl: "0806" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "医疗卫生、社会福利用地",
-          //   ydlxPriceField: "医疗_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3682,13 +3376,6 @@ window.landUseNatureRelation = [
         tdyt: "社会福利用地",
         GHDKType: [{ ydxz: "社会福利用地", ydxzdl: "0807" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "医疗卫生、社会福利用地",
-          //   ydlxPriceField: "医疗_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3710,13 +3397,6 @@ window.landUseNatureRelation = [
         tdyt: "公共设施用地",
         GHDKType: [{ ydxz: "公共设施用地", ydxzdl: "13" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "公园与绿地、公用设施用地",
-          //   ydlxPriceField: "公园_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3731,13 +3411,6 @@ window.landUseNatureRelation = [
         tdyt: "绿地与开敞空间用地",
         GHDKType: [{ ydxz: "绿地与开敞空间用地", ydxzdl: "14" }],
         layerinfo: [
-          // {
-          //   layerCore: "006009",
-          //   tdjbField: "级别_终",
-          //   ydlxTypeField: "公园与绿地、公用设施用地",
-          //   ydlxPriceField: "公园_地价",
-          //   qsTYPE: "JT",
-          // },
           {
             tableName: "C41Gfjb",
             layerCore: "006004",
@@ -3751,7 +3424,11 @@ window.landUseNatureRelation = [
     ],
   },
 ];
-window.earthRadius = 0.994615737;
+window.earthRadius = 0.994615737 * 1.00061864634552;
+
+window.toLocalCoor = 1.00000209048259;
+window.to4525Coor = 1.00061864634552;
+
 //用于地下模式更改透明度
 //图层名称
 window.QXLayerNames = [
@@ -3763,5 +3440,4 @@ window.QXLayerNames = [
   "DiXing@BaoPo0621N",
 ];
 window.Layeralpha = 0;
-
 window.isUseDB = true;

Vissa filer visades inte eftersom för många filer har ändrats