From 01f9c88fd0ee768155e5b341c2bb95a85bc11a08 Mon Sep 17 00:00:00 2001
From: liuyg <liuyg@qq.com>
Date: Sat, 05 Mar 2022 17:49:36 +0800
Subject: [PATCH] ++

---
 src/components/map/index.vue |  617 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 380 insertions(+), 237 deletions(-)

diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index 48e18ce..107f639 100644
--- a/src/components/map/index.vue
+++ b/src/components/map/index.vue
@@ -1,255 +1,398 @@
 /* eslint-disable camelcase */
 <template>
-    <div id="viewer-container"
-         style="height: 100%; width: 100%;">
+  <div
+    id="viewer-container"
+    style="height: 100%; width: 100%"
+    @click="mapClick($event)"
+  >
+    <video
+      id="video"
+      style="position: fixed; visibility: hidden"
+      muted
+      autoplay
+      loop
+      crossorigin
+      controls
+    >
+      <source
+        src="http://dc.dvgis.cn/examples/data/demo.mp4"
+        type="video/mp4"
+      />
+    </video>
 
-        <div v-show='popupFlag'
-             id="modelPopup"
-             style="width: 366px;
-                height: 240px;
-                background: url(/img/bg/nav-bg.jpeg) no-repeat;
-                background-size: 100% 100%;">
-            <div class="header">
-                <div class="logo">
-                    <img src="/img/navicon/map.png"
-                         alt="">
-                </div>
-                <div class="title">
-                    明德楼
-                </div>
-                <div class="close">
-                    <img src="/img/navicon/close.png"
-                         alt="">
-                </div>
-            </div>
-            <div class="content">
-                <div class="img">
-
-                </div>
-                <div class="meau">
-
-                </div>
-            </div>
-        </div>
-
-        <div id="map_popup_content">
-        </div>
-
-        <div ref="mapContentContent" v-show="false" id="map_content_content">
-            <div class="arc-bcg">
-                <img src="/img/job/one.jpg"
-                     alt=""
-                     @click="alert(1)">
-            </div>
-        </div>
-
+    <div
+      style="
+        position: fixed;
+        left: 4px;
+        bottom: 4px;
+        width: 80px;
+        line-height: 24px;
+        text-align: center;
+        color: #fff;
+        font-size: 14px;
+        border-radius: 4px;
+        background: #2196f3ed;
+        z-index: 11;
+      "
+    >
+      智慧校区
     </div>
+
+    <dimension :areaLayer="areaLayer" />
+
+    <left-nav ref="leftNav"></left-nav>
+
+    <mapPopup />
+
+    <campusBuildingSearch ref="campusBuildingSearch" />
+
+    <campusNav ref="campusNavRoute" v-show="campusNavFlag" />
+
+    <search-details v-if="searchPopupFlag"></search-details>
+    <org-nav-bar v-if="orgNavBarFlag"></org-nav-bar>
+    <arc-nav-bar v-if="arcNavBarFlag"></arc-nav-bar>
+  </div>
 </template>
 <script>
-
-import { mapGetters } from 'vuex'
+import { mapGetters } from "vuex";
+import mapPopup from "./components/mapPopup.vue";
+import campusBuildingSearch from "./components/campusBuildingSearch.vue";
+import dimension from "./components/dimension.vue";
 
 export default {
-    name: 'mapBox',
-    data () {
-        return {
-            popupFlag: false
+  name: "mapBox",
+  components: {
+    mapPopup,
+    campusBuildingSearch,
+    dimension,
+  },
+  data() {
+    return {
+      DC: null,
+      areaLayer: null,
+    };
+  },
+  watch: {
+    searchPopupFlag: {
+      immediate: true,
+      handler(newVal, oldVal) {
+        if (newVal == true) {
+          if (this.$route.path.indexOf("/pcLayout/default/service") != -1) {
+            this.$store.dispatch("delVisitedViews", this.$route);
+            this.$router.push("/pcLayout/default");
+          }
+
+          if (this.$route.path.indexOf("/orgnav") != -1) {
+            this.$store.dispatch("delVisitedViews", this.$route);
+            this.$router.push("/pcLayout/default");
+            this.$store.commit("SET_ORGNAVBARTITLE", "");
+            this.$store.commit("SET_ORGNAVBARLIST", []);
+            this.$store.commit("SET_ORGNAVBARFLAG", false);
+          }
+
+          if (this.orgNavBarFlag == true) {
+            this.$store.commit("SET_ORGNAVBARTITLE", "");
+            this.$store.commit("SET_ORGNAVBARLIST", []);
+            this.$store.commit("SET_ORGNAVBARFLAG", false);
+          }
+
+          if (this.$route.path.indexOf("/arc") != -1) {
+            this.$store.dispatch("delVisitedViews", this.$route);
+            this.$router.push("/pcLayout/default");
+            this.$store.commit("SET_ARCNAVBARTITLE", "");
+            this.$store.commit("SET_ARCNAVBARCODE", "");
+            this.$store.commit("SET_ARCNAVBARFLAG", false);
+          }
+
+          if (this.arcNavBarFlag == true) {
+            this.$store.commit("SET_ARCNAVBARTITLE", "");
+            this.$store.commit("SET_ARCNAVBARCODE", "");
+            this.$store.commit("SET_ARCNAVBARFLAG", false);
+          }
         }
+      },
     },
-    computed: {
-        ...mapGetters([
-            'viewer'
-        ])
+
+    orgNavBarFlag: {
+      immediate: true,
+      handler(newVal, oldVal) {
+        if (newVal == true) {
+          this.$store.commit("SET_SEARCHPOPUPFLAG", false);
+        }
+      },
     },
-    mounted () {
-        var DC = global.DC
 
-        var that = this
-
-        let viewer
-
-        function distanceSurface () {
-            viewer.measure.distanceSurface()
+    arcNavBarFlag: {
+      immediate: true,
+      handler(newVal, oldVal) {
+        if (newVal == true) {
+          this.$store.commit("SET_SEARCHPOPUPFLAG", false);
         }
-
-        function calcArea () {
-            viewer.measure.area()
-        }
-
-        function areaSurface () {
-            viewer.measure.areaSurface()
-        }
-
-        function calcAngle () {
-            viewer.measure.angle()
-        }
-
-        function calcModelAngle () {
-            viewer.measure.angle({
-                clampToModel: true
-            })
-        }
-
-        function calcHeight () {
-            viewer.measure.height()
-        }
-
-        function calcModelHeight () {
-            viewer.measure.height({
-                clampToModel: true
-            })
-        }
-
-        function calcHeading () {
-            viewer.measure.heading()
-        }
-
-        function areaHeight () {
-            viewer.measure.areaHeight()
-        }
-
-        function calcTriangleHeight () {
-            viewer.measure.triangleHeight()
-        }
-
-        function calcModelTriangleHeight () {
-            viewer.measure.triangleHeight({
-                clampToModel: true
-            })
-        }
-
-        function deactivate () {
-            viewer.measure.deactivate()
-        }
-
-        function gotoModel () {
-            viewer.flyTo(tileset)
-        }
-
-        function initViewer () {
-            viewer = new DC.Viewer('viewer-container', {
-                contextOptions: {
-                    webgl: {
-                        stencil: true,
-                        preserveDrawingBuffer: true
-                    }
-                }
-            })
-
-            console.log(DC, 456)
-
-            const popup = viewer.popup
-
-            popup.hide()
-
-            that.$store.commit('SET_VIEWER', viewer)
-
-            const baselayer = DC.ImageryLayerFactory.createArcGisImageryLayer({
-                url:
-                    'http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
-            })
-            viewer.addBaseLayer(baselayer, {
-                iconUrl: 'examples/images/icon/img.png',
-                name: '影像'
-            })
-
-            // eslint-disable-next-line camelcase
-            const baselayer_shaded = DC.ImageryLayerFactory.createArcGisImageryLayer({
-                url:
-                    'http://services.arcgisonline.com/arcgis/rest/services/World_Shaded_Relief/MapServer'
-            })
-            viewer.addBaseLayer(baselayer_shaded, {
-                iconUrl: 'examples/images/icon/elec.png',
-                name: '电子'
-            })
-
-            // eslint-disable-next-line camelcase
-            const baselayer_street = DC.ImageryLayerFactory.createArcGisImageryLayer({
-                url:
-                    'http://services.arcgisonline.com/arcgis/rest/services/World_Physical_Map/MapServer'
-            })
-            viewer.addBaseLayer(baselayer_street, {
-                iconUrl: 'examples/images/icon/ter.png',
-                name: '地形'
-            })
-
-            // eslint-disable-next-line camelcase
-            const baselayer_ter = DC.ImageryLayerFactory.createArcGisImageryLayer({
-                url:
-                    'http://services.arcgisonline.com/arcgis/rest/services/World_Terrain_Base/MapServer'
-            })
-            viewer.addBaseLayer(baselayer_ter, {
-                iconUrl: 'examples/images/icon/ter.png',
-                name: '地形'
-            })
-
-            const layer = new DC.TilesetLayer('layer')
-            viewer.addLayer(layer)
-            const tileset = new DC.Tileset(
-                'http://resource.dvgis.cn/data/3dtiles/ljz/tileset.json'
-            )
-            const style = new DC.TilesetStyle()
-            style.color = {
-                conditions: [
-                    ['${Height} >= 300', 'rgba(45, 0, 75, 0.5)'],
-                    ['${Height} >= 200', 'rgb(102, 71, 151)'],
-                    ['${Height} >= 100', 'rgb(170, 162, 204)'],
-                    ['${Height} >= 50', 'rgb(224, 226, 238)'],
-                    ['${Height} >= 25', 'rgb(252, 230, 200)'],
-                    ['${Height} >= 10', 'rgb(248, 176, 87)'],
-                    ['${Height} >= 5', 'rgb(198, 106, 11)'],
-                    ['true', 'rgb(127, 59, 8)']
-                ]
-            }
-
-            viewer.use(new DC.Measure())
-
-            tileset.setStyle(style)
-            layer.addOverlay(tileset)
-            viewer.flyTo(tileset)
-
-            tileset.on(DC.MouseEventType.CLICK, e => {
-                // that.popupFlag = true
-
-                console.log(e.position)
-
-                viewer.scene.globe.depthTestAgainstTerrain = false
-
-                console.log(document.getElementById('map_content_content'))
-
-                // 定制化窗体
-                var divForms = new DC.divForms(viewer, {
-                    domId: 'div1',
-                    title: '成教楼  ',
-                    className: 'divForms-dom',
-                    content: document.getElementById('map_content_content'),
-                    position: [
-                        e.position
-                    ]
-                })
-
-                // popup.setWrapper('<div></div>')
-
-                // popup.showAt(e.position, document.getElementById('modelPopup'))
-            })
-
-            // viewer.zoomToPosition(
-            //     new DC.Position(105.565571, 31.984708, 15362816, 0, -90)
-            // )
-
-            viewer.compass.enable = true
-            viewer.zoomController.enable = true
-            viewer.locationBar.enable = true
-            viewer.distanceLegend.enable = true
-        }
-
-        DC.ready(initViewer)
+      },
     },
-    methods: {
+  },
+  computed: {
+    ...mapGetters([
+      "viewer",
+      "popupBgUrl",
+      "pupupQRUrl",
+      // 终点
+      "terminus",
+      // 起点
+      "startingPoint",
+      // 点信息
+      "pointPosition",
+      // 点名称
+      "stateName",
+      // 地址
+      "siteName",
+      // 介绍
+      "introduceText",
+      // 全景地址
+      "panoramaUrl",
+      // 详情弹框显示关闭
+      "detailsPopup",
+      // 全景弹框显示关闭
+      "panoramaPopup",
+      // 校区内导航的显示关闭
+      "campusNavFlag",
+      "orgNavBarFlag",
+      "arcNavBarFlag",
+      "searchPopupFlag",
+    ]),
+  },
+  mounted() {
+    var that = this;
 
+    let viewer;
+
+    that.DC = global.DC;
+
+    function distanceSurface() {
+      viewer.measure.distanceSurface();
     }
-}
+
+    function calcArea() {
+      viewer.measure.area();
+    }
+
+    function areaSurface() {
+      viewer.measure.areaSurface();
+    }
+
+    function calcAngle() {
+      viewer.measure.angle();
+    }
+
+    function calcModelAngle() {
+      viewer.measure.angle({
+        clampToModel: true,
+      });
+    }
+
+    function calcHeight() {
+      viewer.measure.height();
+    }
+
+    function calcModelHeight() {
+      viewer.measure.height({
+        clampToModel: true,
+      });
+    }
+
+    function calcHeading() {
+      viewer.measure.heading();
+    }
+
+    function areaHeight() {
+      viewer.measure.areaHeight();
+    }
+
+    function calcTriangleHeight() {
+      viewer.measure.triangleHeight();
+    }
+
+    function calcModelTriangleHeight() {
+      viewer.measure.triangleHeight({
+        clampToModel: true,
+      });
+    }
+
+    function deactivate() {
+      viewer.measure.deactivate();
+    }
+
+    function initViewer() {
+      viewer = new that.DC.Viewer("viewer-container", {
+        contextOptions: {
+          webgl: {
+            stencil: true,
+            preserveDrawingBuffer: true,
+          },
+        },
+      });
+
+      that.createdLayers(viewer);
+
+      that.$store.commit("SET_VIEWER", viewer);
+
+      that.$refs.leftNav.initialize(viewer);
+
+      // const key = '0f7c1d161d7352116a21aacf0e9f44c1'
+      // const vec = that.DC.ImageryLayerFactory.createTdtImageryLayer({
+      //     key
+      // })
+      // const cva = that.DC.ImageryLayerFactory.createTdtImageryLayer({
+      //     key,
+      //     style: 'cva'
+      // })
+      // viewer.addBaseLayer([vec, cva])
+
+      // const areaLayer = new that.DC.VectorLayer('areaLayer')
+
+      // viewer.addLayer(areaLayer)
+
+      // axios.get('http://59.55.128.156:6080/arcgis/rest/services/xiajiangfhgc/MapServer/4/query?where=1%3D1&text=&objectIds=&time=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&maxAllowableOffset=&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&returnTrueCurves=false&resultOffset=&resultRecordCount=&f=pjson').then(resultData => {
+      //     resultData.data.features.forEach(item => {
+      //         item.geometry.rings[0].forEach(it => {
+      //             it = it.join(',')
+      //         })
+
+      //         item.geometry.rings[0] = item.geometry.rings[0].join(';')
+
+      //         const polygon = new that.DC.Polygon(item.geometry.rings[0])
+
+      //         polygon.setStyle({
+
+      //             material: that.DC.Namespace.Cesium.Color.fromBytes(255, 255, 255, 0)
+
+      //         })
+
+      //         areaLayer.addOverlay(polygon)
+      //     })
+      // })
+
+      // var select = {
+      //     overlay: undefined,
+      //     color: undefined
+      // }
+
+      // viewer.on(that.DC.MouseEventType.MOUSE_MOVE, e => {
+      //     if (e.overlay != undefined) {
+      //         if (select.overlay != undefined) {
+      //             if (e.overlay != select.overlay) {
+      //                 select.overlay.setStyle({
+      //                     material: select.color
+      //                 })
+
+      //                 select.overlay = undefined
+      //                 select.color = undefined
+      //             }
+      //         }
+
+      //         if (select.overlay == undefined) {
+      //             select.overlay = e.overlay
+
+      //             select.color = e.overlay._style.material
+      //             select.overlay.setStyle({
+
+      //                 material: that.DC.Namespace.Cesium.Color.fromBytes(32, 108, 247, 158)
+
+      //             })
+      //         }
+      //     } else {
+      //         if (select.overlay != undefined) {
+      //             select.overlay.setStyle({
+      //                 material: select.color
+      //             })
+
+      //             select.overlay = undefined
+      //             select.color = undefined
+      //         }
+      //     }
+      // })
+
+      // viewer.on(that.DC.MouseEventType.CLICK, e => {
+      //     if (e.overlay != undefined) {
+      //         console.log(e.overlay.attr)
+      //     }
+      // })
+
+      // viewer.addBaseLayer(baselayer, {
+      //     iconUrl: 'examples/images/icon/img.png',
+      //     name: '影像'
+      // })
+
+      // viewer.addBaseLayer(wmtslayer, {
+      //     iconUrl: 'examples/images/icon/img.png',
+      //     name: '影像'
+      // })
+
+      // // eslint-disable-next-line camelcase
+      // const baselayer_shaded = that.DC.ImageryLayerFactory.createArcGisImageryLayer({
+      //     url:
+      //         'http://services.arcgisonline.com/arcgis/rest/services/World_Shaded_Relief/MapServer'
+      // })
+      // viewer.addBaseLayer(baselayer_shaded, {
+      //     iconUrl: 'examples/images/icon/elec.png',
+      //     name: '电子'
+      // })
+
+      // // eslint-disable-next-line camelcase
+      // const baselayer_street = that.DC.ImageryLayerFactory.createArcGisImageryLayer({
+      //     url:
+      //         'http://services.arcgisonline.com/arcgis/rest/services/World_Physical_Map/MapServer'
+      // })
+      // viewer.addBaseLayer(baselayer_street, {
+      //     iconUrl: 'examples/images/icon/ter.png',
+      //     name: '地形'
+      // })
+
+      // // eslint-disable-next-line camelcase
+      // const baselayer_ter = that.DC.ImageryLayerFactory.createArcGisImageryLayer({
+      //     url:
+      //         'http://services.arcgisonline.com/arcgis/rest/services/World_Terrain_Base/MapServer'
+      // })
+      // viewer.addBaseLayer(baselayer_ter, {
+      //     iconUrl: 'examples/images/icon/ter.png',
+      //     name: '地形'
+      // })
+
+      viewer.use(new that.DC.Measure());
+
+      // viewer.flyToPosition(
+      //     new that.DC.Position(117.08489820, 31.65413916, 1500, 0, -90, 45)
+      // )
+
+      viewer.compass.enable = true;
+      viewer.zoomController.enable = true;
+      viewer.locationBar.enable = true;
+      viewer.hawkeyeMap.enable = true;
+      viewer.hawkeyeMap.addBaseLayer(
+        that.DC.ImageryLayerFactory.createAmapImageryLayer({
+          crs: "WGS84",
+        })
+      );
+      // viewer.distanceLegend.enable = true
+    }
+
+    that.DC.ready(initViewer);
+  },
+  methods: {
+    mapClick(e) {
+      this.$refs.campusNavRoute.shortcutShow(e);
+      this.$refs.campusBuildingSearch.shortcutShow(e);
+    },
+
+    createdLayers(viewer) {
+      const layerGroup = new this.DC.LayerGroup("modelBox");
+      viewer.addLayerGroup(layerGroup);
+
+      this.areaLayer = new this.DC.VectorLayer("areaLayer");
+      layerGroup.addLayer(this.areaLayer);
+    },
+  },
+};
 </script>
 
-<style lang='scss' scope>
-</style>
+<style lang="scss" scope></style>

--
Gitblit v1.9.3