Class: OGCSqlToFilterBuilder

OGCSqlToFilterBuilder

SQL WHERE 条件转换为 OGC Filter XML

new OGCSqlToFilterBuilder(options)

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2015
Name Type Description
options SqlToFilterOptions 可选

配置选项

Example
import { OGCSqlToFilterBuilder } from './support/OGCSqlToFilterBuilder';

const builder = new OGCSqlToFilterBuilder({ version: '1.1.0' });

// 简单比较
const filter1 = builder.build("name = 'Beijing'");

// 复杂逻辑组合:多层嵌套 AND/OR + NOT + 括号优先级
const filter2 = builder.build(
  "(status = 'active' AND type = 'residential') OR NOT (owner IS NULL)"
);

// BETWEEN 范围查询(价格区间)
const filter3 = builder.build("price BETWEEN 100000 AND 500000");

// IN 多值查询(多个城市)
const filter4 = builder.build(
  "city IN ('北京', '上海', '深圳') AND status = 'active'"
);

// LIKE 模糊匹配(含转义字符的复杂模式)
const filter5 = builder.build(
  "address LIKE '%路%号%' AND name LIKE '%小区%'"
);

// IS NULL / IS NOT NULL 组合
const filter6 = builder.build(
  "owner IS NOT NULL AND description IS NULL"
);

// 函数比较:面积大于阈值
const filter7 = builder.build("area(shape) > 10000");

// 函数比较:名称转小写后匹配
const filter8 = builder.build(
  "strToLowerCase(name) = strToLowerCase('BEIJING')"
);

// 混合查询:空间 + 属性 + 函数组合
const filter9 = builder.build(
  "BBOX(shape, 114, 30, 115, 31) AND type = 'building' AND area(shape) > 5000"
);

// 复杂查询:多个 OR 分支 + AND 过滤 + 函数
const filter10 = builder.build(
  "(name LIKE '%公园%' OR name LIKE '%广场%' OR name LIKE '%绿地%') " +
  "AND area(shape) BETWEEN 1000 AND 50000 AND status = 'public'"
);

// 深层嵌套:NOT 包裹 OR,OR 内部为 AND 组合
const filter11 = builder.build(
  "NOT (type = 'private' AND (price < 100 OR area(shape) < 500))"
);

// 空间查询(BBOX/INTERSECTS/WITHIN 等)
const filter12 = builder.build("BBOX(shape, 114, 30, 115, 31)");

// 复合空间查询:空间关系 + 属性过滤 + 面积函数
const filter13 = builder.build(
  "INTERSECTS(boundary, $geometry) AND type = 'district' AND " +
  "area(boundary) > 1000000 AND name IS NOT NULL"
);

Methods

build(sql){string}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2055

将 SQL WHERE 条件转换为 Filter XML

Name Type Description
sql string

SQL WHERE 条件

Returns:
Type Description
string Filter XML 字符串

buildNode(sql){Element}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2088

将 SQL WHERE 条件转换为 Filter DOM 节点

Name Type Description
sql string

SQL WHERE 条件

Returns:
Type Description
Element Filter 节点

escapeXmlAttr()

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2246

XML 属性转义

escapeXmlText()

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2236

XML 文本转义

getError(sql){string|null}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2128

获取 SQL 解析错误

Name Type Description
sql string

SQL WHERE 条件

Returns:
Type Description
string | null 错误信息

getVersion(){string}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2028

获取版本

Returns:
Type Description
string

serializeNode(node){string}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2156

自定义 XML 序列化方法,保留命名空间前缀

Name Type Description
node Node
Returns:
Type Description
string

setGeometryResolver(resolver)

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2044

设置几何解析器

Name Type Description
resolver function

解析函数

setVersion(version)

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2036

设置版本

Name Type Description
version string

validate(sql){boolean}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2109

验证 SQL 语法

Name Type Description
sql string

SQL WHERE 条件

Returns:
Type Description
boolean 是否有效

OGCSqlToFilterBuilder.build(sql, version){string}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2267

将 SQL WHERE 条件转换为 Filter XML(静态方法)

Name Type Default Description
sql string

SQL WHERE 条件

version string '1.1.0' 可选

WFS 版本

Returns:
Type Description
string Filter XML 字符串

OGCSqlToFilterBuilder.validate(sql){boolean}

service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 2279

验证 SQL 语法(静态方法)

Name Type Description
sql string

SQL WHERE 条件

Returns:
Type Description
boolean