From 7d8e4eccb1ada1eea39ea34c68481179fa5b3d42 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Wed, 31 Aug 2022 15:43:46 +0800
Subject: [PATCH] 农场地块添加秧苗

---
 src/components/map/index.vue |  160 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 112 insertions(+), 48 deletions(-)

diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index b5b8fae..e3ad160 100644
--- a/src/components/map/index.vue
+++ b/src/components/map/index.vue
@@ -4,7 +4,8 @@
 </template>
 
 <script>
-import axios from 'axios'
+// import axios from 'axios'
+import NCregion from '@/assets/region'
 
 // 图层变量做声明
 var farmRegionLayer = null
@@ -27,10 +28,16 @@
 
     data () {
         return {
-
+            polyline: null
         }
     },
-
+    watch: {
+        'polyline' (newObj, oldObj) {
+            if (newObj && oldObj) {
+                plotRegionLayer.removeOverlay(oldObj)
+            }
+        }
+    },
     computed: {
 
     },
@@ -51,6 +58,10 @@
                     }
                 }
             })
+
+            // 去除logo
+            let primitiveArr = global.viewer.scene.primitives._primitives
+            global.viewer.scene.primitives.remove(primitiveArr[0])
 
             // global.viewer.scene.globe.depthTestAgainstTerrain = true
 
@@ -212,40 +223,40 @@
         }
 
         global.DC.ready(initViewer)
-
-        this.addRegionPolyLine('http://arcgis.jxpskj.com:6080/arcgis/rest/services/nanchengfwx/MapServer/0/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')
+        // this.addRegionPolyLine('http://arcgis.jxpskj.com:6080/arcgis/rest/services/nanchengfwx/MapServer/0/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')
+        this.addRegionPolyLine(NCregion)
     },
     methods: {
         /**
          * 添加南城县边界的数据
          * @param {string} url arcgis服务地址
          */
-        addRegionPolyLine (url) {
-            axios.get(url).then(res => {
-                let position = ''
+        addRegionPolyLine (regionJSON) {
+            // axios.get(regionJSON).then(res => {
+            let position = ''
 
-                res.data.features[0].geometry.rings[0].forEach(item => {
-                    position += `${item[0]}, ${item[1]};`
-                })
-
-                console.log(position, 565656)
-
-                const polyline = new global.DC.Polyline(position)
-                polyline.setStyle({
-                    width: 4,
-                    material: global.DC.Namespace.Cesium.Color.fromBytes(
-                        244, 157, 21,
-                        200
-                    ),
-                    clampToGround: true
-                })
-                regionPolyLineLayer.addOverlay(polyline)
+            regionJSON.features[0].geometry.rings[0].forEach(item => {
+                position += `${item[0]}, ${item[1]};`
             })
+
+            console.log(position, 565656)
+
+            const polyline = new global.DC.Polyline(position)
+            polyline.setStyle({
+                width: 4,
+                material: global.DC.Namespace.Cesium.Color.fromBytes(
+                    244, 157, 21,
+                    200
+                ),
+                clampToGround: true
+            })
+            regionPolyLineLayer.addOverlay(polyline)
+            // })
         },
         /**
-         * 添加农场点及范围的方法
+         * 添加基地点及范围的方法
          * @param {*} positions 位置信息(范围信息)
-         * @param {*} item 农场对应的所有信息(接口返回的数据)
+         * @param {*} item 基地对应的所有信息(接口返回的数据)
          */
         addPolygon (positions, item) {
             const that = this
@@ -256,7 +267,7 @@
                 new global.DC.Position(center[0], center[1], 0),
                 `
                         <div class="farm-map-icon">
-                            <img src="/img/icon/3858.png" alt="">
+                            <img src="../../../zhny-dp/img/icon/3858.png" alt="">
                             <div>${item.farmName}</div>
                         </div>
                         `
@@ -295,37 +306,57 @@
 
             const center = this.getCenter(positions)
 
-            // const divIcon = new global.DC.DivIcon(
-            //     new global.DC.Position(center[0], center[1], 0),
-            //     `
-            //             <div class="farm-map-icon">
-            //                 <img src="/img/icon/3858.png" alt="">
-            //                 // <div>${item.farmName}</div>
-            //             </div>
-            //             `
-            // )
-            // divIcon.attrParams = item
-            // farmLogoLayer.addOverlay(divIcon)
+            if (item.strainUrl != '') {
+                const urls = item.strainUrl.split(',')
+                let imageStr = '<div class="land-map-icon">'
+                urls.forEach(url => {
+                    imageStr += `<img src="${url}" alt=""width="100px" height="100px" text-align="center" class="strainImg">`
+                })
+                imageStr += '</div>'
+                const divIcon = new global.DC.DivIcon(
+                    new global.DC.Position(center[0], center[1], 0), imageStr
+                )
 
-            // divIcon.on(global.DC.MouseEventType.CLICK, (e) => {
-            //     that.$parent.showDetailPopup(e.overlay.attrParams)
-            // })
+                divIcon.attrParams = item
+                farmLogoLayer.addOverlay(divIcon)
 
+                divIcon.on(global.DC.MouseEventType.CLICK, (e) => {
+                    that.$parent.plotDetailsPopupShow(e.overlay.attrParams)
+                })
+            }
             const polygon = new global.DC.Polygon(positions)
             polygon.attrParams = item
             polygon.setStyle({
                 material: global.DC.Namespace.Cesium.Color.fromBytes(
                     129, 255, 84,
-                    200
+                    400
                 )
             })
 
             polygon.on(global.DC.MouseEventType.CLICK, (e) => {
+                that.drawLandPolyLine(positions)
                 that.$parent.plotDetailsPopupShow(e.overlay.attrParams)
             })
 
             plotRegionLayer.addOverlay(polygon)
             addPlotLayers.push({ center, name: item.landName })
+        },
+        /**
+         * 地块画线
+         * @param positions
+         */
+        drawLandPolyLine (positions) {
+            // 画线
+            this.polyline = new global.DC.Polyline(positions)
+            this.polyline.setStyle({
+                width: 4,
+                material: global.DC.Namespace.Cesium.Color.fromBytes(
+                        200, 255, 255,
+                        200
+                ),
+                clampToGround: true
+            })
+            plotRegionLayer.addOverlay(this.polyline)
         },
 
         /**
@@ -398,8 +429,29 @@
         },
 
         /**
+         * 将数据库保存值转换成Map使用坐标
+         * @param landRange 数据库的值
+         * @returns {*[]} Map使用坐标
+         */
+        setPositionByLandRange (landRange) {
+            if (landRange) {
+                landRange = landRange.replace(/POLYGON\(\(/g, '')
+                landRange = landRange.replace(/\)\)/g, '')
+
+                const arr = landRange.split(',')
+                var brr = []
+                arr.forEach(it => {
+                    brr.push(it.split(' '))
+                })
+
+                return brr
+            }
+            return null
+        },
+
+        /**
          * 设置中心点
-         * @param {*} name 对应站点(农场范围)的中心点 --- 对应的名字
+         * @param {*} name 对应站点(基地范围)的中心点 --- 对应的名字
          */
         setCenter (name) {
             let center
@@ -411,7 +463,7 @@
 
             if (center == '') {
                 this.$message({
-                    message: '当前农场暂未绘制',
+                    message: '当前基地暂未绘制',
                     type: 'warning'
                 })
                 return
@@ -438,13 +490,25 @@
          * @param {*} name 对应站点(地块范围)的中心点 --- 对应的名字
          */
 
-        setPlotCenter (name) {
+        setPlotCenter (landObj) {
+            if (!landObj.landRange) {
+                this.$message({
+                    message: '当前地块暂未绘制',
+                    type: 'warning'
+                })
+                return
+            }
             let center
             addPlotLayers.forEach(item => {
-                if (name == item.name) {
+                if (landObj.landName == item.name) {
                     center = item.center
                 }
             })
+            // 根据坐标画线
+            const positions = this.setPositionByLandRange(landObj.landRange)
+            if (positions) {
+                this.drawLandPolyLine(positions)
+            }
 
             global.viewer.camera.flyTo({
                 // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
@@ -522,12 +586,12 @@
             }
             return centerLonLat
         },
-        // 隐藏农场标记图层
+        // 隐藏基地标记图层
         hiddenFarmLayer () {
             farmLogoLayer.show = false
             farmRegionLayer.show = false
         },
-        // 显示农场标记图层
+        // 显示基地标记图层
         showFarmLayer () {
             farmLogoLayer.show = true
             farmRegionLayer.show = true

--
Gitblit v1.9.3