Skip to content

Commit cf2584a

Browse files
committed
2 parents b2227d3 + 0a1dbe7 commit cf2584a

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

src/openlayers/mapping/WebMap.js

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2267,7 +2267,7 @@ export class WebMap extends Observable {
22672267
* @param {array} allFeatures - 图层上的feature集合
22682268
*/
22692269
getFiterFeatures(filterCondition, allFeatures) {
2270-
let condition = this.replaceFilterCharacter(filterCondition);
2270+
let condition = this.parseFilterCondition(filterCondition);
22712271
let sql = "select * from json where (" + condition + ")";
22722272
let filterFeatures = [];
22732273
for (let i = 0; i < allFeatures.length; i++) {
@@ -2291,14 +2291,29 @@ export class WebMap extends Observable {
22912291

22922292
/**
22932293
* @private
2294-
* @function ol.supermap.WebMap.prototype.replaceFilterCharacter
2295-
* @description 替换查询语句 中的 and / AND / or / OR / = / !=
2296-
* @param {string} filterString - 过滤条件
2294+
* @function ol.supermap.WebMap.prototype.parseFilterCondition
2295+
* @description 1、替换查询语句 中的 and / AND / or / OR / = / !=
2296+
* 2、匹配 Name in ('', ''),多条件需用()包裹
2297+
* @param {string} filterCondition - 过滤条件
22972298
* @return {string} 换成组件能识别的字符串
22982299
*/
2299-
replaceFilterCharacter(filterString) {
2300-
filterString = filterString.replace(/=/g, '==').replace(/AND|and/g, '&&').replace(/or|OR/g, '||').replace(/<==/g, '<=').replace(/>==/g, '>=');
2301-
return filterString;
2300+
parseFilterCondition(filterCondition) {
2301+
return filterCondition
2302+
.replace(/=/g, "==")
2303+
.replace(/AND|and/g, "&&")
2304+
.replace(/or|OR/g, "||")
2305+
.replace(/<==/g, "<=")
2306+
.replace(/>==/g, ">=")
2307+
.replace(/\(?[^\(]+?\s+in\s+\([^\)]+?\)\)?/g, (res) => {
2308+
// res格式:(省份 in ('四川', '河南'))
2309+
const data = res.match(/([^(]+?)\s+in\s+\(([^)]+?)\)/);
2310+
return data.length === 3
2311+
? `(${data[2]
2312+
.split(",")
2313+
.map((c) => `${data[1]} == ${c.trim()}`)
2314+
.join(" || ")})`
2315+
: res;
2316+
});
23022317
}
23032318

23042319
/**
@@ -2926,7 +2941,7 @@ export class WebMap extends Observable {
29262941
});
29272942
if(layerInfo.filterCondition) {
29282943
//过滤条件
2929-
let condition = that.replaceFilterCharacter(layerInfo.filterCondition);
2944+
let condition = that.parseFilterCondition(layerInfo.filterCondition);
29302945
let sql = "select * from json where (" + condition + ")";
29312946
let filterResult = window.jsonsql.query(sql, {
29322947
attributes: feature.get('attributes')
@@ -3076,7 +3091,7 @@ export class WebMap extends Observable {
30763091
return function (feature) {
30773092
if(layerInfo.filterCondition) {
30783093
//过滤条件
3079-
let condition = that.replaceFilterCharacter(layerInfo.filterCondition);
3094+
let condition = that.parseFilterCondition(layerInfo.filterCondition);
30803095
let sql = "select * from json where (" + condition + ")";
30813096
let filterResult = window.jsonsql.query(sql, {
30823097
attributes: feature.get('attributes')

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy