派生自 wuyushui/SewerAndRainNetwork

陈泽平
2021-05-26 33f8b1658371b0bfab97f7834286d326b2e4fadc
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
134
135
136
137
138
139
140
141
142
143
144
import clone from '../../../utils/utils'
 
/**
 * 组装wms加载所需的layers以及filters参数
 */
class WmsLayerList {
  constructor () {
    // [{图层名称:[{typeName:xxx,filter:yyy}]}]
    this.layers = []
  }
 
  addConfig (config) {
    const typeName = config.typeName
    const layerGroup = config.layerGroup || typeName
    const filter = config.filter
    const index = config.index
    if (layerGroup) {
      this.addLayer(layerGroup, typeName, filter, index)
    }
  }
 
  addLayer (layerGroup, typeName, filter, index) {
    const layer = this._getLayer(layerGroup)
    if (layer) {
      const offset = this.indexOf(typeName, filter)
      if (offset < 0) {
        const layerConfig = layer[layerGroup]
        layerConfig.push({ typeName: typeName, filter: filter || 'INCLUDE' })
      }
    } else {
      const layerConfig = {}
      layerConfig[layerGroup] = [{ typeName: typeName, filter: filter || 'INCLUDE' }]
      if (index) {
        this.layers[index] = layerConfig
      } else {
        this.layers.push(layerConfig)
      }
    }
  }
 
  _getLayer (layer) {
    const layers = this.layers
    for (let i = 0; i < layers.length; i++) {
      const lay = layers[i]
      if (lay && lay[layer]) {
        return lay
      }
    }
    return null
  }
 
  indexOf (typeName, filter) {
    filter = filter || 'INCLUDE'
    const layers = this.layers
    for (let i = 0; i < layers.length; i++) {
      const layer = layers[i]
      for (const k in layer) {
        const lay = layer[k]
        for (let j = 0; j < lay.length; j++) {
          const l = lay[j]
          if (typeName === l.typeName && filter === l.filter) {
            return j
          }
        }
      }
    }
    return -1
  }
 
  remove (typeName, filter) {
    filter = filter || 'INCLUDE'
    const layers = clone(this.layers)
    for (let j = 0; j < layers.length; j++) {
      const layer = layers[j]
      for (const k in layer) {
        /* if (typeName === k) {
          delete this.layers[j][k]
          break
        } */
        const layerConfig = layer[k]
        for (let i = 0; i < layerConfig.length; i++) {
          const lay = layerConfig[i]
          if (typeName === lay.typeName && filter === lay.filter) {
            this.layers[j][k].splice(i, 1)
            if (this.layers[j][k].length === 0) {
              this.layers.splice(j, 1)
            }
          }
        }
      }
    }
  }
 
  getLayers () {
    const layers = this.layers
    const _layers = []
    for (let i = 0; i < layers.length; i++) {
      const layer = layers[i]
      for (const k in layer) {
        _layers.push(k)
      }
    }
    return _layers.join(',')
  }
 
  getFilters () {
    const layers = this.layers
    const cqlFilters = []
    for (let i = 0; i < layers.length; i++) {
      const layer = layers[i]
      const filters = []
      for (const k in layer) {
        const layerConfig = layer[k]
        for (let i = 0; i < layerConfig.length; i++) {
          const filter = layerConfig[i].filter
          if (filter) {
            filters.push(filter)
          }
        }
      }
      if (filters.length > 0) {
        cqlFilters.push(filters.join(' OR '))
      }
    }
    return cqlFilters.join(';')
  }
 
  /**
   * 添加元素到指定位置
   * @param index
   * @param element
   * @private
   */
  _addIndex (index, element) {
    const newArr = []
    for (var i = this.dataSouce.length - 1; i > index - 1; i--) {
      newArr[i + 1] = this.dataSouce[i]
    }
    newArr[index] = element
    this.layers = newArr
  }
}
 
export default WmsLayerList