Explorar el Código

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

maxiaoxiao hace 11 meses
padre
commit
a31b61489e

+ 1 - 2
config/index.js

@@ -14,8 +14,7 @@ module.exports = {
         disableHostCheck:true,
 
         // Various Dev Server settings
-        host: '127.0.0.1',
-        // host: '0.0.0.0', // can be overwritten by process.env.HOST
+        host: '0.0.0.0', // can be overwritten by process.env.HOST
         // host: '192.168.100.252', // can be overwritten by process.env.HOST
         port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
         autoOpenBrowser: false,

+ 188 - 23
src/components/Query/clickQuery/MultiLevelQuery.vue

@@ -1,19 +1,28 @@
 <template>
-    <el-tabs class="multi_level_query_table" v-model="activeName" @tab-click="handleClick" v-if="store.state.query_pick_last_pane">
+    <el-tabs class="multi_level_query_table" v-model="activeName" @tab-click="handleClick"
+        v-if="store.state.query_pick_last_pane">
         <el-tab-pane :label="store.state.query_pick_last_pane.name" name="second">
-            <span v-for="(item_last, index) in store.state.query_pick_last_pane.value" :key="index"
+            <div class="list_vector_multi" v-for="(item_last, index) in store.state.query_pick_last_pane.value" :key="index"
                 v-if="item_last.filed != 'geom'">
-                <p>{{ item_last.filedZH }} {{ item_last.data }}</p>
-            </span>
+                <span>{{ item_last.filedZH }} {{ item_last.data }}</span>
+            </div>
         </el-tab-pane>
 
         <el-tab-pane :label="item.name" :name="item.name" v-for="(item, index) in store.state.query_pick_pane" :key="index">
 
-            <el-collapse v-for="(value, index_item) in item.value" :key="index_item" v-model="activeNames"
-                @change="handleChange">
+            <el-collapse v-for="(value, index_item) in item.value" :key="index_item" @change="handleChange">
                 <el-collapse-item :title="'地块' + (index_item + 1)" name="1">
-                    <div v-for="(value_field, index_field) in value" :key="index_field" v-if="value_field.filed != 'geom'">
-                        {{ value_field.filedZH }} :{{ value_field.data }}</div>
+                    <div class="list_vector_multi" v-for="(value_field, index_field) in value" :key="index_field"
+                        @click="go(value)" v-if="value_field.filed != 'geom'">
+
+                        <div class="filed_box">
+                            {{ value_field.filedZH }}
+                        </div>
+                        :
+                        <div class="filed_box">
+                            {{ value_field.data }}
+                        </div>
+                    </div>
 
                 </el-collapse-item>
             </el-collapse>
@@ -33,6 +42,8 @@ export default {
         return {
             activeName: 'second',
             handler_multi_level_query: null,
+            manager_multi_level_query: null,
+            manager_multi_level_vector: null,
         };
     },
     //监听属性 类似于data概念
@@ -41,6 +52,16 @@ export default {
     watch: {},
     //方法集合
     methods: {
+        go(e) {
+            console.log();
+
+            e.forEach(element => {
+                if (element.filed == "geom") {
+                    console.log(element.data);
+                }
+            });
+
+        },
         handleChange(val) {
             // console.log(val);
         },
@@ -49,7 +70,10 @@ export default {
         },
         init_handler() {
 
+
             const that = this;
+
+            that.clear_data();
             if (that.handler_multi_level_query == null) {
                 that.handler_multi_level_query = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
             }
@@ -73,6 +97,21 @@ export default {
                     position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
                 }
 
+                that.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
+                    },
+
+                })
+
                 const geojsonPoint = {
                     "type": "Point",
                     "coordinates": [longitude, latitude] // 注意经纬度顺序  
@@ -80,27 +119,46 @@ export default {
 
                 const wkt = wellknown.stringify(geojsonPoint);
                 let obj = {
+                    // "wkt": 'POINT (109.51207847188947 18.311530254307392)', //单面
+                    // "wkt": 'POINT (109.50728022974468 18.318266593715794)', //多面
                     "wkt": wkt,
+
                     "id": 'dd699f839bc04969ae2dc2e1964d0ad1',
                 }
                 GetTableData(obj).then(res => {
-                    store.state.query_pick_last_pane = {
-                        name: res.data.dataname,
-                        value: res.data.data[0]
-                    };
-                    console.log('store.state.query_pick_last_pane: ', store.state.query_pick_last_pane);
-
-                    res.data.child.forEach(element => {
-                        if (element.data.length > 1) {
-                            store.state.query_pick_pane.push({
-                                name: element.dataname,
-                                value: element.data
-                            });
-                        }
-                    });
+                    if (res.data.data != undefined) {
+                        store.state.query_pick_last_pane = {
+                            name: res.data.dataname,
+                            value: res.data.data[0]
+                        };
+                    }
+                    if (res.data.child != undefined) {
+                        store.state.query_pick_pane = [];
+                        res.data.child.forEach(element => {
+                            if (element.data.length > 1) {
+                                store.state.query_pick_pane.push({
+                                    name: element.dataname,
+                                    value: element.data
+                                });
+
+                                element.data.forEach(e => {
+                                    e.forEach((res) => {
+                                        if (res.filed == 'geom') {
+                                            let geojson = wellknown.parse(res.data);
+
+                                            that.draw_vector(geojson, e);
+
+
+                                        }
+                                    })
+                                });
+                                // that.draw_vector(e);
+                            }
+                        });
+                    }
+
                 })
 
-                console.log(store.state.query_pick_pane, "that.pane");
 
 
                 that.handler_multi_level_query.destroy();
@@ -108,11 +166,81 @@ export default {
             }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 
 
+        },
+        multiPolygonToPolygons(multiPolygon) {
+            const polygons = [];
+            multiPolygon.coordinates.forEach(polygonCoordinates => {
+                polygons.push({
+                    type: 'Polygon',
+                    coordinates: polygonCoordinates
+                });
+            });
+            return polygons;
         },
         clear_data() {
+            const that = this;
             store.state.query_pick_last_pane = null;
             store.state.query_pick_pane = [];
+            // 图标
+            var entities = that.manager_multi_level_query.entities.values;
+            for (var i = entities.length - 1; i >= 0; i--) {
+                that.manager_multi_level_query.entities.remove(entities[i]);
+            }
+            // 矢量
+
+            this.manager_multi_level_vector.removeAll();
+            // for (let index = 0; index < this.manager_multi_level_vector._primitives.length; index++) {
+            //     const element = this.manager_multi_level_vector._primitives[index];
+            //     console.log('element: ', element);
+            //     viewer.scene.primitives.remove(element);
+
+            // }
+        },
+        add_viewer_for_vector(geojson, data) {
+
+            const twoDArray = geojson.coordinates[0];
+            const oneDArray = twoDArray.reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
+
+            let polygon = new Cesium.GeometryInstance({
+                // id: JSON.stringify(obj),
+                geometry: new Cesium.PolygonGeometry({
+                    minimum: new Cesium.Cartesian3(0, 0, 0),
+                    maximum: new Cesium.Cartesian3(100000, 100000, 100000),
+                    polygonHierarchy: new Cesium.PolygonHierarchy(
+                        Cesium.Cartesian3.fromDegreesArray(oneDArray)
+                    ),
+                    height: 5,
+                    // extrudedHeight: 10,
+                })
+            })
+
+            let addPolygonGeometry = new Cesium.Primitive({
+                geometryInstances: polygon,
+                appearance: new Cesium.EllipsoidSurfaceAppearance({
+                    material: Cesium.Material.fromType('Color', {
+                        color: Cesium.Color.fromRandom({
+                            alpha: 0.8
+                        })
+                    })
+                }),
+                show: true,
+
+            })
+
+            this.manager_multi_level_vector.add(addPolygonGeometry)
+        },
+        draw_vector(geojson, data) {
+            const that = this;
+            // 多面转面,在加载
+            if (geojson.type == 'MultiPolygon') {
+                let polygons = that.multiPolygonToPolygons(geojson);
 
+                polygons.forEach((res) => {
+                    that.add_viewer_for_vector(res, data);
+                })
+            } else {
+                that.add_viewer_for_vector(geojson, data);
+            }
         }
     },
     beforeCreate() { }, //生命周期 - 创建之前
@@ -122,6 +250,13 @@ export default {
         const that = this;
         this.$nextTick(() => {
             that.handler_multi_level_query = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
+
+            that.manager_multi_level_query = new Cesium.CustomDataSource("manager_multi_level_query");
+            viewer.dataSources.add(that.manager_multi_level_query);
+
+            this.manager_multi_level_vector = new Cesium.PrimitiveCollection();
+            this.manager_multi_level_vector.destroyPrimitives = false;
+            viewer.scene.primitives.add(this.manager_multi_level_vector);
         })
 
     }, //生命周期 - 挂在完成
@@ -155,6 +290,36 @@ export default {
     color: #64daff !important;
     font-weight: 600;
 }
+
+
+.el-tab-pane {
+    height: 33rem;
+    overflow: auto;
+}
+
+
+.list_vector_multi {
+    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;
+
+    border-right: 1px solid #CCC;
+
+    // border-bottom:1px solid #CCC ;
+}
+
+.list_vector_multi:last-child {
+
+    border-bottom: 1px solid #CCC;
+}
+
+.filed_box {
+    display: inline-block;
+}
 </style>
 
 

+ 5 - 5
src/components/TerrainAnalysis/TerrainCutFillAnalysis/TerrainCutFillAnalysis.vue

@@ -300,14 +300,14 @@ export default {
 
 
 
-      const terrainP = new Cesium.CesiumTerrainProvider({
-        url: 'http://192.168.60.2:8090/iserver/services/3D-local3DCache-SanYaShi_GaoCheng_Level_16DataSource/rest/realspace/datas/%E4%B8%89%E4%BA%9A%E5%B8%82_%E9%AB%98%E7%A8%8B_Level_16%40DataSource',
-        isSct: true//地形服务源自SuperMap iServer发布时需设置isSct为true
-      });
+      // const terrainP = new Cesium.CesiumTerrainProvider({
+      //   url: 'http://192.168.60.2:8090/iserver/services/3D-local3DCache-SanYaShi_GaoCheng_Level_16DataSource/rest/realspace/datas/%E4%B8%89%E4%BA%9A%E5%B8%82_%E9%AB%98%E7%A8%8B_Level_16%40DataSource',
+      //   isSct: true//地形服务源自SuperMap iServer发布时需设置isSct为true
+      // });
 
 
 
-      viewer.terrainProvider = terrainP;
+      // viewer.terrainProvider = terrainP;
 
 
 

+ 1 - 1
src/components/sceneAtttribute/basicOptions/basicOptions.vue

@@ -171,7 +171,7 @@ export default {
       shadowMap: false,
       sunShow: false,
       timeline: false,
-      depthAgainst: true,
+      depthAgainst: false,
       atomsphereRender: true,
       fogEffect: false,
       nightView:false,

+ 114 - 0
src/views/ConstructionApplication3D/ArchitecturaAnalysis/ArchitecturaAnalysis.vue

@@ -0,0 +1,114 @@
+<template>
+  <div
+    class="ZTGlobal"
+    style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white"
+  >
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-table
+          ref="table"
+          :data="TableData"
+          :highlight-current-row="true"
+          @current-change="handleCurrentChange"
+          style="width: 100%"
+        >
+          <el-table-column label="描述" align="center">
+            <template #default="{ row }">
+              {{ row.ms }}
+            </template>
+          </el-table-column>
+          <el-table-column label="分析条件" align="center">
+            <template #default="{ row }">
+              <span v-html="row.jisuan"></span>
+            </template>
+          </el-table-column>
+          <el-table-column label="是否合规" align="center">
+            <template #default="{ row }">
+              {{ row.jg }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { isNumber } from "lodash";
+
+export default {
+  data() {
+    return {
+      TableData: [],
+    };
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    layerid: {
+      type: String,
+      default: "",
+    },
+    lydata: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+    lyoption: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+  computed: {},
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      let layerDataList = this.info.layerDataList;
+      const theightData = _.flatMap(layerDataList, "data").filter(
+        (item) => item.label === "THEIGHT"
+      );
+
+      theightData.forEach((element) => {
+        element.value = Number(element.value).toFixed(2);
+      });
+
+      const valueCounts = _.countBy(theightData, "value");
+      let dgData = {
+        ms: "三栋以上不等高",
+        jisuan: Object.keys(valueCounts)
+          .map((key) => `${key}米 : ${valueCounts[key]} 栋`)
+          .join("<br> "),
+      };
+      const filteredCounts = _.pickBy(valueCounts, (count, value) => count > 3);
+      if (filteredCounts != {}) {
+        dgData.jg = "是";
+      } else {
+        dgData.jg = "否";
+      }
+      this.TableData.push(dgData);
+    },
+  },
+
+  beforeDestroy() {},
+};
+</script>
+<style lang="scss">
+@import "@/../../zt.scss";
+</style>
+<style lang="scss" scoped>
+.el-card {
+  border: 0px solid #02a7f0;
+}
+.el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 5 - 0
src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/BenchmarkLandPrice.vue

@@ -315,6 +315,11 @@ export default {
         );
       });
       handlerPolygon.drawEvt.addEventListener((result) => {
+
+        handlerPolygon.polygon.show = true;
+        handlerPolygon.polyline.show = true;
+        handlerPolygon.polygon.polygon.material.color =
+          Cesium.Color.CHARTREUSE.withAlpha(0.5);
         that.tooltip.setVisible(false);
         var polygon = result.object;
         if (!polygon) {

+ 1 - 1
src/views/ConstructionApplication3D/BenchmarkLandPriceAnalysis/jzdjfxsmjg.vue

@@ -322,7 +322,7 @@ export default {
           id: "HZFW",
           polygon: {
             hierarchy: Cesium.Cartesian3.fromDegreesArray(points),
-            material: Cesium.Color.RED.withAlpha(0.4),
+            material: Cesium.Color.CHARTREUSE.withAlpha(0.5), //Cesium.Color.RED.withAlpha(0.4),
             outline: true,
             outlineColor: Cesium.Color.BLACK,
             outlineWidth: 2.0,

+ 32 - 16
src/views/ConstructionApplication3D/Demolition/DemolitionList.vue

@@ -443,7 +443,6 @@ import QMShowInfo from "./QMShowInfo.vue";
 import ZDSetInfo from "./ZDSetInfo.vue";
 import ZDShowInfo from "./ZDShowInfo.vue";
 import Property from "./Property.vue";
-
 var setInputHandle;
 var handlerPolygon;
 var polygonEntity = null;
@@ -2062,7 +2061,9 @@ export default {
       var fieldValues = [];
       var geometry = null;
       if (features == null) return;
+      var attributes;
       for (var i = 0; i < features.length; i++) {
+
         fieldNames = features[i].fieldNames;
         fieldValues = features[i].fieldValues;
         for (var j = 0; j < fieldNames.length; j++) {
@@ -2071,31 +2072,46 @@ export default {
             break;
           }
         }
+
+        attributes = {
+          fieldNames: this.cqResult.fieldInfos,
+          fieldValues: fieldValues,
+        };
+
         if (smidIndex > -1) {
           if (fieldValues[smidIndex] == smid) {
+
             geometry = features[i].geometry;
             break;
           }
         }
+
       }
       var positions = [];
       for (var i = 0; i < geometry.points.length; i++) {
         positions.push(geometry.points[i].x);
         positions.push(geometry.points[i].y);
       }
-      var label = new Cesium.Entity({
-        label: {
-          text: cqr,
-          heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
-          font: "14px sans-serif",
-        },
-        position: Cesium.Cartesian3.fromDegrees(
-          geometry.center.x,
-          geometry.center.y,
-          35
-        ),
-      });
+      if (cqr && cqr.length > 0) {
+        viewer.entities.removeById("ZDLabel_" + smid);
+        var label = new Cesium.Entity({
+          id: "ZD_Label_" + smid,
+          label: {
+            text: cqr,
+            heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
+            font: "14px sans-serif",
+          },
+          position: Cesium.Cartesian3.fromDegrees(
+            geometry.center.x,
+            geometry.center.y,
+            35
+          ),
+        });
+        viewer.entities.add(label);
+      }
+      viewer.entities.removeById("ZD_" + smid);
       var entiy = new Cesium.Entity({
+        id: "ZD_" + smid,
         position: Cesium.Cartesian3.fromDegreesArray([
           geometry.center.x,
           geometry.center.y,
@@ -2112,9 +2128,9 @@ export default {
           outlineWidth: 1.0,
         },
       });
-      viewer.entities.add(label);
+      entiy.attributes = attributes;
       viewer.entities.add(entiy);
-      // viewer.flyTo(label)
+      // viewer.flyTo(entiy)
     },
     /**
      * 查询结果
@@ -2346,7 +2362,7 @@ export default {
       // fieldInfos.indexOf(fld => fld.name == cqr)
       if (cqrIndex == -1) {
         console.log("不动产中未找到产权人字段,请检查配置是否正确");
-        return;
+        // return;
       }
       //房屋结构
       var fwjgVal = "";

+ 253 - 103
src/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue

@@ -2,6 +2,10 @@
   <div
     class="ZTGlobal"
     style="width: 100%; padding: 1rem 1.1rem 0rem; color: white"
+    v-loading="loading"
+    element-loading-text="正在分析中...."
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
   >
     <el-row :gutter="10">
       <el-col :span="24">
@@ -39,6 +43,19 @@
           </el-col>
         </el-row>
         <el-row :gutter="10">
+          <el-col :span="24">
+            <div class="SaveCenter">
+              <el-button size="mini" type="primary" @click="statrSunlight"
+                >执行日照效果</el-button
+              >
+              <el-button size="mini" type="primary" @click="dqSunlight"
+                >当前日照</el-button
+              >
+            </div>
+          </el-col>
+        </el-row>
+        <el-divider></el-divider>
+        <!-- <el-row :gutter="10">
           <el-col :span="12">
             时间间隔:
             <el-input-number
@@ -55,20 +72,28 @@
               v-model="form.spacing"
             ></el-input-number>
           </el-col>
-        </el-row>
+        </el-row> -->
         <el-row :gutter="10">
-          <el-col :span="24">
-            <div class="SaveCenter">
-              <el-button size="mini" type="primary" @click="statrSunlight"
-                >执行日照效果</el-button
-              >
-              <el-button size="mini" type="primary" @click="dqSunlight"
-                >当前日照</el-button
-              >
-            </div>
+          <el-col :span="12" style="text-align: center">
+            X坐标(度):
+            <el-input-number
+              size="mini"
+              step="0.000001"
+              v-model="form.x"
+              @change="XYChange"
+            ></el-input-number>
+          </el-col>
+          <el-col :span="12" style="text-align: center">
+            Y坐标(度):
+            <el-input-number
+              size="mini"
+              step="0.000001"
+              v-model="form.y"
+              @change="XYChange"
+            ></el-input-number>
           </el-col>
         </el-row>
-        <el-divider></el-divider>
+
         <el-row :gutter="10">
           <el-col :span="12">
             底部高程(米):
@@ -97,31 +122,65 @@
 
     <div class="SaveCenter">
       <el-button size="mini" type="primary" @click="onSubmit"
-        >阴影分析</el-button
+        >日照时长分析</el-button
       >
       <el-button size="mini" @click="resetForm">清除</el-button>
     </div>
+    <el-row :gutter="10">
+      <el-col :span="24">
+        <el-table
+          size="mini"
+          :data="tableData"
+          style="width: 100%"
+          :highlight-current-row="true"
+          @row-click="rowClick"
+        >
+          <el-table-column prop="heightText" label="高程"> </el-table-column>
+          <el-table-column prop="sunDate" label="日照时间"> </el-table-column>
+          <el-table-column
+            prop="shadowRadioText"
+            label="日照率"
+          ></el-table-column>
+          <!-- <el-table-column prop="longitudeText" label="经度"> </el-table-column>
+          <el-table-column prop="latitudeText" label="纬度"> </el-table-column>
+          <el-table-column prop="dateScope" label="日照范围"> </el-table-column> -->
+        </el-table>
+      </el-col>
+    </el-row>
   </div>
 </template>
 
 <script>
 let handlerPolygon = null,
   layers = null,
-  shadowQuery = null;
+  shadowQuery = null,
+  handlerClick = null,
+  markedPoints = [];
+import {
+  point,
+  buffer,
+  bboxPolygon,
+  square,
+  destination,
+  polygon,
+} from "@turf/turf";
 export default {
   data() {
     return {
       tooltip: createTooltip(document.body),
       form: {
         timeInterval: 60,
-        spacing: 10,
+        spacing: 3,
         selDate: new Date(),
         startTime: 10,
         endTime: 14,
         bottomHeight: 0,
         extrudeHeight: 100,
+        x: 0,
+        y: 0,
       },
-      datavalue: [8, 18],
+      loading: false,
+      datavalue: [10, 14],
       positions: [],
       points: [],
       // layers: null,
@@ -136,6 +195,7 @@ export default {
         },
         20: "20点",
       },
+      tableData: [],
     };
   },
   props: {
@@ -168,9 +228,6 @@ export default {
   },
   methods: {
     init() {
-      if (layers) {
-        return;
-      }
       if (viewer.shadows == false) {
         viewer.shadows = true; //开启场景阴影
         viewer.terrainShadows = true; //地形阴影
@@ -185,19 +242,33 @@ export default {
         }
       }
 
-      //创建阴影查询对象
-      if (!shadowQuery) {
-        shadowQuery = new Cesium.ShadowQueryPoints(scene);
-        shadowQuery.build();
-      }
-      let that = this;
-      //   this.setCurrentTime();
       this.dqSunlight();
-      handlerPolygon = new Cesium.DrawHandler(
-        viewer,
-        Cesium.DrawMode.Polygon,
-        0
-      );
+    },
+
+    //提交数据
+    onSubmit() {
+      this.analysis();
+    },
+    //清空from
+    resetForm() {
+      this.clear();
+      this.clearmarkedPoints();
+    },
+    /**
+     * 开始分析
+     */
+    analysis() {
+      let that = this;
+      that.tableData = [];
+      if (!handlerPolygon) {
+        handlerPolygon = new Cesium.DrawHandler(
+          viewer,
+          Cesium.DrawMode.Point,
+          0
+        );
+      }
+
+      handlerPolygon.activate();
       handlerPolygon.activeEvt.addEventListener(function (isActive) {
         if (isActive == true) {
           viewer.enableCursorStyle = false;
@@ -211,37 +282,63 @@ export default {
       handlerPolygon.movingEvt.addEventListener((windowPosition) => {
         that.tooltip.showAt(
           windowPosition,
-          "<p>点击鼠标左键开始绘制分析区域</p>"
+          "<p>点击鼠标左键开始选择分析区域</p>"
         );
       });
       handlerPolygon.drawEvt.addEventListener((result) => {
-        that.tooltip.setVisible(false);
-        let positions = that.positions;
-        let points = that.points;
+        that.resetForm();
+        // that.clickSunDate();
+        that.loading = true;
+        let scene = viewer.scene;
 
-        points.length = 0;
-        var polygon = result.object;
-        if (!polygon) {
-          return;
-        }
-        polygon.show = false;
-        handlerPolygon.polyline.show = false;
-        positions = [].concat(polygon.positions);
-        positions = Cesium.arrayRemoveDuplicates(
-          positions,
-          Cesium.Cartesian3.equalsEpsilon
-        );
-        //遍历多边形,取出所有点
-        for (var i = 0, len = positions.length; i < len; i++) {
-          //转化为经纬度,并加入至临时数组
-          var cartographic = Cesium.Cartographic.fromCartesian(
-            polygon.positions[i]
-          );
-          var longitude = Cesium.Math.toDegrees(cartographic.longitude);
-          var latitude = Cesium.Math.toDegrees(cartographic.latitude);
-          points.push(longitude);
-          points.push(latitude);
+        //创建阴影查询对象
+        if (!shadowQuery) {
+          shadowQuery = new Cesium.ShadowQueryPoints(scene);
+          shadowQuery.queryPointsEvent.addEventListener(function (e) {
+            that.tableData = [];
+            that.loading = false;
+            e.forEach(function (a) {
+              var e_cartographic = Cesium.Cartographic.fromCartesian(
+                a.position
+              );
+              var e_shadowRadio = shadowQuery.getShadowRadio(e_cartographic);
+              var e_longitude = Cesium.Math.toDegrees(e_cartographic.longitude);
+              var e_latitude = Cesium.Math.toDegrees(e_cartographic.latitude);
+              var e_height = e_cartographic.height;
+              let sunForm = {};
+              sunForm.shadowRadioText =
+                (Number(e_shadowRadio.toFixed(2)) * 100).toFixed(2) + "%";
+              sunForm.longitudeText = Number(e_longitude.toFixed(6));
+              sunForm.latitudeText = Number(e_latitude.toFixed(6));
+              sunForm.heightText = Number(e_height.toFixed(2));
+              sunForm.dateScope =
+                that.datavalue[0] + "时--" + that.datavalue[1] + "时";
+              if (that.datavalue[0] != that.datavalue[1]) {
+                sunForm.sunDate =
+                  (
+                    (that.datavalue[1] + 1 - that.datavalue[0]) *
+                    e_shadowRadio
+                  ).toFixed(2) + "小时";
+              } else {
+                sunForm.sunDate = "";
+              }
+              that.tableData.push(sunForm);
+            });
+          });
         }
+        that.tooltip.setVisible(false);
+        var position = result.object.position;
+        var cartographic = Cesium.Cartographic.fromCartesian(position);
+        var longitude = Cesium.Math.toDegrees(cartographic.longitude);
+        var latitude = Cesium.Math.toDegrees(cartographic.latitude);
+        var clickPoint = point([longitude, latitude]); //
+        var buffered = buffer(clickPoint, (that.form.spacing / 2 + 1) / 1000, {
+          units: "kilometers",
+        });
+
+        that.form.x = longitude;
+        that.form.y = latitude;
+        that.points = buffered.geometry.coordinates[0].flat();
         //设置分析对象的开始结束时间
         var dateValue = that.form.selDate;
         var st = new Date(dateValue);
@@ -262,49 +359,25 @@ export default {
         var bh = Number(that.form.bottomHeight);
         var eh = Number(that.form.extrudeHeight);
         shadowQuery.qureyRegion({
-          position: points,
+          position: that.points,
           bottom: bh,
           extend: eh,
         });
         shadowQuery.build();
       });
     },
-
-    //提交数据
-    onSubmit() {
-      this.analysis();
-    },
-    //清空from
-    resetForm() {
-      this.clear();
-    },
-    /**
-     * 开始分析
-     */
-    analysis() {
-      // this.init();
-
-      handlerPolygon.deactivate();
-      handlerPolygon.activate();
-    },
     clear() {
+      this.form.x = 0;
+      this.form.y = 0;
+      this.tableData = [];
       if (handlerPolygon) {
+        handlerPolygon.clear();
         handlerPolygon.deactivate();
       }
       this.tooltip.setVisible(false);
-      // common.clearHandlerDrawing();
-      // viewer.entities.removeAll();
-
-      // let layers = scene.layers.layerQueue;
-      // for (var i = 0; i < layers.length; i++) {
-      //   layers[i].shadowType = 0;
-      // }
       if (shadowQuery) {
-        shadowQuery.qureyRegion({
-          position: [0, 0],
-          bottom: 0,
-          extend: 0,
-        });
+        shadowQuery.destroy();
+        shadowQuery = null;
       }
 
       this.positions = [];
@@ -353,14 +426,74 @@ export default {
       viewer.clock.multiplier = 1;
       viewer.clock.shouldAnimate = true;
     },
+    //日照列表行被点击
+    rowClick(row, column, event) {
+      debugger;
+      this.clearmarkedPoints();
+      var markedPoint = viewer.entities.add(
+        new Cesium.Entity({
+          point: new Cesium.PointGraphics({
+            color: new Cesium.Color(1, 1, 0, 0.5),
+            pixelSize: 15,
+          }),
+          position: Cesium.Cartesian3.fromDegrees(
+            row.longitudeText,
+            row.latitudeText,
+            row.heightText
+          ),
+        })
+      );
+      markedPoints.push(markedPoint);
+    },
+    //清除点击的黄色圆圈
+    clearmarkedPoints() {
+      for (let i = 0; i < markedPoints.length; i++) {
+        viewer.entities.remove(markedPoints[i]);
+      }
+      markedPoints = [];
+    },
+    // x或y变化触发
+    XYChange() {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
+      let that = this;
+
+      var clickPoint = point([that.form.x, that.form.y]); //
+      var buffered = buffer(clickPoint, (that.form.spacing / 2 + 1) / 1000, {
+        units: "kilometers",
+      });
+      that.points = buffered.geometry.coordinates[0].flat();
+
+      //设置分析区域、底部高程和拉伸高度
+      var bh = Number(that.form.bottomHeight);
+      var eh = Number(that.form.extrudeHeight);
+      shadowQuery.qureyRegion({
+        position: that.points,
+        bottom: bh,
+        extend: eh,
+      });
+      shadowQuery.build();
+    },
 
+    // 时间范围变化触发
     datavalueChange(val) {
+      if (val[0] == val[1]) {
+        this.form.timeInterval = 1;
+      } else {
+        this.form.timeInterval = 60;
+      }
       this.form.startTime = val[0];
       this.form.endTime = val[1];
     },
   },
   watch: {
     "form.selDate": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       let st = new Date(newValue);
       st.setHours(this.form.startTime);
       let et = new Date(newValue);
@@ -369,40 +502,48 @@ export default {
       shadowQuery.endTime = Cesium.JulianDate.fromDate(et);
     },
     "form.startTime": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       let thisdate = new Date(this.form.selDate);
       var st = thisdate;
       st.setHours(Number(newValue));
       shadowQuery.startTime = Cesium.JulianDate.fromDate(st);
     },
     "form.endTime": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       let thisdate = new Date(this.form.selDate);
       var et = thisdate;
       et.setHours(Number(newValue));
       shadowQuery.endTime = Cesium.JulianDate.fromDate(et);
     },
     "form.timeInterval": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       shadowQuery.timeInterval = Number(newValue);
-      // var bh = Number(this.bottomHeight);
-      // var eh = Number(this.extrudeHeight);
-      // shadowQuery.qureyRegion({
-      //   position: this.points,
-      //   bottom: bh,
-      //   extend: eh
-      // });
+
       shadowQuery.build();
     },
     "form.spacing": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       shadowQuery.spacing = Number(newValue);
-      // var bh = Number(this.bottomHeight);
-      // var eh = Number(this.extrudeHeight);
-      // shadowQuery.qureyRegion({
-      //   position: this.points,
-      //   bottom: bh,
-      //   extend: eh
-      // });
+
       shadowQuery.build();
     },
     "form.bottomHeight": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       var bh = Number(newValue);
       var eh = Number(this.form.extrudeHeight);
       shadowQuery.qureyRegion({
@@ -413,6 +554,10 @@ export default {
       shadowQuery.build();
     },
     "form.extrudeHeight": function (newValue) {
+      if (!shadowQuery) {
+        return;
+      }
+      this.loading = true;
       var bh = Number(this.form.bottomHeight);
       var eh = Number(newValue);
       shadowQuery.qureyRegion({
@@ -425,8 +570,13 @@ export default {
   },
   beforeDestroy() {
     this.clear();
-    shadowQuery.destroy();
-    handlerPolygon.deactivate();
+    this.clearmarkedPoints();
+    if (shadowQuery) {
+      shadowQuery.destroy();
+    }
+    if (handlerPolygon) {
+      handlerPolygon.deactivate();
+    }
     handlerPolygon = undefined;
     this.dqSunlight();
   },

+ 442 - 0
src/views/ConstructionApplication3D/projectManagement/ghqk.js

@@ -0,0 +1,442 @@
+import {
+  cartesian3ToWGS84,
+  mapQuery,
+  flatten,
+  mercator2lonLat,
+  undergroundMode,
+} from "@/utils/MapHelper/MapHelper.js";
+import { v4 as uuidv4 } from "uuid";
+const ghqk = {
+  CZKFBJDatas: [],
+  /**
+   * 规划情况
+   * 查询 永久基本农田 生态保护红线 城镇开发边界
+   */
+  async getPlanning(LandPlanningList, Minfo) {
+    this.removeCZKFBJDatasList();
+    debugger;
+
+    let geo = LandPlanningList[0].geometry;
+    this.getczkfbj(geo);
+    this.getyjjbnt(geo);
+    this.getstbhhx(geo);
+  },
+  /**
+   * 加载城镇开发边界
+   * @param {*} geo
+   */
+  async getczkfbj(geo) {
+    let layer = flatten(window.layerTree).find((item) => item.core == "004001");
+    debugger;
+    if (layer && layer.date_server.url) {
+      let queryByGeometryParameters = {
+        getFeatureMode: "BUFFER",
+        datasetNames: [
+          layer.date_server.dataSourceName +
+            ":" +
+            layer.date_server.datasetName,
+        ],
+        geometry: geo,
+        bufferDistance: 0.005,
+        hasGeometry: "true",
+      };
+      let e = await mapQuery(
+        layer.date_server.url + "/featureResults.json?returnContent=true",
+        queryByGeometryParameters
+      );
+      debugger;
+
+      if (e && e.totalCount > 0) {
+        e.features.forEach((feature) => {
+          let featureData = {
+            id: uuidv4(),
+            layerInfo: layer,
+            data: [],
+            geometry: feature.geometry,
+            entities: [],
+          };
+          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],
+              });
+            }
+          });
+
+          let point3ds = [];
+          let pointholes = [];
+          let startindex = 0;
+          for (
+            let index = 0;
+            index < featureData.geometry.parts.length;
+            index++
+          ) {
+            let thisps = [];
+            const endindex = startindex + featureData.geometry.parts[index];
+            let geometryPoints = featureData.geometry.points.slice(
+              startindex,
+              endindex
+            );
+            for (
+              let pointindex = 0;
+              pointindex < geometryPoints.length;
+              pointindex++
+            ) {
+              const point = geometryPoints[pointindex];
+              thisps.push(point.x);
+              thisps.push(point.y);
+            }
+            if (featureData.geometry.partTopo[index] === 1) {
+              point3ds.push(Cesium.Cartesian3.fromDegreesArray(thisps));
+            } else {
+              pointholes.push(Cesium.Cartesian3.fromDegreesArray(thisps));
+            }
+
+            startindex = endindex;
+          }
+
+          if (point3ds.length > 0 && pointholes.length > 0) {
+            let holes = [];
+            pointholes.forEach((hole) => {
+              holes.push({ positions: hole });
+            });
+
+            var orangePolygon1 = viewer.entities.add({
+              id: "CZKFBJ-" + featureData.id,
+              polygon: {
+                hierarchy: {
+                  // Cesium.PolygonHierarchy
+                  positions: point3ds[0],
+                  holes: holes, // Cesium.PolygonHierarchy 数组
+                },
+                material: new Cesium.Color(
+                  240 / 255,
+                  176 / 255,
+                  207 / 255,
+                  0.5
+                ),
+                outline: true,
+                outlineColor: Cesium.Color.BLACK,
+                outlineWidth: 2.0,
+              },
+            });
+          } else if (point3ds.length > 0) {
+            var orangePolygon1 = viewer.entities.add({
+              id: "CZKFBJ-" + featureData.id,
+              polygon: {
+                hierarchy: point3ds[0],
+                material: new Cesium.Color(
+                  240 / 255,
+                  176 / 255,
+                  207 / 255,
+                  0.5
+                ),
+                outline: true,
+                outlineColor: Cesium.Color.BLACK,
+                outlineWidth: 2.0,
+              },
+            });
+          }
+
+          this.CZKFBJDatas.push(featureData);
+        });
+      }
+    }
+  },
+  /**
+   * 加载永久基本农田
+   * @param {*} geo
+   */
+  async getyjjbnt(geo) {
+    let layer = flatten(window.layerTree).find((item) => item.core == "004003");
+    debugger;
+    if (layer && layer.date_server.url) {
+      let queryByGeometryParameters = {
+        getFeatureMode: "BUFFER",
+        datasetNames: [
+          layer.date_server.dataSourceName +
+            ":" +
+            layer.date_server.datasetName,
+        ],
+        geometry: geo,
+        bufferDistance: 0.005,
+        hasGeometry: "true",
+      };
+      let e = await mapQuery(
+        layer.date_server.url + "/featureResults.json?returnContent=true",
+        queryByGeometryParameters
+      );
+      debugger;
+
+      if (e && e.totalCount > 0) {
+        e.features.forEach((feature) => {
+          let featureData = {
+            id: uuidv4(),
+            layerInfo: layer,
+            data: [],
+            geometry: feature.geometry,
+            entities: [],
+          };
+          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],
+              });
+            }
+          });
+
+          let point3ds = [];
+          let pointholes = [];
+          let startindex = 0;
+          for (
+            let index = 0;
+            index < featureData.geometry.parts.length;
+            index++
+          ) {
+            let thisps = [];
+            const endindex = startindex + featureData.geometry.parts[index];
+            let geometryPoints = featureData.geometry.points.slice(
+              startindex,
+              endindex
+            );
+            for (
+              let pointindex = 0;
+              pointindex < geometryPoints.length;
+              pointindex++
+            ) {
+              const point = geometryPoints[pointindex];
+              thisps.push(point.x);
+              thisps.push(point.y);
+            }
+            if (featureData.geometry.partTopo[index] === 1) {
+              point3ds.push(Cesium.Cartesian3.fromDegreesArray(thisps));
+            } else {
+              pointholes.push(Cesium.Cartesian3.fromDegreesArray(thisps));
+            }
+
+            startindex = endindex;
+          }
+
+          if (point3ds.length > 0 && pointholes.length > 0) {
+            let holes = [];
+            pointholes.forEach((hole) => {
+              holes.push({ positions: hole });
+            });
+
+            var orangePolygon1 = viewer.entities.add({
+              id: "YJJBNT-" + featureData.id,
+              polygon: {
+                hierarchy: {
+                  // Cesium.PolygonHierarchy
+                  positions: point3ds[0],
+                  holes: holes, // Cesium.PolygonHierarchy 数组
+                },
+                material: new Cesium.Color(
+                  240 / 255,
+                  176 / 255,
+                  207 / 255,
+                  0.5
+                ),
+                outline: true,
+                outlineColor: Cesium.Color.BLACK,
+                outlineWidth: 2.0,
+              },
+            });
+          } else if (point3ds.length > 0) {
+            var orangePolygon1 = viewer.entities.add({
+              id: "YJJBNT-" + featureData.id,
+              polygon: {
+                hierarchy: point3ds[0],
+                material: new Cesium.Color(
+                  240 / 255,
+                  176 / 255,
+                  207 / 255,
+                  0.5
+                ),
+                outline: true,
+                outlineColor: Cesium.Color.BLACK,
+                outlineWidth: 2.0,
+              },
+            });
+          }
+
+          this.CZKFBJDatas.push(featureData);
+        });
+      }
+    }
+  },
+  /**
+   * 加载生态保护红线
+   * @param {*} geo
+   */
+  async getstbhhx(geo) {
+    let layer = flatten(window.layerTree).find((item) => item.core == "004002");
+    debugger;
+    if (layer && layer.date_server.url) {
+      let queryByGeometryParameters = {
+        getFeatureMode: "BUFFER",
+        datasetNames: [
+          layer.date_server.dataSourceName +
+            ":" +
+            layer.date_server.datasetName,
+        ],
+        geometry: geo,
+        bufferDistance: 0.005,
+        hasGeometry: "true",
+      };
+      let e = await mapQuery(
+        layer.date_server.url + "/featureResults.json?returnContent=true",
+        queryByGeometryParameters
+      );
+      debugger;
+
+      if (e && e.totalCount > 0) {
+        e.features.forEach((feature) => {
+          let featureData = {
+            id: uuidv4(),
+            layerInfo: layer,
+            data: [],
+            geometry: feature.geometry,
+            entities: [],
+          };
+          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],
+              });
+            }
+          });
+
+          let point3ds = [];
+          let pointholes = [];
+          let startindex = 0;
+          for (
+            let index = 0;
+            index < featureData.geometry.parts.length;
+            index++
+          ) {
+            let thisps = [];
+            const endindex = startindex + featureData.geometry.parts[index];
+            let geometryPoints = featureData.geometry.points.slice(
+              startindex,
+              endindex
+            );
+            for (
+              let pointindex = 0;
+              pointindex < geometryPoints.length;
+              pointindex++
+            ) {
+              const point = geometryPoints[pointindex];
+              thisps.push(point.x);
+              thisps.push(point.y);
+            }
+            if (featureData.geometry.partTopo[index] === 1) {
+              point3ds.push(Cesium.Cartesian3.fromDegreesArray(thisps));
+            } else {
+              pointholes.push(Cesium.Cartesian3.fromDegreesArray(thisps));
+            }
+
+            startindex = endindex;
+          }
+
+          if (point3ds.length > 0 && pointholes.length > 0) {
+            let holes = [];
+            pointholes.forEach((hole) => {
+              holes.push({ positions: hole });
+            });
+
+            var orangePolygon1 = viewer.entities.add({
+              id: "STBHHX-" + featureData.id,
+              polygon: {
+                hierarchy: {
+                  // Cesium.PolygonHierarchy
+                  positions: point3ds[0],
+                  holes: holes, // Cesium.PolygonHierarchy 数组
+                },
+                material: new Cesium.Color(
+                  240 / 255,
+                  176 / 255,
+                  207 / 255,
+                  0.5
+                ),
+                outline: true,
+                outlineColor: Cesium.Color.BLACK,
+                outlineWidth: 2.0,
+              },
+            });
+          } else if (point3ds.length > 0) {
+            var orangePolygon1 = viewer.entities.add({
+              id: "STBHHX-" + featureData.id,
+              polygon: {
+                hierarchy: point3ds[0],
+                material: new Cesium.Color(
+                  240 / 255,
+                  176 / 255,
+                  207 / 255,
+                  0.5
+                ),
+                outline: true,
+                outlineColor: Cesium.Color.BLACK,
+                outlineWidth: 2.0,
+              },
+            });
+          }
+
+          this.CZKFBJDatas.push(featureData);
+        });
+      }
+    }
+  },
+
+  //删除城镇开发边界
+  removeCZKFBJDatasList() {
+    for (let index = 0; index < this.CZKFBJDatas.length; index++) {
+      const element = this.CZKFBJDatas[index];
+
+      viewer.entities.removeById("CZKFBJ-" + element.id);
+      viewer.entities.removeById("YJJBNT-" + element.id);
+      viewer.entities.removeById("STBHHX-" + element.id);
+    }
+    this.CZKFBJDatas = [];
+  },
+  /**
+   * 清除所有规划情况图层
+   */
+  removeAll() {
+    this.removeCZKFBJDatasList();
+  },
+};
+/**
+ * 规划情况分析
+ */
+export default ghqk;

