/**
|
* 加载WMS,拼接FILTER,LAYERS参数等
|
*/
|
import { WFS_URL } from '../../conf/Constants'
|
import { lrtrim } from '../../utils/utils'
|
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'
|
}
|
|
this.setTypeName = (typeName) => {
|
if (typeof typeName === 'string' || typeName instanceof String) {
|
const comma = typeName.indexOf(',')
|
if (comma >= 0) {
|
const typeNameArr = typeName.split(',')
|
for (let i = 0; i < typeNameArr.length; i++) {
|
this.addTypeName(lrtrim(typeNameArr[i]))
|
}
|
}
|
} else if (Array.isArray(typeName)) {
|
this.typeNames = typeName
|
}
|
}
|
|
this.setFilter = (filter) => {
|
console.log(filter)
|
if (typeof filter === 'string' || filter instanceof String) {
|
const eq = filter.indexOf('=')
|
const lk = filter.indexOf('like')
|
if (eq >= 0) {
|
const filterArr = filter.split('=')
|
this.addEquals(lrtrim(filterArr[0]), lrtrim(filterArr[1]))
|
}
|
if (lk >= 0) {
|
const filterArr = filter.split('like')
|
this.addLike(lrtrim(filterArr[0]), lrtrim(filterArr[1]))
|
}
|
} else if (Array.isArray(filter)) {
|
this.filters = filter
|
}
|
}
|
|
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
|
}
|
|
this.setPageSize = (pageSize) => {
|
this.pageSize = pageSize
|
}
|
|
this.setMaxFeatures = (maxFeatures) => {
|
this.params.maxFeatures = maxFeatures
|
}
|
}
|
|
export default WfsHelper
|