OpenLayers + GeoServer 实现(扩展的)通用查询语言(CQL/ECQL)

    1、CQL/ECQL简述       

 CQL(Common Query Language,通用查询语言)是OGC为目录web服务规范创建的查询语言,不像基于XML的编码语言,CQL使用我们更熟悉的文本语法编写,具有更好的可读性和适应性。更多关于Geoserver中CQL的使用说明,参考CQL And ECQL。CQL的使用,要求属性在比较运算符的左边,基于此,Geoserver提供了扩展的CQL即ECQL,它提供了一种更类似于SQL的灵活语言。

    2、使用规则说明

    (1)比较运算符包括: =,<>,>,>=,<,<=,如要选取人口大于1500万的洲,条件为PERSONS>15000000,其中PERSONS为人口数量的字段,后面不再单独说明。

     (2)BETWEEN表示从一个范围到另一个范围,如PERSONS BETWEEN 1000000 AND 3000000。

     (3)比较运算符支持文本值,可在运算符=的右侧指定文本值,如 STATE_NAME='California',表示选择加利福尼亚州;也可以使用LIKE操作符,与SQL中的用法一样,如 STATE_NAME LIKE 'N%'会选择所有以N开头的州。

     (4)对两个属性进行比较,如 MALE > FEMALE,选择男性多余女性的州。

     (5)算术表达式可以使用 +, -, *, /构成,过滤条件 UNEMPLOY/(EMPLOYED + UNEMPLOY) > 0.07选择所有失业率大于7%的州。

     (6)使用IN操作符,可选择属性在给定值范围内的,与SQL用法相同,如 ID IN ('states.1', 'states.12'),或查找名字在给定值内的州,可使用 STATE_NAME IN ('New York','California', 'Texas')。

     (7)可使用Geoserver中的任何过滤函数,如 strToLowerCase(STATE_NAME) like '%m%',表示名字中包含m的州,不区分M的大小写。

     (8)几何过滤,使用BBOX,如 BBOX(the_geom, -90, 40, -60, 45)表示选择在(-90, 40, -60, 45)范围内的州。

3、示例

下面以加载WMS服务过程中,通过选择省份名称加载对应的省界及站点为例进行说明。代码如下:

function crtLayer(config){
        var id = config.id, url = config.url, layer = config.layer, proj = config.projection;
        var wmsParam = {      
            'LAYERS': layer,//此处可以是单个图层名称,也可以是图层组名称,或多个图层名称  
            //'TILED':false,
            'VERSION': '1.1.0',
            'BBOX': [89.17, 3.37, 135.31, 53.81],
            'SRS': proj   
        }; 
        if(config.CQL_FILTER){
            wmsParam.CQL_FILTER = config.CQL_FILTER;
        }       
        // wms.layer = new ol.layer.Tile({      
        //             source:new ol.source.TileWMS({ //切片WMS服务,多个标注
            wms.layer = new ol.layer.Image({      
                source:new ol.source.ImageWMS({      
                        url: url,
                        //crossOrigin: 'anonymous',      
                        params: wmsParam,      
                        serverType:'geoserver'    //服务器类型  
                    })     
                });

        wms.layer.id = id;
        return wms.layer;
    }

    wms.crtLayer = crtLayer;

    return wms;
});

        代码中,CQL_FILTER = config.CQL_FILTER即为构造的过滤条件,与在url中直接添加 cql_filter = name = 'zhangsan' 的效果是等同的,下面看效果。前一个图加载全国的数据,后一个图通过CQL_FILTER=PROVINCE_CODE='HA'查询河南省数据。


OpenLayers + GeoServer 实现(扩展的)通用查询语言(CQL/ECQL)_第1张图片

        WFS中使用CQL/ECQL的方式是一样的,如有问题,可进行沟通。


你可能感兴趣的:(GeoServer,OpenLayer3)