一、引言

geoserver 中的 CQL and ECQL 以及cql_filter可以说是geoserver 中最重要的内容之一了。但是英文文档看起来头大,我这里挑几篇重点内容翻译一下,分享给各位,这是第一篇。其中对有些语句进行了优化以便我们理解。

CQL(Common Query Language,通用查询语言)是由OGC为Catalog Web Services规范创建的查询语言。 与基于XML的过滤器编码语言不同,CQL使用我们更熟悉的文本语法编写。 因此,它更具可读性和适应性。

然而,CQL存在诸多限制。 例如,它不能编码id过滤器,它在任何比较运算符的左侧必须有一个属性。 因此,GeoServer提供了一个名为ECQL的CQL扩展版本。 ECQL消除了CQL的限制,提供了一种更灵活的语言,与SQL具有更强的相似性。

GeoServer支持在WMS和WFS请求中使用CQL和ECQL,也可以在GeoServer的SLD动态符号化器中使用。 若文档可以引用CQL时,它也就可以使用ECQL语法(如果不可以,请将其作为bug上报给我们!)。

本教程通过示例介绍CQL / ECQL语言。 有关完整参考,请参阅ECQL参考

二、开始

以下示例使用GeoServer附带的topp:states示例层。 它们通过使用WMS CQL_FILTER供应商参数来更改WMS请求显示的数据,来演示CQL过滤器的工作方式。 跟着本教程做的最简单方法是打开geoserver左侧Layer Preview,在右边列表中点击topp:states图层的Openlayers预览。 单击地图预览顶部的“...”按钮以打开高级选项工具栏。 可以在Filter:CQL框中输入示例过滤器。

                                                 高级菜单打开的topp:states 预览

过滤器示例中使用的属性是层中包含的属性。 例如,以下是科罗拉多要素的属性名称和值:

Attribute

states.6

STATE_NAME

Colorado

STATE_FIPS

08

SUB_REGION

Mtn

STATE_ABBR

CO

LAND_KM

268659.501

WATER_KM

960.364

PERSONS

3294394.0

FAMILIES

854214.0

HOUSHOLD

1282489.0

MALE

1631295.0

FEMALE

1663099.0

WORKERS

1233023.0

DRVALONE

1216639.0

CARPOOL

210274.0

PUBTRANS

46983.0

EMPLOYED

1633281.0

UNEMPLOY

99438.0

SERVICE

421079.0

MANUAL

181760.0

P_MALE

0.495

P_FEMALE

0.505

SAMP_POP

512677.0

三、简单比较

让我们从一个简单的例子开始吧。 在CQL中,算术和比较使用纯文本表示。 过滤器PERSONS> 15000000将选择拥有超过1500万居民的州:

PERSONS > 15000000

比较运算符的完整列表是:=,<>,>,> =,<,<=.

要选择一个范围值,可以使用BETWEEN运算符:BETWEEN 1000000 AND 3000000:

PERSONS BETWEEN 1000000 AND 3000000

比较运算符也支持文本值。 例如,要仅选择加利福尼亚州,过滤器为STATE_NAME ='California'。 可以使用LIKE运算符进行更一般的文本比较。 STATE_NAME LIKE'N%'将提取以“N”开头的所有州:

STATE_NAME LIKE ‘N%’

也可以将两个属性相互比较。 MALE > FEMALE选择男性人口超过女性人口的状态(比较少见的过滤器):

MALE > FEMALE

可以使用+, - ,*,/运算符计算算术表达式。 过滤器UNEMPLOY /(EMPLOYED + UNEMPLOY)> 0.07选择失业率高于7%的所有州(请记住样本数据非常老,所以不要从结果中下任何结论!)

UNEMPLOY / (EMPLOYED + UNEMPLOY) > 0.07

四、Id和列表比较

如果我们只想提取具有特定特征ID的状态,我们可以使用IN运算符而不指定任何属性,如IN('states.1','states.12'):

IN (‘states.1’, ‘states.12’)

如果我们想要提取名称在给定列表中的状态,我们可以使用IN运算符指定属性名称,如STATE_NAME IN('New York','California','Montana','Texas'):

STATE_NAME IN (‘New York’, ‘California’, ‘Montana’, ‘Texas’)

五、Filter functions(过滤函数)

CQL / ECQL可以使用GeoServer中提供的所有过滤函数。 这大大增强了CQL表达式的功能。