+ 302 - 55
src/views/ConstructionApplication3D/projectManagement/projectManagement.vue

@@ -261,6 +261,32 @@
                                 >指标分析
                               </el-button>
                             </el-col>
+                            <el-col :span="8">
+                              <el-button
+                                type="primary"
+                                size="mini"
+                                @click.stop="PlanningAnalysis(itemModel)"
+                                >规划情况
+                              </el-button>
+                            </el-col>
+                            <el-col :span="8">
+                              <el-button
+                                type="primary"
+                                size="mini"
+                                @click.stop="CarPark(itemModel)"
+                                >车位审核
+                              </el-button>
+                            </el-col>
+                          </el-row>
+                          <el-row :gutter="24">
+                            <el-col :span="8">
+                              <el-button
+                                type="primary"
+                                size="mini"
+                                @click.stop="ArchitecturalAnalysis(itemModel)"
+                                >建筑风貌
+                              </el-button>
+                            </el-col>
                           </el-row>
                         </el-row>
                       </el-card>
@@ -500,6 +526,22 @@
                                   >指标分析
                                 </el-button>
                               </el-col>
+                              <el-col :span="8">
+                                <el-button
+                                  type="primary"
+                                  size="mini"
+                                  @click.stop="PlanningAnalysis(itemModel)"
+                                  >规划情况
+                                </el-button>
+                              </el-col>
+                              <el-col :span="8">
+                                <el-button
+                                  type="primary"
+                                  size="mini"
+                                  @click.stop="CarPark(itemModel)"
+                                  >车位审核
+                                </el-button>
+                              </el-col>
                             </el-row>
                             <!-- </el-col> -->
                           </el-row>
