派生自 wuyushui/SewerAndRainNetwork

chenzeping
2021-03-08 3cc9f0efa740810f88738788b062f348d8d9b48a
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
/**
 * 加载WMS,拼接FILTER,LAYERS参数等
 */
import MapConfig from '../../conf/MapConfig'
function WfsHelper () {
  this.filters = []
  this.typeNames = []
  this.url = MapConfig.BLUEMAP_HOST + '/server/ogcserver/PipeLine/wfs'
  this.params = {
    REQUEST: 'getfeature',
    OUTPUTFORMAT: 'JSON',
    maxFeatures: 20000,
    version: '1.0.0'
  }
 
  this.addTypeName = (typeName) => {
    this.typeNames.push(typeName)
  }
 
  this.addEquals = (property, literal) => {
    var filter = '<PropertyIsEqualTo><PropertyName>' + property + '</PropertyName><Literal>' + literal + '</Literal></PropertyIsEqualTo>'
    this.filters.push(filter)
  }
 
  this.addLike = (property, literal) => {
    var filter = '<PropertyIsLike><PropertyName>' + property + '</PropertyName><Literal>*' + literal + '*</Literal></PropertyIsLike>'
    this.filters.push(filter)
  }
 
  /**
   * 得到filter参数值
   * @returns {string|null}
   */
  this.getFilterParams = () => {
    var head = '<Filter xmlns="http://www.opengis.net/ogc">'
    var end = '</Filter>'
    var filter = ''
    if (this.filters.length > 0) {
      for (var i = 0; i < this.filters.length; i++) {
        filter += this.filters[i]
      }
      // 当条件数 > 1时,需要用and标签包裹
      if (this.filters.length > 1) {
        return ('FILTER=' + head + '<And>' + filter + '</And>' + end)
      }
      return ('FILTER=' + head + filter + end)
    }
    return null
  }
 
  this.getUrlParams = () => {
    var params = ''
    for (var p in this.params) {
      params += (p + '=' + this.params[p] + '&')
    }
    // 拼接typename参数
    params += 'typename=' + this.typeNames.join(',')
    // 拼接filter参数
    var filterParam = this.getFilterParams()
    if (filterParam) {
      params += '&' + filterParam
    }
    return encodeURI(params)
  }
 
  this.getUrl = () => {
    var url = this.url
    if (url.indexOf('?') > 0) {
      url += '&'
    } else {
      url += '?'
    }
    return url + this.getUrlParams()
  }
}
 
export default WfsHelper