From ea79643ffd2d0c4548a5de4a90ae8bfbfeb67c95 Mon Sep 17 00:00:00 2001
From: xiebin <123456>
Date: Thu, 04 Aug 2022 11:55:24 +0800
Subject: [PATCH] 农场页面物联网接口

---
 src/components/map/index.vue |   92 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 1 deletions(-)

diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index 906da51..f33ce91 100644
--- a/src/components/map/index.vue
+++ b/src/components/map/index.vue
@@ -11,6 +11,9 @@
 var addLayers = []
 var addPlotLayers = []
 
+var siteEntitylayers = null
+var sitePositionsArray = []
+
 export default {
     name: 'mapBox',
 
@@ -39,6 +42,8 @@
                 }
             })
 
+            // global.viewer.scene.globe.depthTestAgainstTerrain = true
+
             farmRegionLayer = new global.DC.VectorLayer('farmRegionLayer')
             global.viewer.addLayer(farmRegionLayer)
 
@@ -47,6 +52,9 @@
 
             farmLogoLayer = new global.DC.HtmlLayer('farmLogoLayer')
             global.viewer.addLayer(farmLogoLayer)
+
+            siteEntitylayers = new global.DC.VectorLayer('siteEntitylayers')
+            global.viewer.addLayer(siteEntitylayers)
 
             if (global.DC.Namespace.Cesium.FeatureDetection.supportsImageRenderingPixelated()) { // 判断是否支持图像渲染像素化处理
                 global.viewer.setOptions({
@@ -208,7 +216,12 @@
                 )
             })
             farmRegionLayer.addOverlay(polygon)
-            addLayers.push({ center, name: item.farmName })
+
+            if (item.position != '') {
+                addLayers.push({ center, name: item.farmName })
+            } else {
+                addLayers.push({ center: '', name: item.farmName })
+            }
         },
 
         addPlotPolygon (positions, item) {
@@ -249,6 +262,49 @@
             addPlotLayers.push({ center, name: item.landName })
         },
 
+        addSiteEntity (item, url) {
+            const that = this
+
+            const center = [Number(item.lon), Number(item.lat)]
+
+            const label = new global.DC.Label(new global.DC.Position(Number(item.lon), Number(item.lat)), item.name)
+
+            label.attrParams = item
+
+            label.setStyle({
+                fillColor: global.DC.Namespace.Cesium.Color.fromBytes(
+                    1, 190, 254, 255
+                ),
+                showBackground: true,
+                backgroundColor: global.DC.Namespace.Cesium.Color.fromBytes(
+                    0, 0, 0, 145
+                ), // 背景颜色
+                distanceDisplayCondition: {
+                    near: 0, // 最近距离
+                    far: 3000 // 最远距离
+                }, // 根据距离设置可见
+                font: '12px',
+                pixelOffset: { x: 0, y: -26 } // 偏移像素
+            })
+
+            label.on(global.DC.MouseEventType.CLICK, (e) => {
+                that.$parent.plotDetailsPopupShow(e.overlay.attrParams)
+            })
+
+            const billboard = new global.DC.Billboard(new global.DC.Position(Number(item.lon), Number(item.lat)), url)
+            billboard.size = [18, 18]
+            billboard.attrParams = item
+
+            billboard.on(global.DC.MouseEventType.CLICK, (e) => {
+                that.$parent.plotDetailsPopupShow(e.overlay.attrParams)
+            })
+
+            siteEntitylayers.addOverlay(label)
+            siteEntitylayers.addOverlay(billboard)
+
+            sitePositionsArray.push({ center, name: item.name, id: item.id })
+        },
+
         setCenter (name) {
             let center
             addLayers.forEach(item => {
@@ -256,6 +312,14 @@
                     center = item.center
                 }
             })
+
+            if (center == '') {
+                this.$message({
+                    message: '当前农场暂未绘制',
+                    type: 'warning'
+                })
+                return
+            }
 
             global.viewer.camera.flyTo({
                 // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
@@ -297,6 +361,32 @@
             })
         },
 
+        setSiteCenter (name) {
+            let center
+            sitePositionsArray.forEach(item => {
+                if (name == item.name) {
+                    center = item.center
+                }
+            })
+
+            console.log(name, center)
+
+            global.viewer.camera.flyTo({
+                // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
+                // fromDegrees()方法,将经纬度和高程转换为世界坐标
+                destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
+                    center[0], center[1], 500.0
+                ),
+                orientation: {
+                    // 指向
+                    heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
+                    // 视角
+                    pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
+                    roll: 0.0
+                }
+            })
+        },
+
         // 经纬度测算中心位置
         getCenter (arr) {
             let centerLonLat = []

--
Gitblit v1.9.3