From da21171cc9b248ad9c7f062e41f039eceb910c23 Mon Sep 17 00:00:00 2001
From: YANGDL <114714267@qq.com>
Date: 星期六, 09 一月 2021 14:08:19 +0800
Subject: [PATCH] 优化天地图矢量瓦片切换

---
 src/components/LayerController/modules/LcBaseMap.vue |  112 +++++++++++++++++++-----------------
 src/conf/MapConfig.js                                |    7 ++
 src/components/helpers/BasemapHelper.js              |   13 ++--
 src/components/helpers/ServiceLayerHelper.js         |    5 +
 src/Sgis.js                                          |   12 +--
 5 files changed, 78 insertions(+), 71 deletions(-)

diff --git a/src/Sgis.js b/src/Sgis.js
index cbda89c..79265e7 100644
--- a/src/Sgis.js
+++ b/src/Sgis.js
@@ -48,9 +48,7 @@
  */
 const initBasemapsHelper = (map, L) => {
   // todo 杩欓噷杩涜搴曞浘鍦板浘鐨勫垵濮嬪寲
-  var basemapHelper = new BasemapHelper({ map, L })
-  console.log(basemapHelper)
-  return basemapHelper
+  return new BasemapHelper({ map, L })
 }
 /**
  * 涓氬姟搴曞浘鍒濆鍖�
@@ -58,8 +56,7 @@
  * @param L
  */
 const initTileLayersHelper = (map, L) => {
-  const serviceLayerHelper = new ServiceLayerHelper({ map, L })
-  return serviceLayerHelper
+  return new ServiceLayerHelper({ map, L })
 }
 
 /**
@@ -69,9 +66,8 @@
  */
 const initVectorLayersHelper = (map, L) => {
   // todo 杩欓噷杩涜鍦板浘鐨勫垵濮嬪寲
-  var vectorLayerHelper = new VectorLayerHelper({ map, L })
-  window.vectorLayerHelper = vectorLayerHelper
-  return vectorLayerHelper
+  window.vectorLayerHelper = new VectorLayerHelper({ map, L })
+  return window.vectorLayerHelper
 }
 
 export default {
diff --git a/src/components/LayerController/modules/LcBaseMap.vue b/src/components/LayerController/modules/LcBaseMap.vue
index 315c641..e5af6f2 100644
--- a/src/components/LayerController/modules/LcBaseMap.vue
+++ b/src/components/LayerController/modules/LcBaseMap.vue
@@ -1,85 +1,91 @@
 <template>
-  <div class="inner-panel" v-show="isShow">
-    <div v-for="item in basemapList" :key="item.code" class="basemap-layer-item">
-      <div style="display: flex;">
-        <el-checkbox :src="item.conf.icon_actived" style="display: flex;" name="basemap" v-model="selectedBasemap"
-                     :value="item.code" label="item.code" @change="changeBasemap">鏍囨敞
+  <div class="base-map-inner-panel" v-show="isShow">
+    <div  style="display: flex;" v-for="item in basemapList" :key="item.code" class="basemap-layer-item">
+        <img class="base-map-img" :src="item.conf.icon_actived" width="50" height="50" :title="item.name"
+             @click="changeBasemap(item)"/>
+        <el-checkbox  class="base-map-anno" name="basemap" v-model="item.conf.annotationCheck"
+                     label="鏍囨敞" @change="changeBasemap(item)">
         </el-checkbox>
-        <img style="position: absolute;" :src="item.conf.icon_actived" width="50" height="50" :title="item.name"
-             @click="changeBasemap"/>
-      </div>
-
-
-      <!--      <input  style="position: absolute;" type="radio" name="basemap" v-model="selectedBasemap" :value="item.code" title="鏄剧ず鏍囨敞" @change="changeBasemap"/>鏍囨敞-->
-
     </div>
   </div>
 </template>
-
 <script>
 export default {
-  name: "LcBaseMap",
+  name: 'LcBaseMap',
   components: {},
-  data() {
+  data () {
     return {
       isShow: true,
-      basemapList: [],
-      selectedBasemap: "tianditu_img",
-    };
+      basemapList: []
+    }
   },
   computed: {
-    basemapHelper() {
+    basemapHelper () {
       return this.$store.state.map.basemapHelper
     }
   },
-  mounted() {
+  mounted () {
   },
   methods: {
-    toggleShow() {
-      this.isShow = !this.isShow
+    updateBasemapList () {
+      this.basemapList = this.basemapHelper.getBasemapList()
     },
-    updateBasemapList() {
-      let list = this.basemapHelper.getBasemapList();
-      this.basemapList = list;
-    },
-    changeBasemap() {
-      this.basemapHelper.showBasemap(this.selectedBasemap, true)
-    },
+    changeBasemap (itm) {
+      const code = itm.code
+      this.basemapList.forEach((item) => {
+        if (item.code === code) {
+          this.basemapHelper.showBasemap(item.code, item.conf.annotationCheck, true)
+          this.basemapHelper.getBasemapList().forEach((item) => {
+            item.layer.bringToBack()
+          })
+        }
+      })
+    }
   },
   watch: {
-    basemapHelper(newVal) {
+    basemapHelper (newVal) {
       if (newVal != null) {
-        this.updateBasemapList();
+        this.updateBasemapList()
       }
-    },
-  },
-};
+    }
+  }
+}
 </script>
 
-<style scoped lang="less">
-.inner-panel {
+<style lang="less">
+.base-map-inner-panel {
   display: flex;
   justify-content: center;
   align-items: center;
-}
 
-.basemap-layer-item {
-  display: flex;
-  width: 50px;
-  height: 50px;
-  margin: 10px;
-  border: 2px solid white;
-
-  input {
-    position: relative;
-    left: 0px;
-    top: -53px;
+  .base-map-img{
+    position: absolute;
   }
-
-  .basemap-layer-item-name {
-    position: relative;
-    left: 0px;
-    top: -53px;
+  .base-map-img:hover{
+     cursor:pointer;
+  }
+  .base-map-anno{
+    position: absolute;margin-left: 2px;background-color: rgba(0,0,0,.5);color: white;
+    .el-checkbox__label{
+      padding-left: 5px !important;
+    }
+  }
+  .basemap-layer-item {
+    display: flex;
+    width: 50px;
+    height: 50px;
+    margin: 10px;
+    border: 2px solid white;
+    input {
+      position: relative;
+      left: 0;
+      top: -53px;
+    }
+    .basemap-layer-item-name {
+      position: relative;
+      left: 0;
+      top: -53px;
+    }
   }
 }
 </style>
diff --git a/src/components/helpers/BasemapHelper.js b/src/components/helpers/BasemapHelper.js
index d9a0801..60fc9e8 100644
--- a/src/components/helpers/BasemapHelper.js
+++ b/src/components/helpers/BasemapHelper.js
@@ -50,16 +50,15 @@
      * @param layer 寰呮樉绀哄浘灞傚紩鐢�
      * @param isHideOthers 鏄惁鍏堝叧闂叾浠栧浘灞傦紝榛樿鏄痶rue
      */
-    showBasemap = (code, isHideOthers = true) => {
+    showBasemap = (code, showAnnotation, isHideOthers = true) => {
       const basemap = this.basemapMap.get(code)
       if (isHideOthers) {
-        for (let i = 0, len = this.basemapList.length; i < len; ++i) {
-          this.map.removeLayer(this.basemapList[i].layer)
-          this.map.removeLayer(this.basemapList[i].annotation)
-        }
+        this.basemapLayerGroup.clearLayers()
       }
-      this.map.addLayer(basemap.layer)
-      this.map.addLayer(basemap.annotation)
+      this.basemapLayerGroup.addLayer(basemap.layer)
+      if (showAnnotation) {
+        this.basemapLayerGroup.addLayer(basemap.annotation)
+      }
     }
 
     /**
diff --git a/src/components/helpers/ServiceLayerHelper.js b/src/components/helpers/ServiceLayerHelper.js
index 7175040..21d9aca 100644
--- a/src/components/helpers/ServiceLayerHelper.js
+++ b/src/components/helpers/ServiceLayerHelper.js
@@ -10,6 +10,7 @@
     this.L = options.L
     this.tileLayersMap = new Map()
     this.tileLayersWMSArray = []
+    this.tileLayerWmslayerGroup = L.layerGroup().addTo(this.map)
     this.tileLayersWMTSArray = []
     this.tileLayersTileArray = []
     this.mapConfig = {}
@@ -72,7 +73,7 @@
     layer.config = config
 
     if (isAddToMap) {
-      layer.addTo(this.map)
+      layer.addTo(this.tileLayerWmslayerGroup)
     }
     this.tileLayersMap.set(options.code, layer)
     this.tileLayersWMSArray.push(layer)
@@ -152,7 +153,7 @@
   getWMSConfig (code) {
     const mc = this.mapConfig
     for (let i = 0, len = mc.mapConfig.ServiceLayers.length; i < len; ++i) {
-      if (code == mc.mapConfig.ServiceLayers[i].code && mc.mapConfig.ServiceLayers[i].type === 'wms') {
+      if (code === mc.mapConfig.ServiceLayers[i].code && mc.mapConfig.ServiceLayers[i].type === 'wms') {
         return mc.mapConfig.ServiceLayers[i]
       }
     }
diff --git a/src/conf/MapConfig.js b/src/conf/MapConfig.js
index c0880fc..08b9b3e 100644
--- a/src/conf/MapConfig.js
+++ b/src/conf/MapConfig.js
@@ -45,6 +45,7 @@
       icon_actived: '/assets/images/map-pages/icon/img.png',
       icon_deactived: '/assets/images/map-pages/icon/img.png',
       isAddToMap: true,
+      annotationCheck: true,
       map: {
         layerName: '澶╁湴鍥惧奖鍍忓湴鍥�',
         type: 'wmts',
@@ -80,6 +81,7 @@
       icon_actived: '/assets/images/map-pages/icon/road.png',
       icon_deactived: '/assets/images/map-pages/icon/road.png',
       isAddToMap: false,
+      annotationCheck: true,
       map: {
         layerName: '澶╁湴鍥剧煝閲忓湴鍥�',
         type: 'wmts',
@@ -117,6 +119,7 @@
       icon_actived: '/assets/images/map-pages/icon/img.png',
       icon_deactived: '/assets/images/map-pages/icon/img.png',
       isAddToMap: true,
+      annotationCheck: true,
       map: {
         layerName: '澶╁湴鍥惧奖鍍忓湴鍥�',
         type: 'wmts',
@@ -150,16 +153,18 @@
     },
     {
       code: 'tianditu_vec',
-      name: '澶╁湴鍥惧奖鍍�',
+      name: '澶╁湴鍥剧煝閲�',
       icon_actived: '/assets/images/map-pages/icon/road.png',
       icon_deactived: '/assets/images/map-pages/icon/road.png',
       isAddToMap: false,
+      annotationCheck: true,
       map: {
         layerName: '澶╁湴鍥剧煝閲忓湴鍥�',
         type: 'wmts',
         visible: false,
         layerType: 'vec_c',
         isLoadMapByToken: true,
+        annotationCheck: true,
         url: TIANDITU_GIS_HOST + '/vec_c/wmts?layer=vec&style=default&tilematrixset=c' +
                     '&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}' +
                     '&tk=' + TIANDITU_GIS_TOKEN,

--
Gitblit v1.8.0