new FilterGenerator()
Members
-
_TEMPORAL_OP_MAP
-
生成时态查询(OGC FES 2.0 Scope 第4条,源自 ISO 19108)
FES 2.0 时态谓词与 XML 元素对照:
SQL 关键字 FES 2.0 XML 元素 说明 DURING fes:During 属性时段在指定时段内(最小时态) EQUALS fes:TEquals 两个时间相等 AFTER fes:After 属性时间在指定时间之后 BEFORE fes:Before 属性时间在指定时间之前 BEGINS fes:Begins 属性时间等于时段开始时间 BEGUNBY fes:BegunBy 属性时段开始时间等于指定时段开始 ENDS fes:Ends 属性时间等于时段结束时间 ENDEDBY fes:EndedBy 属性时段结束时间等于指定时段结束 MEETS fes:Meets 属性时间紧接在指定时间之前 METBY fes:MetBy 属性时间紧接在指定时间之后 OVERLAPS fes:TOverlaps 时段重叠(时间版本,与空间谓词重名) OVERLAPPEDBY fes:OverlappedBy 时段被重叠
Methods
-
_looksLikePropertyValue()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1849 -
判断值是否为属性引用(字母开头,非 ISO 8601 时间格式)
-
_parseTimeInstantArguments()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1910 -
解析即时时间参数,填充 gml:TimeInstant 子元素 arg2 格式支持:
- ISO 8601 时间: 2007-11-30T14:35:00Z
- 对象字面量: { time: "..." } 或 { timePosition: "..." }
-
_parseTimePeriodArguments()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1861 -
解析时段参数,填充 gml:TimePeriod 子元素 arg2 格式支持:
- ISO 8601 区间: 2007-11-30T14:35:00Z/2007-11-30T15:35:00Z
- 对象字面量: { begin: "...", end: "..." }
- "begin,end" 字符串
-
createDocument()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1125 -
创建 Document
-
createFilterElement()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1136 -
创建 Filter 命名空间的元素(带前缀)
-
createGMLElement()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1144 -
创建 GML 命名空间的元素(带 gml: 前缀)
-
formatValue()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1926 -
格式化值(不进行 XML 转义,由 serializeNode 统一处理)
-
generate()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1152 -
生成 AST 对应的 Filter XML
-
generateAnd()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1398 -
生成 AND
-
generateBetween()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1475 -
生成 BETWEEN
-
generateComparison()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1427 -
生成比较
-
generateFunction()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1215 -
生成 OGC Function 元素 OGC Filter 2.0 语法: <fes:Function name="area"> fes:ValueReferenceshape</fes:ValueReference> </fes:Function>
-
generateFunctionArg()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1231 -
生成函数参数
-
generateFunctionBetween()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1314 -
生成函数 BETWEEN 表达式 语法: func(args) BETWEEN low AND high 例如: area(shape) BETWEEN 1000 AND 50000
-
generateFunctionComparison()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1267 -
生成函数比较表达式 语法: func(args) > value 或 func1(arg) = func2(arg) 例如: area(shape) > 10000 或 strToLowerCase(name) = strToLowerCase('BEIJING')
-
generateFunctionIn()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1345 -
生成函数 IN 表达式 语法: func(args) IN (val1, val2, ...) 例如: strToLowerCase(type) IN ('residential', 'commercial', 'industrial')
多值展开为 Or + PropertyIsEqualTo 结构
-
generateFunctionLike()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1374 -
生成函数 LIKE 表达式 语法: func(args) LIKE 'pattern'
-
generateIn()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1516 -
生成 IN (多值比较)
根据 OGC FES 2.0 规范:
- PropertyIsEqualTo 的 BinaryComparisonOpType 要求恰好 2 个 fes:expression 子元素
- 多值展开为 Or + PropertyIsEqualTo 结构,每个 PropertyIsEqualTo 恰好 2 个子元素
SQL: name IN ('a', 'b') 生成:
name a name b -
generateLike()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1549 -
生成 LIKE
-
generateNode()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1169 -
生成节点
-
generateNot()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1418 -
生成 NOT
-
generateNotIn()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1624 -
生成 NOT IN 表达式
SQL: type NOT IN ('a', 'b') 转换为: NOT (type = 'a' OR type = 'b') 生成: fes:Not fes:Or fes:PropertyIsEqualTo fes:ValueReferencetype</fes:ValueReference> fes:Literala</fes:Literal> </fes:PropertyIsEqualTo> fes:PropertyIsEqualTo fes:ValueReferencetype</fes:ValueReference> fes:Literalb</fes:Literal> </fes:PropertyIsEqualTo> </fes:Or> </fes:Not>
-
generateNull()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1587 -
生成 NULL (IS NULL / IS NOT NULL)
根据 OGC FES 2.0 规范 (09-026r2, section 7.7.3.5):
- PropertyIsNull 的 fes:PropertyIsNullType 仅允许 1 个 fes:expression 子元素
- IS NOT NULL 应使用 fes:Not 包装 fes:PropertyIsNull,而非 PropertyIsNotEqualTo + 空 Literal
正确结构: IS NULL → fes:PropertyIsNullfes:ValueReferencename</fes:ValueReference></fes:PropertyIsNull> IS NOT NULL → fes:Notfes:PropertyIsNullfes:ValueReferencename</fes:ValueReference></fes:PropertyIsNull></fes:Not>
-
generateOr()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1408 -
生成 OR
-
generateSpatial()
service/igs/ogc/support/OGCSqlToFilterBuilder.js, line 1674 -
生成空间查询
根据 OGC FES 2.0 规范:
- BinarySpatialOpType (Intersects/Within/Contains 等): choice 中 2 个表达式
- BBOXType: choice 中 expression + any (gml:Envelope)
- DistanceBufferType (DWithin): expression + any, distance 属性 required
修复点:
- DWithin 必须设置 distance 属性(xsd:double, required)
- 几何节点使用 GML 命名空间(如 gml:Point, gml:Envelope),而非 filter 命名空间
- BBOX 使用 gml:Envelope 而非自定义 Geometry 元素