例如,假设我们想要查找名称中包含“m”的所有状态(忽略字母大小写)。 我们可以使用strToLowerCase将所有状态名称转换为小写,然后使用like比较:strToLowerCase(STATE_NAME)like '%m%':

strToLowerCase(STATE_NAME) like ‘%m%’

六、空间过滤

CQL提供了一整套空间过滤功能。 例如,假设您只想显示与(-90,40,-60,45)边界框相交的状态。 过滤器可以写为BBOX(the_geom,-90,40,-60,45)

BBOX(the_geom, -90, 40, -60, 45)

相反,您可以使用过滤器选择不与边界框相交的状态:DISJOINT(the_geom,POLYGON(( - 90 40,-90 45,-60 45,-60 40,-90 40))):

DISJOINT(the_geom, POLYGON((-90 40, -90 45, -60 45, -60 40, -90 40)))

空间谓词的完整列表是:EQUALS,DISJOINT,INTERSECTS,TOUCHES,CROSSES,WITHIN,CONTAINS,OVERLAPS,RELATE,DWITHIN,BEYOND。

翻译不易,转载请注明来源。

geoserver 官方文档翻译(其一)----- CQL and ECQL cql_filter例子相关推荐

  1. 【iOS官方文档翻译】iOS蓝牙的基本概念

    之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...

  2. 欢迎参与 KubeVela 官方文档翻译活动

    来源 | 阿里巴巴云原生公众号 背景 KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英 ...

  3. UIControl事件---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址: iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 UIControl事件1.UIControlEventTouchDown 单点触摸按 ...

  4. 【KubeVela 官方文档翻译】,欢迎大家踊跃参与

    简介:KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英文版,这提高了学习和使用 Kub ...

  5. UIPageControl---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  6. Python3.2官方文档翻译--异常抛出和自定义异常

    Python3.2官方文档翻译--异常抛出和自定义异常 Python3.2官方文档翻译--异常抛出和自定义异常,有需要的朋友可以参考下. 6.4 抛出异常 Raise语句运行程序员强制抛出一个具体的异 ...

  7. Log4j2官方文档翻译--欢迎使用Log4j2!

    官网原文标题<Welcome to Log4j 2!> 官网原文地址http://logging.apache.org/log4j/2.x/manual/index.html 译者:本文介 ...

  8. fastapi官方文档翻译 -目录

    fastapi官方文档翻译 warmsirius 最新发布 最新评论 目录 fastapi教程翻译(前言):安装和运行 fastapi教程翻译(一):了解FastAPI结构 fastapi教程翻译(二 ...

  9. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

最新文章

  1. 什么是浏览器跨域访问操作,js如何实现?
  2. windows下安装Oracle10G
  3. 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
  4. 前端学习(3311):redux的state hook对象
  5. CSS之REM和EM的区别
  6. Spark安装及其sbt和maven 打包工具安装
  7. 罗永浩婉拒币圈争相邀请:发币我也会 只是没打算做
  8. python画中秋的月亮_水彩中秋月亮教程
  9. 数据预处理和数据特征工程
  10. 搭建国外海外多语言一元云购软件夺宝购商城网站
  11. 15分钟搭建自己的博客
  12. Splines(样条曲线)
  13. php codeigniter 教程,CodeIgniter操作教程
  14. HTML炫彩按钮,Button - 动画按钮
  15. python能在ipad上运行吗_如何用iPad运行Python代码?
  16. 大型网站技术架构-读后感
  17. 软件评测和测试国家现行标准
  18. 北海屠龙记------十二
  19. 浅析公关中的“道”与“术”
  20. notify()和notifyAll()有什么区别

热门文章

  1. Hibernate中的方言
  2. python 通达信自动下载收盘和财务数据
  3. 2030肢解中国-美国全球战略与中国危机(戴旭)
  4. C语言创建函数案例:求长方体体积
  5. 无人机动力测试台-自动化测试系统拉力、扭矩、电压、电流、转速和效率
  6. linux eda软件下载,立创EDA V6.4.7 Linux版
  7. 网页龙虎游戏有服务器吗,龙虎相争《龙将》中期玩家竞技PK心得
  8. 畅想未来计算机的绘画作品小学生,畅想未来儿童画绘画作品
  9. nodejs express摸爬滚打篇:express中使用mysql
  10. ECharts(3)