^ 关注我,带你一起学GIS ^
前言
❝
GeoServer 是一个基于Java的GIS服务器,它使用户能够查看和编辑地理空间数据。GeoServer遵循开放地理空间联盟(OGC)制定的开放标准,在地图创建和数据共享方面提供了极大的灵活性。
文中以GeoServer2.28.2为例进行讲解。
- GeoServer 简介[1]
- GeoServer 下载安装(完整版)[2]
- GeoServer 集群搭建[3]
如果你还没有看过,建议从以上内容开始。
1. 软件环境
本文使用如下软件环境,以供参考,因为GeoSever的运行依赖于JDK,所以还需在服务器安装JDK并配置环境变量。
时间:2026年
系统:Windows 11
openjdk: 17.0.14
GeoServer:2.28.2
在cmd窗口输入java -version命令,检查是否输出JDK版本信息。
如果没有,请先安装JDK。
2. GeoServer 语法过滤器 CQL 介绍
CQL(通用查询语言)是OGC(开放地理空间联盟)为 Catalogue Web Services(目录网络服务)规范创建的一种查询语言。与基于XML的过滤编码语言不同,CQL采用熟悉的基于文本的语法编写。因此,它更具可读性,更适合手动编写。
然而,CQL存在一些局限性。例如,它无法对id过滤器进行编码,并且要求任何比较运算符的左侧都必须有一个属性。出于这个原因,GeoServer提供了一个名为ECQL的CQL扩展版本。
ECQL消除了CQL的局限性,提供了一种更灵活的语言书写方式,与SQL的相似性更强。
GeoServer支持在WMS和WFS请求以及GeoServer的SLD(动态符号化器)中使用CQL和ECQL。当文档中提到CQL时,也可以使用ECQL语法。
3. GeoServer 语法过滤器 CQL 使用
在以下例子中采用topp:statesGeoServer示例图层进行演示。
下面将通过使用WMS的CQL_FILTER过滤参数来更改WMS请求所显示的数据,从而演示CQL过滤器的工作原理。
跟随本教程最简单的方法是打开GeoServer图层预览,选择topp:states图层。
也可以直接在图层预览上方的搜索框中输入图层名称states进行查找。
选择OpenLayers预览方式打开图层。
示例图层显示如下。
点击地图预览顶部的**Options**按钮,打开高级选项工具栏。
示例过滤器可以在“Filter: CQL”框中输入。
在过滤器示例中使用的是包含在图层中的属性。例如,以下是Colorado要素的属性名称和值:
| 属性名称 | 属性值 |
|---|---|
| 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 |
3.1. 简单比较
现在从一个简单的例子开始。在CQL语法中,算术运算和比较操作都是用纯文本表示的。筛选条件PERSONS > 15000000将选择人口超过1500万的州:
为了选择一个范围值可以使用操作符BETWEEN AND:PERSONS BETWEEN 1000000 AND 3000000:
比较运算符也支持文本值,如想要筛选加利福尼亚州,则筛选条件为STATE_NAME='California';而更通用的操作是使用LIKE运算符,条件STATE_NAME LIKE 'N%'将会筛选所有以“N”字母开头的州。
也可以对两个属性进行相互比较。MALE > FEMALE(男性 > 女性)选择男性人口超过女性人口的州(这种情况很少见):
算术表达式可以使用+、-、*、/运算符进行计算。筛选条件UNEMPLOY / (EMPLOYED + UNEMPLOY) > 0.07会选择失业率高于7%的所有州(请注意,样本数据非常陈旧,因此不要从结果中得出任何结论!)
3.2. ID和列表比较
如果我们只想提取具有特定ID的州,可以使用IN操作符,而无需指定任何属性,如IN ('states.1', 'states.12'):
并且如果想从给定名称列表中筛选出与名称相符合的州,也可以使用IN操作符。STATE_NAME IN ('NewYork','California','Montana','Texas')
3.3. 函数(方法)过滤
CQL/ECQL可以使用GeoServer中提供的任何过滤函数。这极大地增强了CQL表达式的功能。
例如,假设我们想找到所有名称中包含“m”的州,无论字母大小写。我们可以使用strToLowerCase函数将所有州名转换为小写,然后使用like比较:strToLowerCase(STATE_NAME) like '%m%':
3.4. 几何过滤
CQL提供了一整套几何过滤功能。例如,假设你只想显示与(-90,40,-60,45)边界框相交的州。几何过滤器为:BBOX(the_geom,-90,40,-60,45)
与之相反,可以使用过滤器选择那些不与边界框相交的州:DISJOINT(the_geom,POLYGON((-9040,-9045,-6045,-6040,-9040)))
以下为完整的几何谓词列表:
| 几何谓词 | 说明 |
|---|---|
| EQUALS | 等于 |
| DISJOINT | 不相交 |
| INTERSECTS | 相交 |
| TOUCHES | 相切 |
| CROSSES | 相交于 |
| WITHIN | 包含于 |
| CONTAINS | 包含 |
| OVERLAPS | 重叠 |
| RELATE | 关联 |
| DWITHIN | 距离内 |
| BEYOND | 距离外 |
4. GeoServer 账户信息
GeoServer默认账号信息
访问地址:http://localhost:8080/geoserver
端口:8080
账户: admin
密码:geoserver
5. 参考资料
CQL语法:https://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.html
ECQL语法:https://docs.geoserver.org/latest/en/user/filter/ecql_reference.html#filter-ecql-reference
❝
GIS之路 开发示例数据下载,请在公众号后台回复:vector
全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试
GIS之路 公众号已经接入了智能助手 , 可以在对话框进行提问,也可以直接搜索历史文章进行查看。
都看到这了,不要忘记点赞、收藏 + 关注 哦 !
本号不定时更新有关 GIS开发 相关内容,欢迎关注 !
- GeoTools 开发合集(全)
- OpenLayers 开发合集(全)
- GDAL 开发合集(全)
- ArcPy 开发合集(全)
- ArcPy,一个基于 Python 的 GIS 开发库简介
- GeoTools,一个基于 Java 的 GIS 开发库简介
- Turf,一个基于 JS 的 GIS 开发库简介
- GDAL,一个基于 Python 的 GIS 开发库简介
- GeoJSON 数据源简介
- GIS 影像数据源简介
- GIS 名词解释大全
- GIS 服务器,GeoServer 简介
- 从微信指数看当前 GIS 框架的发展趋势
- Landsat 卫星数据简介
- OGC,开放地理空间联盟简介
- 中国地图 GeoJSON 数据集网站简介
- 高校停招 GIS 专业,背后隐藏着怎样的逻辑?
- 实用小工具推荐合集
- ArcGIS Pro 添加底图的方式
- GIS 坐标转换:Shp 数据重投影