OpenLayer监听zoom缩放事件显示不同业务图层

Posted 1024_Byte

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenLayer监听zoom缩放事件显示不同业务图层相关的知识,希望对你有一定的参考价值。

前言

本身是想使用moveend事件来监听地图的缩放级别,但是初始化实例之后一直不能正常监听到缩放结束的变化。
后再文档中查到change:resolution可以同样实现相同效果。因此以此文记录使用和实现方案。

监听事件

 mounted() 
    this.$map = this.$refs.baseMap.getMap()
    this.$map.getView().on('change:resolution', () => 
      if (this.$map.getView().getZoom() >= 17 && this.$map.getView().getZoom() < 19) 
        this.setLayerVisible('图层1', false)
        this.setLayerVisible('图层2', false)
       else if (this.$map.getView().getZoom() < 17) 
        this.setLayerVisible('图层1', true)
        this.setLayerVisible('图层2', true)
       else if (this.$map.getView().getZoom() === 19) 
        this.setLayerVisible('图层1', false)
        this.setLayerVisible('图层2', false)
      
    )

控制图层显示与隐藏

这里我提出setLayerVisible作为公共方法,以便导出复用

Mymap.setLayerVisible = function(mapHelper, title, isV) 
  if (mapHelper) 
    if (title instanceof Object) 
      mapHelper.setLayerVisible(title.title, isV)
     else 
      mapHelper.setLayerVisible(title, isV)
    
  

因为图层初始渲染时不会被监听到需要提前先将图层加载并隐藏

     this.handleTabData('图层名称','这里传数据列')
     this.setLayerVisible ('图层名称', false)// 首次渲染后,若和初始zoom值不对应,先进行隐藏

渲染图层

updateLayer(title, dataArr) 
      const featuresArr = []
      if (title && dataArr && dataArr.length > 0) 
        // 循环数据生成地图要素对象
        const icon = this.icons.filter(item => item.name == title)[0]
        dataArr.map((item, index) => 
          if (item.lgtd && item.lttd) 
            let text = null
            let style = null
            // 这里是根据图层名称渲染不同图层
            switch (title) 
              case this.layerNmRain:
                text = `$item.stnm($item.drps)`
                style = MyMapUtils.createStyle(text, imgSrc, null, null, null, null, [16, 16])
                break
              case this.layerNmRsvr:
                // 可以不指定样式,会使用layersConfig中设置的默认样式:style: new Style(
                text = `$item.stnm($item.rz)`
                style = MyMapUtils.createStyle(text, imgSrc, null, null, null, null, [16, 16])
                break
            
            const feature = MyMapUtils.createFeature(item.lgtd, item.lttd, title, style, item)
            featuresArr.push(feature)
          
        )
      
      MyMapUtils.setLayerData(this.mapHelper, title, featuresArr)
    ,

效果演示

同一经纬度zoom => 15

zoom => 17

zoom => 19

以上是关于OpenLayer监听zoom缩放事件显示不同业务图层的主要内容,如果未能解决你的问题,请参考以下文章

OpenLayer监听zoom缩放事件显示不同业务图层

mapbox监视zoom的事件

高德地图使用-监听地图缩放

如何在 iPhone 中放大 OpenLayer 地图?

openLayer 缩放到适合的窗口

如何清除d3.zoom事件设置的缩放比例