派生自 wuyushui/SewerAndRainNetwork

zhangshuaibao
2021-03-31 9ebe61e0dd331eeb53c3b0cb022c732ceb9e6b87
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
import store from '@/store'
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 () {
    // 1. 遍历layer config
    var layerConfig = store.state.map.serviceLayers.LayerSewersLine
    for (var i = 0, l = layerConfig.length; i < l; i++) {
      var config = layerConfig[i]
      var layers = config.layers
      for (var j = 0; j < layers.length; j++) {
        var childConfig = layers[j]
        var code = childConfig.code
        var wfs = childConfig.wfs
        var wms = childConfig.wms
        var url = childConfig.url
        // 判断是否已经加载过,加载过就 直接得到对象调用 显示函数
        var layer = this.layers[code]
        if (!layer) {
          layer = this.L.featureGroup({}).addTo(this.map)
          // 2. 判断类型
          if (wfs) {
            // 3. 实例化具体service
            var wfsLayerService = new WfsLayerService(childConfig)
            wfsLayerService.init(layer)
          }
          if (wms) {
            var wmsLayerService = new WmsLayerService(childConfig)
            wmsLayerService.init(layer)
          }
          // 请求业务数据接口
          if (url) {
            var busiLayerService = new BusiLayerService(childConfig)
            busiLayerService.init(layer)
          }
          layer ? (this.layers[code] = layer) : console.log('LayerFactory:newLayer is null,please check !!!')
        } else {
          this.show(code)
        }
      }
    }
  }
 
  show (code) {
    var _layer = this.layers[code].addTo(this.map)
    this.setZIndex(_layer)
  }
 
  hide (code) {
    var layer = this.layers[code]
    layer && this.map.removeLayer(layer)
  }
 
  toggle (code) {
 
  }
 
  /**
     * 设置index,线在最下面,点在上面
     * @param layerGroup 图层组
     */
  setZIndex (layerGroup) {
    var layers = layerGroup.getLayers()
    if (layers.length > 0) {
      var layer = layers[0]
      if (layer.feature && (layer.feature.geometry.type === 'LineString' || layer.feature.geometry.type === 'MultiLineString')) {
        layerGroup.bringToBack()
      } else {
        layerGroup.bringToFront()
      }
    }
  }
}
 
export default LayerFactory