派生自 wuyushui/SewerAndRainNetwork

徐旺旺
2021-05-11 8d9c17cd5166ad31e3357070e95ee73002f34de5
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
/**
 * 加载WMS,拼接FILTER,LAYERS参数等
 */
import { WFS_URL } from '../../conf/Constants'
function WfsHelper () {
  this.filters = []
  this.typeNames = []
  this.url = WFS_URL
  this.page = 1
  this.pageSize = 10
  this.params = {
    REQUEST: 'getfeature',
    OUTPUTFORMAT: 'application/json',
    maxFeatures: 10,
    version: '1.0.0',
    startIndex: 0
  }
 
  this.setTypeName = (typeName) => {
    this.typeNames = typeName
  }
 
  this.clearFilter = () => {
    this.filters = []
  }
 
  this.addTypeName = (typeName) => {
    this.typeNames.push(typeName)
  }
 
  this.addEquals = (property, equals) => {
    // var filter = '<PropertyIsEqualTo><PropertyName>' + property + '</PropertyName><Literal>' + literal + '</Literal></PropertyIsEqualTo>'
    var filter = property + '=' + equals
    this.filters.push(filter)
  }
 
  this.addLike = (property, literal) => {
    // if (property && literal) {
    // var filter = '<PropertyIsLike><PropertyName>' + property + '</PropertyName><Literal>*' + literal + '*</Literal></PropertyIsLike>'
    // this.filters.push(filter)
    // }
    var filter = property + ' like \'%' + literal + '%\''
    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)
    } */
    var filter = ''
    if (this.filters.length > 0) {
      filter = 'CQL_FILTER='
      for (var i = 0; i < this.filters.length; i++) {
        filter += this.filters[i]
        if (i !== this.filters.length - 1) {
          filter += ' AND '
        }
      }
      return filter
    }
    return filter
  }
 
  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)
    return params
  }
 
  this.getUrl = () => {
    var url = this.url
    if (url.indexOf('?') > 0) {
      url += '&'
    } else {
      url += '?'
    }
    return url + this.getUrlParams()
  }
 
  this.setPage = (page) => {
    const startIndex = page * this.pageSize
    this.params.startIndex = startIndex
    this.page = page
  }
}
 
export default WfsHelper