@@ -541,6 +583,7 @@ import addProjectInfo from "@/views/ConstructionApplication3D/projectInfo/addPro
 import projectInfo from "@/views/ConstructionApplication3D/projectInfo/projectInfo.vue";
 import skylineAnalysis from "@/views/ConstructionApplication3D/skylineAnalysis/skylineAnalysis.vue";
 import SunlightAnalysis from "@/views/ConstructionApplication3D/SunlightAnalysis/SunlightAnalysis.vue";
+// import SunlightAnalysis from "@/views/ConstructionApplication3D/SunlightAnalysis/SunlightTImesAnalysis.vue";
 import ConstructionModelInfo from "@/views/ConstructionApplication3D/ConstructionModelInfo/ConstructionModelInfo.vue";
 import addConstructionModelInfo from "@/views/ConstructionApplication3D/ConstructionModelInfo/addConstructionModelInfo.vue";
 import PlanningPlotInfo from "@/views/ConstructionApplication3D/PlanningPlot/PlanningPlotInfo.vue";
@@ -549,6 +592,8 @@ import backLineAnalysisinfo from "@/views/ConstructionApplication3D/backLineAnal
 import ZYAnalysisinfo from "@/views/ConstructionApplication3D/ZYAnalysisinfo/ZYAnalysisinfo.vue";
 import ZBFXAnalysisinfo from "@/views/ConstructionApplication3D/ZBFXAnalysisinfo/ZBFXAnalysisinfo.vue";
 import MXDBinfo from "@/views/ConstructionApplication3D/MXDBinfo/MXDBinfo.vue";
