^ 关注我,带你一起学GIS ^
前言
❝
GeoServer 是一个基于Java的GIS服务器,它使用户能够查看和编辑地理空间数据。GeoServer遵循开放地理空间联盟(OGC)制定的开放标准,在地图创建和数据共享方面提供了极大的灵活性。
文中以GeoServer2.28.2为例进行讲解。
如果你还没有看过,建议从以上内容开始。
1. 软件环境
本文使用如下软件环境,以供参考,因为GeoSever的运行依赖于JDK,所以还需在服务器安装JDK并配置环境变量。
- GeoServer 使用环境
时间:2026年
系统:Windows 11
openjdk: 17.0.14
GeoServer:3.0-RC
- GeoServer 默认账号信息
访问地址:http://localhost:8080/geoserver
端口:8080
账户: admin
密码:geoserver
在cmd窗口输入java -version命令,检查是否输出JDK版本信息。
如果没有,请先安装JDK。
2. 使用 CSS 语法
Cascading Style Sheet (CSS) GeoServer扩展用于使用Web开发人员更熟悉的语法来生成SLD文件。使用CSS扩展来定义样式,可以使示例更简洁,更易于理解,并且随时可以查看生成的SLD文件。
2.1. 主要属性
在我们学习CSS样式示例的过程中,需要注意一些关键属性的使用,这是构成SLD文件的核心。
| 属性名称 | 属性描述 |
|---|---|
| stroke | Color (or graphic) for LineString or Polygon border(边线:用于设置线或者面边框颜色) |
| fill | Color (or graphic) for Polygon Fill(填充:用于设置面填充颜色) |
| mark | Well-known Mark or graphic used for Point(标注:用于标记点) |
| label | Text expression labeling(标签:用于文字标注) |
| halo-radius | Size of halo used to outline label(晕圈:用于设置标签晕圈大小) |
使用这些关键属性和"*"选择器,你就能实现矢量数据的可视化。
例如,以下是一个关键属性stroke,它为线条或多边形数据提供了一种灰色表现形式:
* {
stroke: gray;
}
以下是为多边形数据提供蓝色填充的关键属性fill:
* {
fill: #2020ED;
}
以下是一个关键属性mark,展示了使用正方形标注点数据:
*{
mark: symbol(square)
}
以下是一个关键属性label,展示了如何使用要素名称标注CITY_NAME属性。
*{
label:[CITY_NAME]
}
以下是一个关键属性halo-radius,展示了如何文字标签生成晕眩半径。
*{
label:[CITY_NAME]
halo-radius:2.5
}
2.2. 语法规则
如上已经演示了由单一规则构成的CSS样式:
*{
mark: symbol(circle)
}
可以设置只适用于特定FeatureType的规则。
populated_places {
mark: symbol(triangle);
}
也可以制定一个包含多条规则的样式,为每条规则精心选择选择器。在本例中,我们使用选择器为首都城市设置带星号的样式,为非首都城市设置带圆圈的样式:
[ FEATURECLA = 'Admin-0 capital' ] {
mark: symbol(star);
mark-size: 6px;
}
[ FEATURECLA <> 'Admin-0 capital' ] {
mark: symbol(circle);
mark-size: 6px;
}
上述执行的特征属性测试使用了约束查询语言(Constraint Query Language (CQL))。这种语法可用于定义筛选条件以选择内容,类似于使用SQL的WHERE语句。它还可以用于定义表达式以访问属性值,从而在定义样式属性时使用这些属性值。
规则选择器也可以根据渲染引擎的状态来触发。在本例中,我们仅在满足指定比例尺条件时显示标签:
[@scale < 20000000] {
label: [ NAME ];
}
在上述示例中,标签是使用CQL表达式NAME定义的。这产生了一种动态样式,该样式会根据具体情况逐一生成每个标签,并用特征属性NAME填充标签。
2.3. 使用 CSS 级联
在上述示例中的特性属性选择中,重复了信息。可以利用CSS层叠,将共有的属性提取到一个公共规则中:
[ FEATURECLA = 'Admin-0 capital' ] {
mark: symbol(star);
}
[ FEATURECLA <> 'Admin-0 capital' ] {
mark: symbol(circle);
}
* {
mark-size: 6px;
}
2.4. 使用伪类选择器
到目前为止,以上内容一直在对单个特征进行样式化,并记录每个形状是如何表示的。
当形状以符号形式呈现时,将会面临第二个挑战:记录符号的颜色和外观。
CSS扩展提供了一个伪选择器,允许将更多属性应用于符号。
以下是使用伪类选择器的示例:
* {
mark: symbol(circle);
}
:mark {
fill: black;
stroke: white;
}
在此示例中,使用了:mark伪选择器来选择圆圈标记,并在渲染时为其提供了填充和描边。
以下是伪类选择器及其渲染内容。
| 伪类选择器 | 应用特征 |
|---|---|
| :mark | point markers |
| :stroke | stroke patterns |
| :fill | fill patterns |
| :shield | label shield |
| :symbol | any use |
上述伪类选择器适用于所有符号,但具体来说,可以使用语法nth-symbol(1):
* {
mark: symbol(circle);
}
:nth-mark(1) {
fill: black;
stroke: white;
}
3. CSS 与 SLD 样式比较
CSS扩展基于相同的GeoServer渲染引擎构建,可访问SLD的所有功能(以及用于精细控制标签的供应商选项)。这两种方法使用的术语略有不同:SLD使用地图专业人员熟悉的术语,而CSS则使用网页开发人员熟悉的术语。
3.1. SLD 样式
SLD利用一系列规则来选择要显示的内容。内容是通过支持属性、空间和时间查询的过滤器来选择的。
一旦选定,内容将被转换为某种形状,并使用符号化器进行绘制。符号化器通过CSS属性进行配置,以记录如fill和opacity等设置。
内容可以由多条规则共同绘制,从而产生一系列效果。
以下是一个SLD文件示例。
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>airports</Name>
<UserStyle>
<Title>Airports</Title>
<FeatureTypeStyle>
<Rule>
<Name>airports</Name>
<Title>Airports</Title>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple"
xlink:href="airport.svg" />
<Format>image/svg</Format>
</ExternalGraphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple"
xlink:href="airport.png" />
<Format>image/png</Format>
</ExternalGraphic>
<Mark>
<WellKnownName>triangle</WellKnownName>
<Fill>
<CssParameter name="fill">#000000</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#FFFFFF</CssParameter>
<CssParameter name="stroke-opacity">0.50</CssParameter>
</Stroke>
</Mark>
<Size>16</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
3.2. CSS 样式
CSS也可以利用规则,每条规则都利用选择器来筛选要显示的内容。每个选择器都使用一个支持属性、空间和时间查询的CQL过滤器。一旦被选中,就会使用CSS属性来描述内容的呈现方式。
内容不会由多条规则共同绘制。当内容满足多条规则的条件时,会使用一种称为继承的过程来合并生成的属性。这种为特定情况细化通用规则的技术,正是层叠样式表(Cascading Style Sheet)中“层叠”概念的来源。
以下是使用CSS的示例。
* {
mark: url(airport.svg);
mark-mime: "image/svg";
}
在此规则中,选择器"*"用于匹配所有内容。该规则定义了表明如何对此内容进行样式设置的属性。 属性mark用于表明希望将此内容绘制为点。
属性值url(airport.svg)是一个指向影像文件的URL地址,用于表示么个点。属性mark-mime表示影像文件期望格式。
4. 实践操作
打开GeoServer主界面,导航到样式界面,点击添加一个新样式。
在新建样式界面填写样式名称,并选择格式为CSS。
- 样式名称:newCSS
- 工作空间:可以不选
- 样式格式:CSS
刚开始时不知道怎么写,可以在样式内容中选择生成默认样式选项,这里以点样式为例进行演示。首先选择要生成的样式类型,如Point,然后点击Generate。
样式编辑区便会生成如下CSS代码。
/* @title dark orange point */
* {
mark: symbol(square);
mark-size: 6px;
:mark {
fill: #ff9900;
}
}
之后点击验证,下方提示栏无报错,则可以点击保存或者采用。
点击图层预览可以看到图层显示效果。
点击预览的图层名称,会弹出选择预览图层对话框,可以再次选择目标图层进行渲染。
在代码编辑器中添加如下样式。
* {
mark: symbol(triangle);
}
:mark{
fill:red;
stroke:1px solid #000;
fill-opacity:0.35;
stroke-opacity:0.25
}
此时图层显示效果如下。
参考资料
- GeoServer CSS Style :docs.geoserver.org/main/en/use…
❝
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 数据重投影