Explorar o código

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

maxiaoxiao hai 9 meses
pai
achega
f9d8970ab7

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

@@ -5,6 +5,7 @@ import { tansParams, blobValidate } from "@/utils/ruoyi";
 import cache from "@/plugins/cache";
 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";
 // 创建axios实例
 const ZTservice = axios.create({
@@ -18,6 +19,12 @@ const ZTservice = axios.create({
 // request拦截器
 ZTservice.interceptors.request.use(
   (config) => {
+    // 是否需要设置 token
+    const isToken = (config.headers || {}).isToken === false
+    // 是否需要防止数据重复提交
+    if (getToken() && !isToken) {
+      config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+    }
     // 是否需要防止数据重复提交
     const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
     // get请求映射params参数

+ 131 - 35
src/components/Query/clickQuery/MultiLevelQuery.vue

@@ -18,21 +18,46 @@
                 </el-table-column>
             </el-table>
         </el-tab-pane>
+
         <el-tab-pane :closable="item.close" :label="item.name" :name="item.name"
             v-for="(item, index) in store.state.query_pick_pane" :key="index">
 
-            <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>
-            <pie class="echart" :class="item.name == '权属' ? 'echart1' : ''" unit="亩" :ref="`echartRef`"></pie>
+            <div v-if="item.name != '权属'">
+                <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>
+                <pie class="echart" unit="亩" :ref="`echartRef`"></pie>
+            </div>
+            <div v-else>
+                <el-tabs @tab-click="handleClickQwnership">
+
+                    <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>
+
+                        <pie class="echart" unit="亩" :ref="`qwnership_pie`"></pie>
+
+                    </el-tab-pane>
+                </el-tabs>
+            </div>
 
         </el-tab-pane>
 
@@ -70,6 +95,7 @@ export default {
     data() {
         return {
             activeName: 'second',
+            activeNameQwnership: 'Qwnership',
             handler_multi_level_query: null,
             manager_multi_level_query: null,
             manager_multi_level_vector: null,
@@ -83,7 +109,10 @@ export default {
             check_list: [{ label: '三调', ckeck: true }, { label: '权属', ckeck: true }, { label: '农用' }, { label: '上映' }],
             active_tabs_table: [],
             rawData: [],
-            headers: [], // 用于存储所有可能的 filedZH 值  
+            headers: [], // 用于存储所有可能的 filedZH 值 
+            qwnershipTabs: [],
+            rawData_qwnership: [],
+            headers_qwnership: [],
         };
     },
     //监听属性 类似于data概念
@@ -113,6 +142,31 @@ export default {
                 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: {},
@@ -151,8 +205,6 @@ export default {
 
 
             this.activecheckList.forEach((res) => {
-                console.log('res: ', res);
-
 
                 store.state.query_pick_pane.push({
 
@@ -297,10 +349,10 @@ export default {
                 };
 
                 const wkt = wellknown.stringify(geojsonPoint);
-                let id = store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1].id
+                // let id = store.state.vectorlayerlist[store.state.vectorlayerlist.length - 1].id
                 let obj = {
                     defaultType: null,
-                    layerId: id
+                    // layerId: id
                 }
                 let data = await GetTabsData(obj);
 
@@ -308,8 +360,12 @@ export default {
                     const element = data.data[index];
                     let tableId = element.tableId;
                     let pane_obj = {
-                        sourcePointWkt: wkt,
-                        sourceLayerId: id,
+                        // sourcePointWkt: wkt,
+                        // sourceLayerId: id,
+
+                        sourcePointWkt: "POINT(109.5139541 18.3146153)",
+                        sourceLayerId: "dd699f839bc04969ae2dc2e1964d0ad1",
+
                         sourceLayerType: '0',
                         queryTableId: tableId,
 
@@ -346,26 +402,66 @@ export default {
 
         },
         handleClick(tab, event) {
-
             let index = Number(tab.index) - 1
-            if (tab.closable == true) {
-                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
+
+            if (tab.name == '权属') {
+                this.qwnershipTabsFun();
+            } else {
+                if (tab.closable == true) {
+                    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);
-                    }
-                })
+                            this.setEchart(data, "vertical", index);
+                        }
+                    })
+                }
             }
 
+
+        },
+        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 = index == 0 ? 3 : 10
+                let legend_right = index == 0 ? "2%" : "10%"
+                this.$refs.qwnership_pie[index].setOptions({ data, type, max, legend_right });
+            });
         },
         setEchart(data, type, index) {
             this.$nextTick(() => {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1154 - 277
src/views/ConstructionApplication3D/Demolition/DemolitionList.vue


+ 296 - 38
src/views/ConstructionApplication3D/RSAnalysis/RSAnalysis.vue

@@ -1,40 +1,64 @@
 <template>
-  <div
-    class="ZTGlobal"
-    style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white"
-  >
-    <el-row :gutter="10">
-      观察者高度(米):
-      <el-input-number
-        size="small"
-        label="观察者高度:"
-        min="0"
-        max="50"
-        :step="0.5"
-        precision="1"
-        v-model="personH"
-      ></el-input-number>
+  <div class="ZTGlobal" style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white">
+
+    <el-row style="border: 1px solid #06c4f3;padding: 0.5rem;color: #ffffff;">
+      定点分析:
+      <el-row :gutter="10">
+        观察者高度(米):
+        <el-input-number size="small" label="观察者高度:" min="0" max="50" :step="0.5" precision="1"
+          v-model="personH"></el-input-number>
+
+        <el-col :span="8"><el-button size="mini" type="default" @click="addGCD">添加观察点</el-button>
+        </el-col>
+        <el-col :span="8"><el-button size="mini" type="default" @click="addTagget">添加目标点</el-button>
+        </el-col>
+        <el-col :span="7">
+          <el-button size="mini" type="default" @click="changeView">切换视角</el-button>
+        </el-col>
+      </el-row>
+    </el-row>
+    <el-row style="border: 1px solid #06c4f3; padding: 0.5rem;color: #ffffff;">
+      环视分析:
+      <el-row>
+        <el-col :span="8"><el-button size="mini" type="default" @click="addCirclePoint">添加环视点</el-button>
+        </el-col>
+      </el-row>
+      <el-row :gutter="10">
+        <el-col :span="10">
+          环视角度(度): </el-col>
+        <el-col :span="10">
+          <el-input-number size="mini" v-model="circlePitch" min="0" max="90"
+            @change="circlePitchChange"></el-input-number></el-col>
+      </el-row>
+      <el-row :gutter="10">
+        <el-col :span="10">
+          环视高度(米):</el-col>
+        <el-col :span="10">
+          <el-input-number size="mini" v-model="circleH" min="0" max="5000" @change="circleHChange"></el-input-number>
+        </el-col>
+      </el-row>
+      <el-row :gutter="10">
+        <el-col :span="8"><el-button ref="flyCrile" size="mini" type="default" @click="targetRing()">{{ flyCircleText
+        }}</el-button>
+        </el-col>
+      </el-row>
+    </el-row>
+    <el-row style="border: 1px solid #06c4f3; padding: 0.5rem;color: #ffffff;">
+      沿线飞行:默认50km/h
+      <el-row>
+        <el-col :span="8"><el-button size="mini" type="default" @click="addPolyline">绘制线</el-button>
+        </el-col>
+        <el-col :span="8"><el-button size="mini" type="default" @click="startPolylineFly">飞行</el-button>
+        </el-col>
+        <el-col :span="8"><el-button size="mini" type="default" @click="stopPolylineFly">停止飞行</el-button>
+        </el-col>
+      </el-row>
+      飞行高度:
+      <el-input-number size="small" label="飞行高度:" min="0" max="2000"  v-model="flyH"></el-input-number>
     </el-row>
     <el-row :gutter="10">
-      <el-col :span="6"
-        ><el-button size="mini" type="default" @click="addGCD"
-          >添加观察点</el-button
-        >
-      </el-col>
-      <el-col :span="6"
-        ><el-button size="mini" type="default" @click="addTagget"
-          >添加目标点</el-button
-        >
-      </el-col>
-      <el-col :span="5.5">
-        <el-button size="mini" type="default" @click="changeView"
-          >切换视角</el-button
-        >
-      </el-col>
-      <el-col :span="4">
-        <el-button size="mini" type="default" @click="clearScope"
-          >清除</el-button
-        >
+      <el-col :span="8">
+        <el-button size="mini" type="default" @click="clearScope">清除</el-button>
       </el-col>
     </el-row>
   </div>
@@ -50,6 +74,7 @@ import {
 // import { point, distance } from "@turf/turf";
 let handlerPoint = null; //绘制线
 var sightline;
+var flyManager;
 export default {
   data() {
     return {
@@ -57,8 +82,19 @@ export default {
       points: [],
       addViewFlag: false, //当前点击状态是否是 添加观察点
       addTargetFlag: false, //当前点击状态是否是 添加目标点,
+
       personH: 1.8,
       isFrom2To: true,
+      gcPoint: null,
+      targetPoint: null,
+      circlPoint: null,
+      addCircleFlag: false, //环视点标志
+      flyCircleLoop: false,
+      flyCircleText: "环视漫游",
+      circlePitch: 75,
+      circleH: 500,
+      flyH: 20,
+      lineFylPoints: []
     };
   },
   props: {
@@ -88,7 +124,7 @@ export default {
   computed: {},
   mounted() {
     sightline = new Cesium.Sightline(scene);
-    sightline.lin;
+    sightline.build();
     handlerPoint = new Cesium.DrawHandler(viewer, Cesium.DrawMode.Point);
     scene.undergroundMode = false;
   },
@@ -101,6 +137,9 @@ export default {
       sightline.removeAllTargetPoint();
       that.addViewFlag = true;
       that.addTargetFlag = false;
+
+      that.addCircleFlag = false
+
       that.isFrom2To = true;
       if (handlerPoint) handlerPoint.clear();
       that.setInput();
@@ -125,6 +164,16 @@ export default {
       that.addViewFlag = false;
       that.addTargetFlag = true;
 
+      that.addCircleFlag = false
+
+      that.setInput();
+    },
+    addCirclePoint() {
+      let that = this;
+      that.addViewFlag = false;
+      that.addTargetFlag = false;
+      that.addCircleFlag = true
+
       that.setInput();
     },
     setInput() {
@@ -147,8 +196,9 @@ export default {
           cartographic[2] += that.personH;
           sightline.viewPosition = cartographic;
           that.addViewFlag = false;
-
+          viewer.entities.removeById('gcPoint');
           var labelentity = new Cesium.Entity({
+            id: 'gcPoint',
             position: Cesium.Cartesian3.fromDegrees(
               cartographic[0],
               cartographic[1],
@@ -186,6 +236,7 @@ export default {
           });
           // that.points.push(entity)
           // viewer.entities.add(entity);
+          that.gcPoint = cartographic;
           that.points.push(labelentity);
           viewer.entities.add(labelentity);
         } else if (that.addTargetFlag) {
@@ -195,8 +246,9 @@ export default {
             position: cartographic,
             name: "目标点",
           });
-
+          viewer.entities.removeById('targetPoint');
           var labelentity = new Cesium.Entity({
+            id: 'targetPoint',
             position: position,
             point: {
               // 点的大小(像素)
@@ -231,9 +283,51 @@ export default {
           that.points.push(labelentity);
           viewer.entities.add(labelentity);
           that.addTargetFlag = false;
+
+          that.targetPoint = cartographic;
           sightline.build();
           that.ComputationalPerspective();
         }
+        else if (that.addCircleFlag) {
+          viewer.entities.removeById('circlePoint');
+          var labelentity = new Cesium.Entity({
+            id: 'circlePoint',
+            position: position,
+            point: {
+              // 点的大小(像素)
+              pixelSize: 10,
+              // 点位颜色,fromCssColorString 可以直接使用CSS颜色
+              color: Cesium.Color.RED,
+              // 边框颜色
+              outlineColor: Cesium.Color.fromCssColorString("#fff"),
+              // 边框宽度(像素)
+              outlineWidth: 2,
+              // 显示在距相机的距离处的属性,多少区间内是可以显示的
+              distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
+                0,
+                1500
+              ),
+              // 是否显示
+              show: true,
+            },
+            label: {
+              show: true,
+              text: "环视点",
+              font: "15px sans-serif",
+              pixelOffset: new Cesium.Cartesian2(60, -20), //文字偏移
+              fillColor: Cesium.Color.WHITE,
+              // backgroundColor:new Cesium.Color(0, 0, 0, 1),
+              distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
+                0,
+                1500
+              ), //达到一定高度隐藏
+            },
+          });
+          that.points.push(labelentity);
+          viewer.entities.add(labelentity);
+          that.addCircleFlag = false;
+          that.circlPoint = cartographic;
+        }
         handlerPoint.deactivate();
         handlerPoint.clear();
       });
@@ -245,6 +339,9 @@ export default {
     ComputationalPerspective() {
       var point1;
       var point2;
+      debugger
+      if (sightline.viewPosition[0] == 0 || sightline.viewPosition[1] == 0 || sightline._currentTargetPoint[0] == 0 || sightline._currentTargetPoint[1] == 0)
+        return;
       if (this.isFrom2To) {
         point1 = [
           sightline.viewPosition[0],
@@ -315,13 +412,174 @@ export default {
         handlerPoint.deactivate();
       }
       this.tooltip.setVisible(false);
+      if (flyManager)
+        flyManager.stop();
+      flyManager = null;
+      this.lineFylPoints = [];
+      scene.camera.stopFlyCircle();
+      this.flyCircleText = '环视漫游'
+    },
+    /**
+     * 目标点环视
+     */
+    targetRing() {
+
+      var that = this
+      that.flyCircleLoop = !that.flyCircleLoop;
+
+      if (that.circlPoint) {
+        var position = Cesium.Cartesian3.fromDegrees(that.circlPoint[0], that.circlPoint[1], that.circlPoint[2] + 1000)
+        // scene.camera.zoomIn(500)
+        scene.camera.setView({
+          destination: position,
+          orientation: {
+            heading: Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
+            pitch: Cesium.Math.toRadians(-75),    // default value (looking down)
+            roll: 0.0                             // default value
+          }
+        })
+        scene.camera.flyCircle(position)
+        scene.camera.speedRatio = 0.2
+      }
+      // scene.camera.flyCircleLoop = that.flyCircleLoop;
+      if (that.flyCircleLoop == true) {
+        that.flyCircleText = '停止环视'
+      }
+      else {
+        that.flyCircleText = '环视漫游'
+        scene.camera.stopFlyCircle()
+      }
+
+    },
+    circleHChange() {
+      scene.camera.setView({
+        destination: Cesium.Cartesian3.fromDegrees(this.circlPoint[0], this.circlPoint[1], this.circlPoint[2] + Number(this.circleH)),
+        orientation: {
+          heading: Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
+          pitch: Cesium.Math.toRadians(this.circlePitch * -1),    // default value (looking down)
+          roll: 0.0                             // default value
+        }
+      })
+    },
+    circlePitchChange() {
+
+      scene.camera.setView({
+        destination: Cesium.Cartesian3.fromDegrees(this.circlPoint[0], this.circlPoint[1], this.circlPoint[2] + Number(this.circleH)),
+        orientation: {
+          heading: Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
+          pitch: Cesium.Math.toRadians(this.circlePitch * -1),    // default value (looking down)
+          roll: 0.0                             // default value
+        }
+      })
+    },
+    addPolyline() {
+      var that = this;
+      that.lineFylPoints = []
+      if (handlerPoint)
+        handlerPoint.clear()
+      handlerPoint = new Cesium.DrawHandler(viewer, Cesium.DrawMode.Line);
+      handlerPoint.activate();
+      handlerPoint.drawEvt.addEventListener(function (result) {
+        debugger
+        var positions = result.object.positions;
+        for (var i = 0; i < positions.length; i++) {
+          var cartographic = that.Cartesian2toDegrees(positions[i]);
+          that.lineFylPoints.push(cartographic);
+        }
+        //将获取的点的位置转化成经纬度
+
+        handlerPoint.deactivate();
+      })
     },
+    startPolylineFly() {
+      var that = this;
+      if (that.lineFylPoints == null || that.length == 0) {
+        that.$message.warning('请绘制飞行路线!');
+        return
+      }
+      debugger
+
+      var xml = '<?xml version="1.0" encoding="UTF-8"?>' +
+        '<SceneRoute xmlns = "https://www.supermap.com/ugc60" >' +
+        '<route name="飞行路线_1" speed="13.888888888889" lineType="0" showroutestop="False" showrouteline="False" altitudefree="False" headingfree="False" tiltfree="False" flycircle="False" alongline="True">' +
+        '<style>' +
+        '<geostyle3d>' +
+        '<linecolor>RGBA(147,112,219,255)</linecolor>' +
+        '<linewidth>2</linewidth>' +
+        '<altitudeMode>Absolute</altitudeMode>' +
+        '<bottomAltitude>0.00</bottomAltitude>' +
+        '</geostyle3d>' +
+        '</style>'
+      that.lineFylPoints.forEach((point, index) => {
+        xml += '<routestop name="Stop+' + (index + 1) + '" speed="0" excluded="False" viewType="camera">' +
+          '<camera>' +
+          '<longitude>' + point[0] + '</longitude>' +
+          '<latitude>' + point[1] + '</latitude>' +
+          '<altitude>' + (point[2] + that.flyH) + '</altitude>' +
+          '<heading>0</heading>' +
+          '<tilt>78.531727283418646834</tilt>' +
+          '<altitudeMode>Absolute</altitudeMode>' +
+          '</camera>' +
+          '<style>' +
+          '<geostyle3d>' +
+          '<icon />' +
+          '<markersize>4.8</markersize>' +
+          '<markericonscale>1</markericonscale>' +
+          '<markercolor>RGBA(255,255,255,255)</markercolor>' +
+          '</geostyle3d>' +
+          '</style>' +
+          '<setting>' +
+          '<turnTime>1.5</turnTime>' +
+          '<turnSlowly>False</turnSlowly>' +
+          '<stopPlayMode>StopPause</stopPlayMode>' +
+          '<autoPlay>False</autoPlay>' +
+          '<pauseTime>0</pauseTime>' +
+          '<angularSpeed>1</angularSpeed>' +
+          ' </setting>' +
+          '</routestop>';
+      })
+      xml += '</route>'
+      xml += '</SceneRoute >'
+
+      var routes = new Cesium.RouteCollection(viewer.entities);
+      routes.fromXML(xml);
+      //初始化飞行管理
+      flyManager = new Cesium.FlyManager({
+        scene: scene,
+        routes: routes
+      });
+      //注册站点到达事件
+      flyManager.stopArrived.addEventListener(function (routeStop) {
+        routeStop.waitTime = 1; // 在每个站点处停留1s
+      });
+      flyManager.readyPromise.then(function () { // 飞行路线就绪
+        var currentRoute = flyManager.currentRoute;
+        currentRoute.isLineVisible = false;
+        currentRoute.isStopVisible = false;
+        //生成飞行文件中的所有站点列表
+        // var allStops = flyManager.getAllRouteStops();
+        flyManager && flyManager.play();
+      })
+
+
+    },
+    /**
+     * 
+     */
+    stopPolylineFly() {
+      var allStops = flyManager.getAllRouteStops();
+      flyManager.viewToStop(allStops[allStops.length - 1])
+      flyManager && flyManager.stop();
+
+    }
+
+
   },
 
   beforeDestroy() {
     this.clearScope();
   },
-};
+}
 </script>
 <style lang="scss">
 @import "@/../../zt.scss";

+ 4 - 4
src/views/ConstructionApplication3D/projectManagement/projectManagement.vue

@@ -2269,7 +2269,7 @@ export default {
                   DataPs.push(DataPs[0]);
                 }
                 let polygonPs = polygon([DataPs]);
-                let areaPs = area(polygonPs) * window.earthRadius;
+                let areaPs = area(polygonPs);
                 xmzmj += areaPs;
               }
             });
@@ -2350,7 +2350,7 @@ export default {
                   DataPs.push(DataPs[0]);
                 }
                 let polygonPs = polygon([DataPs]);
-                let areaPs = area(polygonPs) * window.earthRadius;
+                let areaPs = area(polygonPs);
                 jzjdzmj += areaPs;
               }
             });
@@ -3570,7 +3570,7 @@ export default {
       //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
       //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
       let left = w - 430 + 430 / 2;
-      let top = 100 / 2 + 60;
+      let top = 100 / 2 + 300;
       this.$layer.iframe({
         id: "RSFX",
         content: {
@@ -3579,7 +3579,7 @@ export default {
           data: { info: {} }, //props
         },
         offset: [left, top], //left top
-        area: ["430px", "150px"], //宽 高
+        area: ["20rem", "35rem"], //宽 高
         title: "人视分析",
         maxmin: false,
         shade: false, //是否显示遮罩

+ 165 - 53
src/views/ConstructionApplication3D/skylineAnalysis/TJXResult.vue

@@ -1,12 +1,13 @@
 <template>
-    <div style="margin: 1rem; padding: 0.5rem;background-color: azure; width: 99%;height: 99%;">
+    <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: ;"></canvas>
+        <canvas id="mycan2" ref="mycan2" width="907" height="350"></canvas>
         <el-button type="primary" @click="download">下载</el-button>
-        <canvas id="mycan" ref="mycan" style="height: 90%;width: 99%;background-color: azure;"></canvas>
         <!-- <img id="img"  ref="img" style=" width: 100%;height: :100%;"/> -->
     </div>
 </template>
 <script>
-import { cond } from 'lodash';
 
 export default {
     props: ['imageData'],
@@ -20,61 +21,172 @@ export default {
     methods: {
         init() {
             var that = this;
-            var canvas = this.$refs['mycan']
+
             var image = new Image();
-            var context = canvas.getContext("2d")
+            var minH = that.imageData.minH;
+
             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);
+
+            //     // 遍历像素点,将彩色像素点转换为黑白像素点
+
+            //     for (var i = 0; i < imageData.data.length; i += 4) {
+
+            //         debugger
+            //         var r = imageData.data[i];
+
+
+            //         var g = imageData.data[i + 1];
+
+            //         var b = imageData.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;
+            //         }
+            //     }
+            //     context.putImageData(imageData, 0, 0)
+            //     context.strokeStyle = "rgba(255,0,0,1)";
+            //     context.lineWidt = 25
+            //     context.strokeRect(0, 0, canvas2.width, canvas2.height)
+
+            //     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 = "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 - 50, canvas2.height - j * yRate);
+            //     }
+            //     //context.scale(1, scale)
+            // }
             image.onload = function () {
-                canvas.width = image.width;
-                canvas.height = image.height;
-               
-                context.drawImage(image, 0, 0, canvas.width, canvas.height);
-                // context.fillStyle = '#fff';
-                // context.fillRect(0, 0, canvas.width, canvas.height);
-                // 将canvas的透明背景设置成白色
-                var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
-
-                // 遍历像素点,将彩色像素点转换为黑白像素点
-
-                for (var i = 0; i < imageData.data.length; i += 4) {
-
-                    var r = imageData.data[i];
-
-                    var g = imageData.data[i + 1];
-
-                    var b = imageData.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;
-                    }
-                }
-                context.putImageData(imageData, 0, 0)
-                context.strokeStyle = "rgba(255,0,0,1)";
-                context.lineWidt = 25
-                context.strokeRect(0, 0, canvas.width, canvas.height)
-
-                let xRate = canvas.width / that.imageData.width;
-
-                let yRate = canvas.height / that.imageData.height;
-                for (var i = 50; i < that.imageData.width; i += 50) {
-                    context.font = "30px serif";
-                    context.strokeText(i, i * xRate, 20);
-                    context.strokeText(i, i * xRate, canvas.height);
-                }
-                for (var j = that.imageData.height; j >= 10; j -= 20) {
-                    context.font = "30px serif";
-                    context.strokeText(j, 20, (that.imageData.height - j) * yRate);
-                    context.strokeText(j, canvas.width - 30, (that.imageData.height - j) * yRate);
-                }
+                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++)
+                //     {
+                        
+                //     }
+                // }
+
+
+                // 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
             }
         },
         download() {
-            var canvas = this.$refs['mycan']
+            var canvas = this.$refs['mycan1']
 
             // var context = canvas.getContext("2d")
             var url = canvas.toDataURL("image/jpeg");
@@ -91,4 +203,4 @@ export default {
 .vl-notify-content {
     background-color: white;
 }
-</style>)
+</style>) -->

+ 24 - 9
src/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue

@@ -24,12 +24,19 @@ export default {
     return {
       faceW: 200,
       faceH: 100,
+      minH: 0,
+      viewW:0,
+      layerid:null,
     }
   },
   mounted() {
     facade = new Cesium.Facade(scene);
     facade.build();
   },
+  beforeDestroy()
+  {
+     this.clear()
+  },
   methods: {
     draw() {
 
@@ -56,14 +63,19 @@ export default {
         // var averageH =(startPoint.z +endPoint.z)/2
         // startPoint.z = averageH
         // endPoint.z = averageH
-        // var point1 = that.Cartesian2toDegrees(startPoint)
-        // point1[2] += 2
-        // var point2 = that.Cartesian2toDegrees(endPoint)
+        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.startPoint = startPoint
+        // facade.endPoint = endPoint
+        facade.setBoundByPoints(startPoint,endPoint)
         facade.maxHeight = parseFloat(that.faceH)
         facade.farDistance = parseFloat(that.faceW)
       })
@@ -77,18 +89,21 @@ export default {
     },
     create() {
       var that = this;
+      facade.build();
       facade.readyPromise.then(function (base64data) {
         debugger
-        that.$layer.iframe({
+        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.faceW, 'data': base64data } }, //props
+            data: { 'imageData': { 'height': that.faceH, 'width': that.viewW, 'data': base64data,'minH':that.minH } }, //props
           },
-
+         
           area: ["60rem", "30rem"], //宽 高
           title: "天际线分析结果",
-          maxmin: false,
+          maxmin: true,
           shade: false, //是否显示遮罩
           shadeClose: false, //点击遮罩是否关闭
           cancel: () => {

+ 24 - 21
static/Config/config.js

@@ -15,7 +15,6 @@ window.baseImgLayer =
 window.baseModelQueryLayer = "http://192.168.60.2:8090/iserver/services/data-building/rest/data/featureResults.rjson?returnContent=true";
 // ai大模gugeliulanq
 window.aiModel = "https://agent-demo.h1url.cn/agents-admin-vue/#/chat/chat?shareId=f509257cc7f8964f44b177aa72549204";
-
 /**
  * 车位数量审查
  */
@@ -880,7 +879,7 @@ window.constructionmodel = [
   {
     // 榕华四季
     id: "A",
-    projectinformationid: "A1",
+    projectinformationid: "ertyuiop",
     modelname: "A1",
     creationtime: "2024-04-24 17:22:13",
     url: "http://192.168.60.2:8090/iserver/services/3D-RHSJ/rest/realspace",
@@ -3132,25 +3131,29 @@ window.ZSBC = {
     /**
      * 国有所有权
      */
-    // StateUsed: {
-    //   layerName: '国有使用权',
-    //   layerDataSource: "sanya:国有使用权", //[数据集:图层名]
-    // },
-    // /**
-    //  * 集体使用权
-    //  */
-    // CollectiveUsed : {
-    //   layerName: '集体使用权',
-    //   layerDataSource: "sanya:集体使用权", //[数据集:图层名]
-    // },
-    // /**
-    //  * 集体所有权
-    //  */
-    // CollectiveOwner: {
-    //   layerName: "集体所有权",
-    //   layerDataSource: "sanya:集体所有权", //[数据集:图层名]
+    StateUsed: {
+      layerName: '国有使用权',
+      layerDataSource: "sanya:国有使用权", //[数据集:图层名]
+      ownerfld:'RIGHT_OWNE',
+    },
+    /**
+     * 集体使用权
+     */
+    CollectiveUsed : {
+      layerName: '集体使用权',
+      layerDataSource: "sanya:集体使用权", //[数据集:图层名]
+      ownerfld:'QLR',
+    },
+    /**
+     * 集体所有权
+     */
+    CollectiveOwner: {
+      
+      layerName: "集体所有权",
+      layerDataSource: "sanya:集体所有权", //[数据集:图层名]
+      ownerfld:'SYQR',
 
-    // },
+    },
     /**
      * 地类图斑
      */
@@ -3647,4 +3650,4 @@ window.landUseNatureRelation = [
     ],
   },
 ];
-window.earthRadius = 0.994615737;
+window.earthRadius = 0.994615737;

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio