From 2a3bfbc64a74f3afaeced0756fcb2e4f60b94a24 Mon Sep 17 00:00:00 2001
From: guanqb <18720758508@163.com>
Date: Wed, 12 Oct 2022 17:43:25 +0800
Subject: [PATCH] 首页布局调整

---
 src/pcviews/homee/Map/index.vue |  287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 277 insertions(+), 10 deletions(-)

diff --git a/src/pcviews/homee/Map/index.vue b/src/pcviews/homee/Map/index.vue
index c334000..19e407a 100644
--- a/src/pcviews/homee/Map/index.vue
+++ b/src/pcviews/homee/Map/index.vue
@@ -1,21 +1,288 @@
 <template>
-    <div class="container"></div>
+    <div id="viewer-container" style="width:100%;height:100%">
+        <div class="mapBtnList">
+            <div class="btn1 mapBtn" @click.stop="fullImg">全图</div>
+            <div class="btn2 mapBtn" @click.stop="ranging">距离</div>
+            <div class="btn3 mapBtn" @click.stop="area">面积</div>
+            <div class="btn4 mapBtn" @click.stop="ranging">全景</div>
+            <div class="btn5 mapBtn" @click.stop="clear">清除</div>
+        </div>
+    </div>
 </template>
 
 <script>
-export default {
+import {
+    getSceneList
+} from '@/api/pc/leftNav/index'
+const sceneLayer = null
 
+let baseLayer = []
+
+let tilesetLayer, tileset
+
+import baseLayerImgUrl from '@/assets/baseUrl'
+
+export default {
+    mounted () {
+        const that = this
+        function initViewer () {
+            global.viewer = new DC.Viewer('viewer-container')
+
+            // 天地图 影像
+            global.viewer.imageryLayers.addImageryProvider(
+                new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
+                    url: 'https://t{s}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=789e558be762ff832392a0393fd8a4f1',
+                    subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
+                    format: 'image/jpeg',
+                    show: true,
+                    maximumLevel: 18
+                })
+            )
+            global.viewer.camera.setView({
+                // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
+                // fromDegrees()方法,将经纬度和高程转换为世界坐标
+                destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
+                    116.027429, 28.681978, 800
+                ),
+                orientation: {
+                    // 指向
+                    heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
+                    // 视角
+                    pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
+                    roll: 0.0
+                }
+            })
+            // that.addBaseLayer()
+
+            global.viewer.use(new global.DC.Measure())
+
+            that.addMxTileset()
+        }
+
+        global.DC.ready(initViewer)
+    },
+
+    methods: {
+
+        addMxTileset () {
+            const that = this
+            tilesetLayer = new global.DC.TilesetLayer('tilesetLayer')
+            global.viewer.addLayer(tilesetLayer)
+            tileset = new global.DC.Tileset('/zhxy/mx/tileset.json', {
+                luminanceAtZenith: 0.4,
+                // cullWithChildrenBounds: false,
+                // cullRequestsWhileMoving: false,
+                // skipLevelOfDetail: false,
+                shadows: global.DC.Namespace.Cesium.ShadowMode.DISABLED
+            })
+            tileset.setHeight(5)
+            tilesetLayer.addOverlay(tileset)
+            global.viewer.flyTo(tileset)
+            // tileset.on(global.DC.MouseEventType.CLICK, that.tilesetClick)
+        },
+
+        getViewExtend () {
+            const params = {}
+            const extend = global.viewer.camera.computeViewRectangle()
+            if (typeof extend === 'undefined') {
+                // 2D下会可能拾取不到坐标,extend返回undefined,所以做以下转换
+                const canvas = global.viewer.scene.canvas
+                const upperLeft = new global.DC.Namespace.Cesium.Cartesian2(0, 0)// canvas左上角坐标转2d坐标
+                const lowerRight = new global.DC.Namespace.Cesium.Cartesian2(
+                    canvas.clientWidth,
+                    canvas.clientHeight
+                )// canvas右下角坐标转2d坐标
+
+                const ellipsoid = global.viewer.scene.globe.ellipsoid
+                const upperLeft3 = global.viewer.camera.pickEllipsoid(
+                    upperLeft,
+                    ellipsoid
+                )// 2D转3D世界坐标
+
+                const lowerRight3 = global.viewer.camera.pickEllipsoid(
+                    lowerRight,
+                    ellipsoid
+                )// 2D转3D世界坐标
+
+                const upperLeftCartographic = global.viewer.scene.globe.ellipsoid.cartesianToCartographic(
+                    upperLeft3
+                )// 3D世界坐标转弧度
+                const lowerRightCartographic = global.viewer.scene.globe.ellipsoid.cartesianToCartographic(
+                    lowerRight3
+                )// 3D世界坐标转弧度
+
+                const minx = global.DC.Namespace.Cesium.Math.toDegrees(upperLeftCartographic.longitude)// 弧度转经纬度
+                const maxx = global.DC.Namespace.Cesium.Math.toDegrees(lowerRightCartographic.longitude)// 弧度转经纬度
+
+                const miny = global.DC.Namespace.Cesium.Math.toDegrees(lowerRightCartographic.latitude)// 弧度转经纬度
+                const maxy = global.DC.Namespace.Cesium.Math.toDegrees(upperLeftCartographic.latitude)// 弧度转经纬度
+
+                params.minx = minx
+                params.maxx = maxx
+                params.miny = miny
+                params.maxy = maxy
+            } else {
+                // 3D获取方式
+                params.maxx = global.DC.Namespace.Cesium.Math.toDegrees(extend.east)
+                params.maxy = global.DC.Namespace.Cesium.Math.toDegrees(extend.north)
+
+                params.minx = global.DC.Namespace.Cesium.Math.toDegrees(extend.west)
+                params.miny = global.DC.Namespace.Cesium.Math.toDegrees(extend.south)
+            }
+            return params // 返回屏幕所在经纬度范围
+        },
+
+        addBaseLayer () {
+            if (baseLayer.length > 0) {
+                baseLayer.forEach(item => {
+                    global.viewer.imageryLayers.remove(
+                        item.layer
+                    )
+                })
+            }
+
+            baseLayer = []
+
+            this.updateBaseLayer(false)
+        },
+
+        updateBaseLayer (flag) {
+            const extent = this.getViewExtend()
+
+            const array = baseLayerImgUrl.filter(item => {
+                return item[1000]
+            })
+
+            array[0][1000].forEach(sm => {
+                let startFlag = false
+                if (flag == true) {
+                    startFlag = baseLayer.some(dt => {
+                        return dt.id == sm.id
+                    })
+                }
+
+                if (startFlag == true) return
+
+                if (
+                    (
+                        sm.rectangle[0] > extent.minx &&
+                        sm.rectangle[1] > extent.miny &&
+                        sm.rectangle[2] < extent.maxx &&
+                        sm.rectangle[3] < extent.maxy
+                    ) ||
+                    (
+                        sm.rectangle[0] < extent.minx &&
+                        sm.rectangle[1] < extent.maxy &&
+                        sm.rectangle[2] > extent.minx &&
+                        sm.rectangle[3] > extent.maxy
+                    ) ||
+                    (
+                        sm.rectangle[0] < extent.maxx &&
+                        sm.rectangle[1] < extent.maxy &&
+                        sm.rectangle[2] > extent.maxx &&
+                        sm.rectangle[3] > extent.maxy
+                    ) ||
+                    (
+                        sm.rectangle[0] < extent.maxx &&
+                        sm.rectangle[1] < extent.miny &&
+                        sm.rectangle[2] > extent.maxx &&
+                        sm.rectangle[3] > extent.miny
+                    ) ||
+                    (
+                        sm.rectangle[0] < extent.minx &&
+                        sm.rectangle[1] < extent.miny &&
+                        sm.rectangle[2] > extent.minx &&
+                        sm.rectangle[3] > extent.miny
+                    ) ||
+                    (
+                        sm.rectangle[0] > extent.minx &&
+                        sm.rectangle[1] < extent.maxy &&
+                        sm.rectangle[2] < extent.maxx &&
+                        sm.rectangle[3] > extent.maxy
+                    ) ||
+                    (
+                        sm.rectangle[0] > extent.minx &&
+                        sm.rectangle[1] > extent.miny &&
+                        sm.rectangle[2] > extent.maxx &&
+                        sm.rectangle[3] < extent.maxy
+                    ) ||
+                    (
+                        sm.rectangle[0] > extent.minx &&
+                        sm.rectangle[1] < extent.miny &&
+                        sm.rectangle[2] < extent.maxx &&
+                        sm.rectangle[3] > extent.miny
+                    ) ||
+                    (
+                        sm.rectangle[0] < extent.minx &&
+                        sm.rectangle[1] > extent.miny &&
+                        sm.rectangle[2] > extent.minx &&
+                        sm.rectangle[3] < extent.maxy
+                    )
+                ) {
+                    var layer = global.viewer.imageryLayers.addImageryProvider(new global.DC.Namespace.Cesium.SingleTileImageryProvider({
+                        url: sm.url,
+                        rectangle: global.DC.Namespace.Cesium.Rectangle.fromDegrees(sm.rectangle[0], sm.rectangle[1], sm.rectangle[2], sm.rectangle[3])
+                    }))
+
+                    baseLayer.push({ layer, id: sm.id })
+                }
+            })
+        },
+        ranging () {
+            global.viewer.measure.distanceSurface()
+        },
+        area () {
+            global.viewer.measure.area()
+        },
+        clear () {
+            global.viewer.measure.deactivate()
+        },
+        fullImg () {
+            this.addMxTileset()
+        },
+    }
 }
+
 </script>
 
-<style lang="scss" scoped>
-.container {
-    width: 1020px;
-    height: 600px;
-    background: url(/zhxy/img/home/map.png) no-repeat;
-    background-size: contain;
-    border: 1px solid #28f2ff;
+<style lang="scss">
+.mapBtnList {
+    position: absolute;
+    bottom: 10px;
+    left: 50%;
+    margin-left: -128px;
+    display: flex;
     box-sizing: border-box;
-    // display: none;
+    .mapBtn {
+        width: 44px;
+        height: 44px;
+        background-position: -6px -6px;
+        z-index: 2;
+        margin-left: 5px;
+        color: #28f2ff;
+        text-align: center;
+        line-height: 68px;
+        font-size: 14px;
+        cursor: default;
+        border: 1px solid transparent;
+    }
+    .btn1 {
+        background-image: url(/zhxy/img/home/full-img.png);
+    }
+    .btn2 {
+        background-image: url(/zhxy/img/home/ranging.png);
+    }
+    .btn3 {
+        background-image: url(/zhxy/img/home/area.png);
+    }
+    .btn4 {
+        background-image: url(/zhxy/img/home/panorama.png);
+    }
+    .btn5 {
+        background-image: url(/zhxy/img/home/clear.png);
+    }
+}
+.mapBtnList :hover {
+    border: 1px solid white !important;
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3