MS RFC 95:支持表达式分析器中的列表¶
- 日期
2013/04/04
- 作者
托马斯堡
- 联系方式
- 状态
采用
- 版本
MAPServer 6.4
1。概述¶
在进行类过滤时,与表达式相关的挂起性能加速相对较低。上下文关系到何时需要应用给定的 CLASS 到多个属性值。
当前,要将单个类应用于属性的多个值,可以使用正则表达式,也可以使用 IN
操作员,如下所示:
LAYER
...
CLASSITEM "type"
CLASS
EXPRESSION /primary|secondary|tertiary/ #regular expression on CLASSITEM
EXPRESSION ("[type]" IN "primary,secondary,tertiary") #"complex" parser expression
...
END
END
这两种方法都需要相当大的开销,要么在regex系统调用中,要么在执行in-parser操作时使用相当多的malloc。
2。建议的解决方案¶
我们可以通过添加由 {{ }}
分隔符,其中前一层定义变为:
LAYER
...
CLASSITEM "type"
CLASS
EXPRESSION {primary,secondary,tertiary}
...
END
END
在这种情况下,表达式解析是在 msEvalExpression()
而不必进入系统regex或解析器。
三。实施细节¶
对代码的修改相当简单:
支持lexer(maplexer.l)中的分隔符
新建表达式类型
MS_LIST
在MpServer中支持在中查找给定列表中的属性值
msEvalExpression()
在MaMUTIL C中在mapfile.c和mapcopy.c中加载、保存和复制表达式
第四章。限制¶
最初不会为mapscript添加setter和getter(使用
classObj.updateFromString("EXPRESSION {{foo,bar,baz}}")
不支持在列表中引用和转义,即属性值不包含
'
,"
或,
字符。
4。向后兼容性问题¶
无,新功能
7。投票历史¶
+1:米克斯、汤克、丹尼尔、史蒂文、托马斯布