派生自 wuyushui/SewerAndRainNetwork

wangqi
2021-04-13 270b06c2faed5f2aa564c4a3b1246a5891188bc7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import WfsLayerService from './WfsLayerService'
import BusiLayerService from './BusiLayerService'
import WmsLayerService from './WmsLayerService'
 
class LayerFactory {
  constructor (options) {
    this.L = options.L
    this.map = window.map
    this.layers = {}
  }
 
  init (layerConfig) {
    // 1. 遍历layer config
    if (layerConfig) {
      for (var i = 0, l = layerConfig.length; i < l; i++) {
        var config = layerConfig[i]
        var layers = config.layers
        var childLayer = config.childLayer
        layers && this.init(config.layers)
        childLayer && this.init(config.childLayer)
 
        var checked = config.checked
        checked && this.load(config)
      }
    }
  }
 
  /**
   * 控制显示的级别
   * @param layerConfig
   */
  initEvent (layerConfig) {
    this.map.on('zoomend ', (e) => this.toggleByZoom(layerConfig))
  }
 
  toggleByZoom (layerConfig) {
    const zoom = this.map.getZoom()
    if (layerConfig) {
      for (var i = 0, l = layerConfig.length; i < l; i++) {
        var config = layerConfig[i]
        var layers = config.layers
        var checked = config.checked
        var childLayer = config.childLayer
        layers && this.toggleByZoom(layers)
        childLayer && this.toggleByZoom(childLayer)
        if (checked && config.minZoom) {
          if (zoom > config.minZoom) {
            this.show(config)
          } else {
            console.log(config.name)
            this.hide(config)
          }
        }
      }
    }
  }
 
  load (config) {
    var code = config.code
    var wfs = config.wfs
    var wms = config.wms
    var url = config.url
    // 判断是否已经加载过,加载过就 直接得到对象调用 显示函数
    var layer = this.layers[code]
    if (!layer) {
      layer = this.L.featureGroup({}).addTo(this.map)
      // 2. 判断类型
      if (wfs) {
        // 3. 实例化具体service
        var wfsLayerService = new WfsLayerService(config)
        wfsLayerService.init(layer)
        this.setZIndex(layer)
      }
      if (wms) {
        var wmsLayerService = new WmsLayerService(config)
        wmsLayerService.init(layer)
      }
      // 请求业务数据接口
      if (url) {
        var busiLayerService = new BusiLayerService(config)
        busiLayerService.init(layer)
      }
      layer ? (this.layers[code] = layer) : console.log('LayerFactory:newLayer is null,please check !!!')
    } else {
      this.show(code)
    }
  }
 
  show (config) {
    var layer = this.layers[config.code]
    if (layer) {
      layer.addTo(this.map)
      this.setZIndex(layer)
    } else {
      this.load(config)
    }
  }
 
  hide (config) {
    var layer = this.layers[config.code]
    layer && this.map.removeLayer(layer)
  }
 
  toggle (code) {
 
  }
 
  /**
   * todo 这里无效,貌似是因为geojson加载到地图也是个layergroup
   *
   * 设置index,线在最下面,点在上面
   * @param layerGroup 图层组
   */
  setZIndex (layer) {
    if (Array.isArray(layer)) {
      for (var i = 0; i < layer.length; i++) {
        this.setZIndex(layer[i])
      }
    } else {
      if (layer.getLayers) {
        this.setZIndex(layer.getLayers())
      } else {
        if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) {
          layer.bringToBack && layer.bringToBack()
        } else {
          layer.bringToFront && layer.bringToFront()
        }
      }
    }
  }
}
 
export default LayerFactory