首页介绍下 OpenLayers 的 Filter
Filter是一种基于XML的并且符合OGC规范的语言。SLD用它来实现复杂的Rule选择。WFS在所有需要定位操作对象的地方都会使用Filter。Filter的作用是构建一个表达式,返回值就是Feature的集合,换句话说Filter就如他的名字一般为我们从一个集合中过滤出一个满足我们要求的子集。而过滤的方法就是Filter定义的操作符。Filter定义了三种操作符:地理操作符(Spatial operators),比较操作符(Comparison operators)和逻辑操作符(Logical operators)。
1. Spatial operators定义了地理属性的操作方式,他们有:Equals,Disjoint,Touches,Within,Overlaps,Crosses,Intersects,Contains,DWithin,Beyond,BBOX。
名称 | 含义 | 举例 |
Equals | 等于 |
|
Disjoint | 不相交 |
|
Intersects | 相交(存在交集) |
|
Touches |
|
|
Within | 在..内部 |
|
DWithin | 在…外部 |
|
Overlaps | 叠加 |
|
Crosses | 通过 |
|
Contains | 包含 |
|
Beyond |
|
|
BBOX | 矩形范围 |
|
2. Comparison operators定义了标量属性的操作方式,他们有:PropertyIsEqualTo,PropertyIsNotEqualTo,PropertyIsLessThan,PropertyIsGreaterThan,PropertyIsLessThanOrEq,PropertyIsGreaterThanO,PropertyIsLike,PropertyIsNull,PropertyIsBetween。
名称 | 含义 | 举例 |
PropertyIsEqualTo | == |
|
PropertyIsNotEqualTo | != |
|
PropertyIsLessThan | < |
|
PropertyIsGreaterThan | > |
|
PropertyIsLessThanOrEq | <= |
|
PropertyIsGreaterThanO | >= |
|
PropertyIsLike | 利用通配符等符号对字符进行模糊匹配 | <Filter> <PropertyIsLike wildCard="*" singleChar="#" escapeChar="!"> <PropertyName>LAST_NAME</PropertyName> <Literal>JOHN*</Literal> </PropertyIsLike> </Filter> |
PropertyIsNull | 为空 |
|
PropertyIsBetween | 在…之间 |
|
3. Logical operators逻辑操作符,定义了组合这些操作的方式,他们有:And,Or,Not。
举例:构建一个表达式,人口在一千万以上,并且在指定的空间范围内的城市。
下面来个例子:查询status属性值为1的列表
var filter = new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO, // 表达式 equal
property: "status",
value: "1"
});
var filterStrategy = new OpenLayers.Strategy.Filter({filter: filter});
var gmlLayer = new OpenLayers.Layer.Vector("GML", {
styleMap: myStyles,
projection: "EPSG:4326",
protocol: new OpenLayers.Protocol.HTTP({
url: "http://localhost:8088/geoserver/local/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=local:gis_test&maxFeatures=50",
format: new OpenLayers.Format.GML()
}),
strategies: [new OpenLayers.Strategy.Fixed(),filterStrategy]
});
map.addLayer(gmlLayer);