GeoServer CQL/ECQL查询语言教程
geoserver Official GeoServer repository 项目地址: https://gitcode.com/gh_mirrors/ge/geoserver
概述
CQL(Common Query Language)是OGC为目录Web服务规范创建的一种查询语言。与基于XML的Filter Encoding语言不同,CQL采用文本语法编写,具有更好的可读性和易用性。
GeoServer在此基础上提供了扩展版本ECQL(Extended CQL),解决了CQL的一些限制,如无法编码ID过滤器、要求比较运算符左侧必须是属性等,使查询语言更加灵活强大。
应用场景
CQL/ECQL在GeoServer中有多种应用:
- WMS/WFS请求中的过滤条件
- SLD样式中的动态符号化
- 图层预览时的数据筛选
基础语法
比较运算符
支持标准的比较运算符:=
, <>
, >
, >=
, <
, <=
示例:
PERSONS > 15000000 -- 筛选人口超过1500万的州
STATE_NAME = 'California' -- 精确匹配加州
范围查询
使用BETWEEN
进行范围筛选:
PERSONS BETWEEN 1000000 AND 3000000 -- 人口在100万到300万之间的州
模糊匹配
LIKE
运算符支持通配符匹配:
STATE_NAME LIKE 'N%' -- 筛选名称以N开头的州
属性间比较
可以直接比较不同属性:
MALE > FEMALE -- 男性人口多于女性的州
算术运算
支持基本算术运算:+
, -
, *
, /
UNEMPLOY / (EMPLOYED + UNEMPLOY) > 0.07 -- 失业率超过7%的州
高级查询
ID和列表筛选
使用IN
进行ID或值列表筛选:
IN ('states.1', 'states.12') -- 筛选特定ID的要素
STATE_NAME IN ('New York', 'California') -- 筛选特定名称的州
空间查询
支持丰富的空间谓词:BBOX
, DISJOINT
, INTERSECTS
等
示例:
BBOX(the_geom, -90, 40, -60, 45) -- 与指定bbox相交的要素
DISJOINT(the_geom, POLYGON(...)) -- 与多边形不相交的要素
函数支持
ECQL支持GeoServer的所有过滤函数,大大增强了查询能力:
strToLowerCase(STATE_NAME) like '%m%' -- 名称包含m(不区分大小写)的州
最佳实践
-
对于ID字段查询,ECQL要求使用引号包裹保留关键字,如
"id"
-
复杂查询可以结合算术运算和函数使用
-
空间查询时注意坐标系的匹配
-
性能敏感场景下,优先使用简单条件组合
总结
CQL/ECQL为GeoServer提供了强大而灵活的数据过滤能力,从简单的属性比较到复杂的空间分析,都能通过简洁的语法实现。掌握这些查询技巧可以显著提升地理数据处理的效率和精确度。
geoserver Official GeoServer repository 项目地址: https://gitcode.com/gh_mirrors/ge/geoserver
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考