+import ArchitecturaAnalysis from "@/views/ConstructionApplication3D/ArchitecturaAnalysis/ArchitecturaAnalysis.vue";
+import ghqk from "./ghqk.js";
 export default {
   name: "constructionApplication3D",
   data() {
@@ -649,7 +694,10 @@ export default {
     },
 
     //分析列表显隐
-    openAnalyzeList(itemModel) {
+    async openAnalyzeList(itemModel) {
+      if (this.layerList.length == 0) {
+        this.SelectConstructionModelHendle(itemModel);
+      }
       const classList =
         this.$refs[itemModel.id + "AnalyzeList"][0].$el.classList;
       classList.toggle("none");
@@ -899,7 +947,7 @@ export default {
           data: { info }, //props
         },
         offset: [left, top], //left top
-        area: ["430px", "550px"],
+        area: ["430px", "600px"],
         title: "日照分析",
         maxmin: false,
         shade: false, //是否显示遮罩
@@ -912,8 +960,8 @@ export default {
     },
 
     //添加模型
-    addModel(Minfo) {
-      // this.yp();
+    async addModel(Minfo) {
+      await this.yp([Minfo]);
       var modelLayer = scene.open(Minfo.url);
       let that = this;
       that.layerDataList = [];
@@ -1006,8 +1054,8 @@ export default {
       });
     },
     //添加多个模型
-    addModels(Minfos, completed) {
-      // this.yp();
+    async addModels(Minfos, completed) {
+      await this.yp(Minfos);
       let models = [];
       Minfos.forEach((element) => {
         var modelLayer = scene.open(element.url);
@@ -1198,12 +1246,12 @@ export default {
       this.modelsload = [];
     },
     //定位模型
-    positionModel(Minfo) {
+    async positionModel(Minfo) {
       if (this.layerList.length > 0) {
         let layer = scene.layers.find(this.layerList[0]);
         viewer.flyTo(layer);
       } else {
-        this.addModel(Minfo);
+        this.SelectConstructionModelHendle(Minfo);
       }
     },
     //模型对比按钮
@@ -1378,6 +1426,7 @@ export default {
               //打开背景  打开背景 (不会被线段覆盖)
               showBackground: true,
               heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
+              clampToS3M: true,
             },
           });
           that.LandPlanningList.push(GHYDlayerData);
@@ -1962,12 +2011,23 @@ export default {
         that.getoccupy(Minfo);
       });
     },
-    //获取占压交集
+    /**
+     * 获取用地用海分类统一颜色
+     */
+    getLandColor(name) {
+      var color = "rgb(172,255,207)";
+      window.colorList.forEach((element) => {
+        if (element.name.indexOf(name) > -1) color = element.color;
+      });
+      return color;
+    },
+    /**
+     * 获取占压交集
+     * @param Minfo
+     */
     async getoccupy(Minfo) {
       let that = this;
       if (that.LandPlanningList.length > 0) {
-        let ps = [];
-        let DKBM = [];
         let layer = flatten(window.layerTree).find(
           (item) => item.core == "002002"
         );
@@ -2027,32 +2087,20 @@ export default {
                   const element = feature.geometry.points[index];
                   ps.push(element.x);
                   ps.push(element.y);
-                  ps.push(15);
                 }
                 let DLLX = DLTBlayerData.data.find(
                   (c) => c.label == "DLMC"
                 ).value;
-                let col = Cesium.Color.ORANGE.withAlpha(0.7);
-                switch (DLLX) {
-                  case "城镇村道路用地":
-                    col = Cesium.Color.DARKGREY.withAlpha(0.7);
-                    break;
-                  case "城镇住宅用地":
-                    col = Cesium.Color.LIGHTBLUE.withAlpha(0.7);
-                    break;
-                  case "灌木林地":
-                    col = Cesium.Color.LAWNGREEN.withAlpha(0.7);
-                    break;
-                  default:
-                    break;
-                }
+                let col = Cesium.Color.fromCssColorString(
+                  that.getLandColor(DLLX)
+                );
 
                 //添加地类图斑
                 var orangePolygon1 = viewer.entities.add({
                   id: "DLTB-" + DLTBlayerData.id,
                   polygon: {
-                    hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(ps),
-                    perPositionHeight: true,
+                    hierarchy: Cesium.Cartesian3.fromDegreesArray(ps),
+                    // perPositionHeight: true,
                     material: col,
                     outline: true,
                     outlineColor: Cesium.Color.BLACK,
@@ -2065,8 +2113,7 @@ export default {
                   //点
                   position: Cesium.Cartesian3.fromDegrees(
                     DLTBlayerData.geometry.center.x,
-                    DLTBlayerData.geometry.center.y,
-                    15
+                    DLTBlayerData.geometry.center.y
                   ),
                   label: {
                     text: DLLX, //描述内容
@@ -2079,10 +2126,11 @@ export default {
                     // 中心位置
                     pixelOffset: new Cesium.Cartesian2(0, -10),
                     //设置背景颜色透明
-                    backgroundColor: new Cesium.Color(0.0, 0.0, 0.0, 0.0),
+                    backgroundColor: new Cesium.Color(0.0, 0.0, 0.0, 0.8),
                     //打开背景  打开背景 (不会被线段覆盖)
                     showBackground: true,
-                    heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
+                    heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
+                    clampToS3M: true,
                   },
                 });
                 that.DLTBlayerDatas.push(DLTBlayerData);
@@ -2094,14 +2142,21 @@ export default {
       this.openDLTBInfo(that.LandPlanningList, that.DLTBlayerDatas, Minfo);
     },
 
-    //指标分析
+    /**
+     * 指标分析
+     * @param Minfo
+     */
     normAnalysis(Minfo) {
       let that = this;
       this.getGuiHuaDiKuai(function () {
         that.getnorm(Minfo);
       });
     },
-    // 获取指标
+
+    /**
+     * 获取指标
+     * @param Minfo
+     */
     async getnorm(Minfo) {
       //组装指标对象
       let tableDataList = [];
@@ -2336,6 +2391,141 @@ export default {
       }
       this.openZBFXInfo([tableDataList]);
     },
+    /**
+     * 规划情况分析
+     */
+    async PlanningAnalysis(Minfo) {
+      let that = this;
+      this.getGuiHuaDiKuai(function () {
+        if (that.LandPlanningList.length > 0) {
+          ghqk.getPlanning(that.LandPlanningList, Minfo);
+        } else {
+          that.$message({
+            message: "当前位置未找到规划地块,请选择其他位置。",
+            type: "warning",
+          });
+        }
+      });
+    },
+    /**
+     * 建筑风貌分析
+     */
+    async ArchitecturalAnalysis(Minfo) {
+      this.openArchitecturaInfo(
+        this.layerDataList,
+        this.LandPlanningList,
+        Minfo
+      );
+    },
+
+    async CarPark(Minfo) {
+      var that = this;
+      var dataSourceName = Minfo.dataSourceName; //模型数据集
+      var dataurl =
+        Minfo.dataurl +
+        "featureResults.rjson?returnContent=true&hasGeometry=true"; //报建项目服务地址
+      var tcwLayerName = window.CarPark.tcwLayer; //停车位图层
+      var floorLayerName = window.CarPark.floorLayer; //分层矢量图层
+      // var projectBoundLayer = window.CarPark.projectBoundLayer; //停车位图层
+      var classFld = window.CarPark.ClassFld; //建筑类型:居住、办公商业 商业 酒店
+      var classFldIndex = -1;
+      var classFldVal = "";
+
+      var landNoFld = window.CarPark.LandNo; //地块编号字段
+      var landNoFldIndex = -1;
+      var landNoFldVal = "";
+
+      var JRAreaFld = window.CarPark.JRArea; //当前楼层字段 //计容面积
+      var JRAreaFldIndex = -1;
+      var JRAreaFldVal = 0.0;
+
+      var JRRationFld = window.CarPark.JRRation; //	计容率
+      var JRRationFldIndex = -1;
+      var JRRationFldVal = 0.0;
+      var JSResult = [
+        {
+          id: "",
+          projectinformationid: "",
+          modelname: "",
+          landNo: "",
+          totalMJ: "",
+          totalJRArea: "",
+          floorNumber: 1,
+          floors: {
+            layer: "",
+            mj: 0.0,
+            jrArea: 0.0,
+            rooms: 0,
+            items: [],
+          },
+          parks: {
+            totalCount: 0,
+            jdcCount: 0,
+            fjdcCount: 0,
+            floors: [
+              {
+                layer: "",
+                jdcCount: 0,
+                fjdcCount: 0,
+              },
+            ],
+          },
+        },
+      ];
+      var dataSources = [];
+      dataSources.push(dataSourceName + ":" + tcwLayerName);
+      dataSources.push(dataSourceName + ":" + floorLayerName);
+      //获取停车位及分层数据
+      var result;
+      var queryByGeometryParameters = {
+        getFeatureMode: "SQL",
+        datasetNames: dataSources,
+        queryParameter: {
+          attributeFilter: "SMID>-1",
+        },
+        hasGeometry: "true",
+      };
+      result = await mapQuery(
+        Minfo.dataurl + "/featureResults.json?returnContent=true",
+        queryByGeometryParameters
+      );
+      if (result && result.totalCount == 0) {
+        this.$message("未查询到停车位和报建分层数据数据,请重新尝试");
+        return;
+      }
+      /**
+       * 总建筑面积
+       */
+      var totalMJ = 0.0;
+      /**
+       * 总计容建筑面积
+       */
+      var totalJRArea = 0.0;
+      var jrFldIndex = -1;
+      debugger;
+      var datasetInfos = result.datasetInfos;
+      if (datasetInfos == null || datasetInfos.length == 0) {
+        that.$message("未查询到停车位和报建分层数据数据,请重新尝试");
+        return;
+      }
+      var layerName = "";
+      for (var i = 0; i < datasetInfos.length; i++) {
+        if (datasetInfos[i].datasetName.indexOf(tcwLayerName) > -1)
+          layerName = tcwLayerName;
+        else if (datasetInfos[i].datasetName.indexOf(tcwLayerName) > -1) {
+        }
+      }
+      result.features.forEach((feature) => {
+        // var DLTBlayerData = {
+        //   id: uuidv4(),
+        //   layerInfo: layer,
+        //   data: [],
+        //   geometry: feature.geometry,
+        // };
+        // feature.fieldNames.forEach((fieldName, i) => { });
+      });
+    },
+
     // 删除限高
     removeHighLimit() {
       viewer.entities.removeById("polygonA");
@@ -2432,6 +2622,12 @@ export default {
           let info = that.DLTBlayerDatas.find((c) => c.id == id);
           that.openOBJInfo("地类信息详情", info.data);
         }
+        //城镇开发边界弹窗
+        if (pick && pick.id.id && pick.id.id.indexOf("CZKFBJ-") !== -1) {
+          let id = pick.id.id.split("CZKFBJ-")[1];
+          let info = ghqk.CZKFBJDatas.find((c) => c.id == id);
+          that.openOBJInfo("城镇开发边界信息详情", info.data);
+        }
       }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
     },
     //打开用地红线信息弹窗
@@ -2659,28 +2855,73 @@ export default {
         },
       });
     },
-
-    // 压平
-    yp() {
-      let flatPoints = [
-        109.48482400719071, 18.29951085777014, -10.00041263509053046676,
-        109.48554500174846, 18.30108393277133, -10.00047798530245388843,
-        109.4873746948443, 18.3010997277107, -10.35302657491684614,
-        109.48749476533833, 18.300990310771073, -10.0008463849132034158,
-        109.48748475731615, 18.299967228358295, -10.10017789504110265,
-        109.48662969547186, 18.299952380186266, -10.00015392120471346737,
-        109.48663008984137, 18.29976573938069, -10.5355135143000762,
-        109.48653283908195, 18.29969021497898, -10.09950885525611478,
-        109.48576555239313, 18.299690483879495, -10.09921040906718022,
-      ];
-      viewer.scene.layers.layerQueue.forEach((layer) => {
-        let name = "flatten" + Math.random();
-        let istrue = layer.addFlattenRegion({
-          position: flatPoints,
-          name: name,
-        });
+    /**
+     * //打开建筑风貌弹窗
+     */
+    openArchitecturaInfo(layerDataList, LandPlanningList, Minfo) {
+      let that = this;
+      let w = document.body.offsetWidth;
+      let h = document.body.offsetHeight;
+      //左上角(left=弹窗宽/2;top=弹窗高/2+header高)
+      //右上角 (left=w-弹窗宽+(弹窗宽/2);top=弹窗高/2+header高);
+      let left = w - 430 + 430 / 2;
+      let top = 430 / 2 + 60;
+      this.$layer.iframe({
+        id: "JZFM",
+        content: {
+          content: ArchitecturaAnalysis, //传递的组件对象
+          parent: this, //当前的vue对象
+          data: { info: { Minfo, layerDataList, LandPlanningList } }, //props
+        },
+        offset: [left, top], //left top
+        area: ["430px", "430px"], //宽 高
+        title: "建筑风貌分析",
+        maxmin: false,
+        shade: false, //是否显示遮罩
+        shadeClose: false, //点击遮罩是否关闭
+        cancel: () => {},
       });
     },
+
+    /**
+     * 压平
+     * @param Minfos 模型信息
+     */
+    async yp(Minfos) {
+      for (let index = 0; index < Minfos.length; index++) {
+        const Minfo = Minfos[index];
+
+        //获取模型信息
+        let queryBySQLParameters = {
+          getFeatureMode: "SQL",
+          datasetNames: [Minfo.dataSourceName + ":项目范围"],
+          queryParameter: {
+            attributeFilter: "1=1",
+          },
+          hasGeometry: true,
+        };
+        let e = await mapQuery(
+          Minfo.dataurl + "/featureResults.json?returnContent=true",
+          queryBySQLParameters
+        );
+
+        debugger;
+        if (e && e.totalCount > 0) {
+          e.features.forEach((element) => {
+            let flatPoints = element.geometry.points
+              .map((item) => [item.x, item.y, 6.5])
+              .flat();
+            viewer.scene.layers.layerQueue.forEach((layer) => {
+              let name = "flatten" + Math.random();
+              let istrue = layer.addFlattenRegion({
+                position: flatPoints,
+                name: name,
+              });
+            });
+          });
+        }
+      }
+    },
     qxyp() {
       viewer.scene.layers.layerQueue.forEach((layer) => {
         layer.removeAllFlattenRegion();
@@ -2694,10 +2935,11 @@ export default {
       this.removeDLlayerDatasList();
       this.removeJZTXlayerDatas();
       this.removeDLTBlayerDatas();
+      ghqk.removeAll();
     },
     DestroyAll() {
       scene.multiViewportMode = Cesium.MultiViewportMode.NONE;
-      // this.qxyp();
+      this.qxyp();
       if (this.getEntitiesHandler) {
         this.getEntitiesHandler.removeInputAction(
           Cesium.ScreenSpaceEventType.LEFT_CLICK
@@ -2721,9 +2963,11 @@ export default {
 .card_body_style {
   border: 1px dashed #02a7f0;
 }
+
 .hover_style:hover {
   border: 1px solid #02a7f0;
 }
+
 .checkedState {
   position: relative;
 
@@ -2735,6 +2979,7 @@ export default {
     overflow: hidden;
     // border-radius: 6px;
   }
+
   .icon {
     position: absolute;
     right: 0;
@@ -2755,12 +3000,14 @@ export default {
     color: #ec808c;
     // font-size: 18px;
   }
+
   /* 带圆角的话这个status 和 txts的宽度/宽度 是要比icon的宽度/高度小的,效果可以自己慢慢调 */
   .ce {
     width: 4rem;
     height: 4rem;
   }
 }
+
 .con-col {
   display: flex;
   flex-flow: column nowrap;

+ 317 - 105
static/Config/config.js

@@ -13,58 +13,232 @@ window.baseImgLayer = "http://192.168.60.2:8090/iserver/services/map-WorkSpace/r
 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";
+
 /**
- * 报建图层树
+ * 车位数量审查
  */
-window.layerTreeNodes = [
-  {
-    //     TYCB@BaoPo0621N
-    // TYC@BaoPo0621N
-    // Road@BaoPo0621N
-    // DiXing@BaoPo0621N
-    // BaoPo@BaoPo0621N
-    id: 0,
-    label: "所有图层",
-    layerName: "",
-    children: [
-      {
-        id: 1,
-        label: "规划模型",
-        layerName: "BaoPo@BaoPo0621N",
-      },
-      // {
-      //   id: 2,
-      //   label: "植被",
-      //   layerName: "植被",
-      // },
-      // {
-      //   id: 3,
-      //   label: '白天',
-      //   layerName: '白天'
-      // },
-      {
-        id: 4,
-        label: "体育场",
-        layerName: "TYC@BaoPo0621N",
-      },
-      {
-        id: 5,
-        label: "体育馆",
-        layerName: "TYCB@BaoPo0621N",
-      },
-      {
-        id: 6,
-        label: "地形",
-        layerName: "DiXing@BaoPo0621N",
-      },
-      {
-        id: 7,
-        label: "道路",
-        layerName: "Road@BaoPo0621N",
-      },
-    ],
-  },
-];
+(window.CarPark = {
+  modelLayer: "Model", //模型层
+  projectBoundLayer: "项目范围", //停车位图层
+  buildBoundLayer: "建筑轮廓",
+  floorLayer: "FLOOR", //分层矢量图层
+  tcwLayer: "TCWT", //停车位图层
+  floorLayer: "FLOOR", //分层矢量图层
+  //建筑类型字段
+  ClassFld: "YT", //建筑类型:居住、办公商业 商业 酒店
+  CWTypeFld: "CWType", //停车位类型字段 机动车  非机动车
+  LandNoFld: "LandNo", //地块编号字段
+  FloorFld: "Floor", //当前楼层字段
+  JRAreaFld: "JRArea", //计容面积
+  JRRationFld: "JRRation", //	计容率
+  AreaFld: "Area", //面积
+  //建筑用途车位审查相关
+  classes: [
+    {
+      name: "居住",
+      subClass: [
+        {
+          Name: "商品住宅",
+          //当前楼层住户数量字段
+          House: "House",
+          //当前楼层住户144平米以上住户数量字段
+          B144: "B144",
+          //144平机动车数量比例
+          MotorRatio144: 1.5,
+          //144平非机动车数量比例
+          NoMotorRatio144: 1,
+          //机动车数量比例
+          MotorRatio: 1.2,
+          //非机动车数量比例
+          NoMotorRatio1: 1,
+        },
+        {
+          YT: "安居房",
+          //当前楼层住户数量字段
+          House: "House",
+          //机动车数量比例
+          MotorRatio: 1.2,
+          //非机动车数量比例
+          NoMotorRatio1: 2,
+        },
+        {
+          YT: "安置房",
+          //当前楼层住户数量字段
+          House: "House",
+          //当前楼层住户144平米以上住户数量字段
+          B144: "B144",
+          // YT	用途
+          // Rooms	酒店当前层客房数
+          // B144	楼层大于144名平米户数
+          // House	居住房当前楼层户数
+          // FTeacher	教学楼当前层教职工数
+          //144平机动车数量比例
+          MotorRatio144: 1.5,
+          //144平非机动车数量比例
+          NoMotorRatio144: 2,
+          //机动车数量比例
+          MotorRatio: 1.2,
+          //非机动车数量比例
+          NoMotorRatio1: 2,
+        },
+        {
+          YT: "公租房",
+          //当前楼层住户数量字段
+          House: "House",
+          //机动车数量比例
+          MotorRatio: 0.6,
+          //非机动车数量比例
+          NoMotorRatio1: 2,
+        },
+        {
+          YT: "市场化租赁",
+          House: "House",
+          //机动车数量比例
+          MotorRatio: 0.6,
+          //非机动车数量比例
+          NoMotorRatio1: 2,
+        },
+        {
+          YT: "城镇社区服务设施",
+          House: "House",
+          //机动车数量比例
+          MotorRatio: 1,
+          //非机动车数量比例
+          NoMotorRatio1: 2,
+        },
+      ],
+    },
+    {
+      Class: "办公",
+      children: [
+        {
+          name: "机关团体办公",
+          //机动车数量比例
+          MotorRatio: 2,
+          //非机动车数量比例
+          NoMotorRatio1: 2,
+        },
+        {
+          name: "商务办公",
+          //机动车数量比例
+          MotorRatio: 1.5,
+          //非机动车数量比例
+          NoMotorRatio1: 1.5,
+        },
+        {
+          name: "科研办公",
+          //机动车数量比例
+          MotorRatio: 1,
+          //非机动车数量比例
+          NoMotorRatio1: 1,
+        },
+      ],
+    },
+    {
+      Class: "商业",
+      children: [
+        {
+          /**
+           * 三星及三星以上
+           */
+          name: "酒店",
+          //机动车数量比例
+          MotorRatio: 0.6,
+          //非机动车数量比例
+          NoMotorRatio1: 0.7,
+        },
+        {
+          /**
+           * 旅馆酒店
+           */
+          name: "其他酒店",
+          //机动车数量比例
+          MotorRatio: 0.4,
+          //非机动车数量比例
+          NoMotorRatio1: 0.5,
+        },
+        {
+          name: "零售商业",
+          //机动车数量比例
+          MotorRatio: 1.2,
+          //非机动车数量比例
+          NoMotorRatio1: 5,
+        },
+        {
+          name: "餐饮娱乐",
+          //机动车数量比例
+          MotorRatio: 2,
+          //非机动车数量比例
+          NoMotorRatio1: 4,
+        },
+        {
+          name: "批发市场",
+          //机动车数量比例
+          MotorRatio: 1.5,
+          //非机动车数量比例
+          NoMotorRatio1: 4,
+        },
+      ],
+    },
+  ],
+}),
+  /**
+   * 报建图层树
+   */
+  (window.layerTreeNodes = [
+    {
+      //     TYCB@BaoPo0621N
+      // TYC@BaoPo0621N
+      // Road@BaoPo0621N
+      // DiXing@BaoPo0621N
+      // BaoPo@BaoPo0621N
+      id: 0,
+      label: "所有图层",
+      layerName: "",
+      children: [
+        {
+          id: 1,
+          label: "规划模型",
+          layerName: "BaoPo@BaoPo0621N",
+        },
+        // {
+        //   id: 2,
+        //   label: "植被",
+        //   layerName: "植被",
+        // },
+        // {
+        //   id: 3,
+        //   label: '白天',
+        //   layerName: '白天'
+        // },
+        {
+          id: 4,
+          label: "体育场",
+          layerName: "TYC@BaoPo0621N",
+        },
+        {
+          id: 5,
+          label: "体育馆",
+          layerName: "TYCB@BaoPo0621N",
+        },
+        {
+          id: 6,
+          label: "地形",
+          layerName: "DiXing@BaoPo0621N",
+        },
+        {
+          id: 7,
+          label: "道路",
+          layerName: "Road@BaoPo0621N",
+        },
+        {
+          id: 8,
+          label: "倾斜摄影",
+          layerName: "qxsy",
+        },
+      ],
+    },
+  ]);
 /**
  * 用地用海分类颜色
  */
@@ -163,7 +337,6 @@ window.colorList = [
   },
   { name: "其他海域", color: "rgb(214,234,243)" },
 ];
-
 /**
  * 模型对应数据图层
  * url:数据服务地址
@@ -230,39 +403,76 @@ window.layersDataUrl = [
 ];
 
 /**
- * //项目信息
- * 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: "企业投资",
+(window.bjConfig = {
+  /**
+   * 项目边界
+   */
+  projectBondLayer: {
+    layerName: "",
   },
-  {
-    id: "222ertyuiop",
-    projectname: "三亚投资发展有限公司",
-    meetingProgress: 1,
-    applicant: "东岸卓越城项目",
-    projectaddress: "抱坡路",
-    plotnumber: "BP08-03,BP08-11",
-    landarea: "45540平方米",
-    landusenature: "商服用地",
-    projectpositioning: "商业",
-    landsituation: "",
-    totalprojectinvestment: "约19亿元",
-    fundingsource: "企业投资",
+  /**
+   * 建筑轮廓
+   */
+  buildBoundLayer: {
+    layerName: "",
   },
-];
+  /**
+   * 三维模型层
+   */
+  modelLayer: {
+    layerName: "",
+  },
+  /**
+   * 分层数据
+   */
+  floorLayer: {
+    layerName: "",
+    floorFld: "",
+  },
+  /**
+   * 停车位
+   */
+  tcwLayer: {
+    layerName: "TCW",
+    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: "企业投资",
+    },
+    {
+      id: "222ertyuiop",
+      projectname: "三亚投资发展有限公司",
+      meetingProgress: 1,
+      applicant: "东岸卓越城项目",
+      projectaddress: "抱坡路",
+      plotnumber: "BP08-03,BP08-11",
+      landarea: "45540平方米",
+      landusenature: "商服用地",
+      projectpositioning: "商业",
+      landsituation: "",
+      totalprojectinvestment: "约19亿元",
+      fundingsource: "企业投资",
+    },
+  ]);
 //报建模型
 window.constructionmodel = [
   {
@@ -706,9 +916,9 @@ window.layerTree = [
         date_server: {
           nvfid: "456sd78",
           server_name: "城镇开发边界",
-          url: "",
-          dataSourceName: "",
-          datasetName: "",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "城镇开发边界",
         },
       },
       {
@@ -726,9 +936,9 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "生态保护红线",
-          url: "",
-          dataSourceName: "",
-          datasetName: "",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "生态保护红线",
         },
       },
       {
@@ -746,9 +956,9 @@ window.layerTree = [
         date_server: {
           nvfid: "4526wsd78",
           server_name: "永久基本农田",
-          url: "",
-          dataSourceName: "",
-          datasetName: "",
+          url: "http://192.168.60.2:8090/iserver/services/data-sanyamap1/rest/data",
+          dataSourceName: "sanya",
+          datasetName: "永久基本农田",
         },
       },
       {
@@ -1746,28 +1956,29 @@ window.ZSBC = {
        * 树木分类
        */
       smfl: {
-        fl:"树木",
+        fl: "树木",
         dlbm: "0301,0302,0303,0304",
         dlmc: "乔木林地,竹林地,灌木林地,其他林地",
-        color:"rgb(104,177,103)" ,
+        color: "rgb(104,177,103)",
       },
       /**
        * 农作物分类
        */
-      nzwfl: { 
-        fl:"农作物",
-        dlbm: "0101,0102,0103", dlmc: "水田,水浇地,旱地" ,
-        color:"rgb(245,248,220)" ,
+      nzwfl: {
+        fl: "农作物",
+        dlbm: "0101,0102,0103",
+        dlmc: "水田,水浇地,旱地",
+        color: "rgb(245,248,220)",
       },
-        
+
       /**
        * 经济作物分类
        */
       jjzwfl: {
-        fl:"经济作物",
+        fl: "经济作物",
         dlbm: "0201,0202,0203,0204",
         dlmc: "果园,茶园,橡胶园,其他园地",
-        color:"rgb(191,233,170)" ,
+        color: "rgb(191,233,170)",
       },
     },
     /**
@@ -1777,11 +1988,11 @@ window.ZSBC = {
       /**
        *不动产图层
        */
-      layerName: "不动产",
+      layerName: "建筑矢量",
       /**
        * 不动产数据集
        */
-      layerDataSource: "sanya:不动产", //[数据集:图层名]
+      layerDataSource: "sanya:建筑矢量", //[数据集:图层名]
       /**
        * 产权人
        */
@@ -1842,7 +2053,7 @@ window.NightLightUrl = {
   //道路灯光
   dldg: {
     url: "static/data/道路.json",
-    cutoffDistance: 130, //扩散距离
+    cutoffDistance: 100, //扩散距离
     LightColor: { r: 209 / 255, g: 209 / 255, b: 147 / 255, a: 0.5 }, //灯光颜色
     decay: 2, //衰减
     intensity: 1, //强度
@@ -1859,9 +2070,10 @@ window.NightLightUrl = {
   //地标灯光
   yshdg: {
     url: "static/data/地标.json",
-    cutoffDistance: 100, //扩散距离
-    LightColor: { r: 18 / 255, g: 80 / 255, b: 193 / 255, a: 1 }, //灯光颜色
-    decay: 2, //衰减
+    cutoffDistance: 200, //扩散距离
+    // LightColor: { r: 18 / 255, g: 80 / 255, b: 193 / 255, a: 1 }, //灯光颜色
+    LightColor: { r: 140 / 255, g: 244 / 255, b: 193 / 255, a: 1 }, //灯光颜色
+    decay: 3, //衰减
     intensity: 1, //强度
   },
   //城市泛光线

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
static/data/地标.json


BIN
static/images/overview/go.png


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio