第5章 地图样式与SLD
5.1 SLD标准介绍
5.1.1 什么是SLD
Styled Layer Descriptor(SLD)是OGC制定的地图样式描述标准,用于定义如何渲染地理数据。SLD使用XML语法描述地图的视觉呈现方式,包括颜色、符号、线型、填充等。
SLD的核心价值:
- 标准化:作为OGC标准,SLD在不同GIS软件间具有互操作性
- 灵活性:可以定义复杂的样式规则,包括条件渲染
- 分离关注点:将数据和样式分离,便于管理和重用
5.1.2 SLD文档结构
一个典型的SLD文档结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>图层名称</Name>
<UserStyle>
<Name>样式名称</Name>
<Title>样式标题</Title>
<FeatureTypeStyle>
<Rule>
<Name>规则名称</Name>
<Title>规则标题</Title>
<!-- 过滤条件 -->
<ogc:Filter>...</ogc:Filter>
<!-- 比例尺条件 -->
<MinScaleDenominator>1000</MinScaleDenominator>
<MaxScaleDenominator>100000</MaxScaleDenominator>
<!-- 符号化器 -->
<PointSymbolizer>...</PointSymbolizer>
<LineSymbolizer>...</LineSymbolizer>
<PolygonSymbolizer>...</PolygonSymbolizer>
<TextSymbolizer>...</TextSymbolizer>
<RasterSymbolizer>...</RasterSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
5.1.3 SLD核心元素
NamedLayer vs UserLayer:
- NamedLayer:引用GeoServer中已发布的图层
- UserLayer:使用内联数据或外部数据源
FeatureTypeStyle:
- 定义要素类型的样式
- 可以包含多个Rule
- 多个FeatureTypeStyle会依次渲染
Rule:
- 定义一条样式规则
- 可以包含过滤条件
- 可以包含比例尺范围
- 可以包含一个或多个符号化器
5.1.4 GeoServer样式管理
创建新样式:
- 进入”数据” > “样式”
- 点击”添加新样式”
- 填写样式信息:
- 名称:样式的唯一标识符
- 工作区:样式所属工作区(可选)
- 格式:SLD、CSS、YSLD等
- 在编辑器中输入样式代码
- 点击”验证”检查语法
- 点击”提交”保存
关联样式到图层:
- 进入图层编辑页面
- 在”发布”标签页找到”WMS设置”
- 设置”默认样式”
- 在”附加样式”中添加可选样式
5.2 点要素样式设计
5.2.1 基本点样式
使用简单的圆形符号:
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc">
<NamedLayer>
<Name>points</Name>
<UserStyle>
<Title>Simple Point</Title>
<FeatureTypeStyle>
<Rule>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#FF0000</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</Mark>
<Size>10</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
5.2.2 预定义符号
GeoServer支持以下预定义符号(WellKnownName):
| 符号 | 说明 |
|---|---|
| circle | 圆形 |
| square | 正方形 |
| triangle | 三角形 |
| star | 五角星 |
| cross | 十字 |
| x | X形 |
| diamond | 菱形 |
| arrow | 箭头 |
5.2.3 使用图标
使用外部图像文件作为点符号:
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple"
xlink:href="http://localhost:8080/geoserver/styles/icons/hospital.png"/>
<Format>image/png</Format>
</ExternalGraphic>
<Size>24</Size>
</Graphic>
</PointSymbolizer>
使用相对路径:
<ExternalGraphic>
<OnlineResource xlink:type="simple"
xlink:href="icons/hospital.png"/>
<Format>image/png</Format>
</ExternalGraphic>
图标文件应放在GeoServer数据目录的styles文件夹下。
5.2.4 点符号分类
根据属性值使用不同的符号:
<FeatureTypeStyle>
<!-- 医院 -->
<Rule>
<Name>Hospital</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>hospital</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="icons/hospital.png"/>
<Format>image/png</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<!-- 学校 -->
<Rule>
<Name>School</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>school</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="icons/school.png"/>
<Format>image/png</Format>
</ExternalGraphic>
<Size>20</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
5.2.5 点大小分级
根据数值属性设置符号大小:
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#3366FF</CssParameter>
</Fill>
</Mark>
<Size>
<ogc:Mul>
<ogc:Div>
<ogc:PropertyName>population</ogc:PropertyName>
<ogc:Literal>100000</ogc:Literal>
</ogc:Div>
<ogc:Literal>5</ogc:Literal>
</ogc:Mul>
</Size>
</Graphic>
</PointSymbolizer>
5.3 线要素样式设计
5.3.1 基本线样式
简单的实线样式:
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FF0000</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
<CssParameter name="stroke-linejoin">round</CssParameter>
</Stroke>
</LineSymbolizer>
线条属性说明:
| 属性 | 说明 | 可选值 |
|---|---|---|
| stroke | 线条颜色 | 十六进制颜色值 |
| stroke-width | 线条宽度 | 像素值 |
| stroke-opacity | 透明度 | 0-1 |
| stroke-linecap | 线端样式 | butt, round, square |
| stroke-linejoin | 连接样式 | miter, round, bevel |
| stroke-dasharray | 虚线模式 | 如 “5 2” |
| stroke-dashoffset | 虚线偏移 | 像素值 |
5.3.2 虚线和点线
<!-- 虚线 -->
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#333333</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
<CssParameter name="stroke-dasharray">10 5</CssParameter>
</Stroke>
</LineSymbolizer>
<!-- 点线 -->
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#333333</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
<CssParameter name="stroke-dasharray">2 5</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
</Stroke>
</LineSymbolizer>
<!-- 点划线 -->
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#333333</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
<CssParameter name="stroke-dasharray">10 5 2 5</CssParameter>
</Stroke>
</LineSymbolizer>
5.3.3 双线(套壳线)
通过多个符号化器实现套壳线效果:
<FeatureTypeStyle>
<Rule>
<!-- 底层宽线(外边框) -->
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">5</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
</Stroke>
</LineSymbolizer>
<!-- 顶层窄线(内部填充) -->
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FFFF00</CssParameter>
<CssParameter name="stroke-width">3</CssParameter>
<CssParameter name="stroke-linecap">round</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
5.3.4 道路样式分类
根据道路等级显示不同样式:
<FeatureTypeStyle>
<!-- 高速公路 -->
<Rule>
<Name>Highway</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>road_class</ogc:PropertyName>
<ogc:Literal>highway</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#E34234</CssParameter>
<CssParameter name="stroke-width">6</CssParameter>
</Stroke>
</LineSymbolizer>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FF6B5B</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<!-- 主干道 -->
<Rule>
<Name>Primary</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>road_class</ogc:PropertyName>
<ogc:Literal>primary</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FFA500</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<!-- 次要道路 -->
<Rule>
<Name>Secondary</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>road_class</ogc:PropertyName>
<ogc:Literal>secondary</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FFD700</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
5.3.5 线上符号
在线上重复显示符号:
<LineSymbolizer>
<Stroke>
<GraphicStroke>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#000000</CssParameter>
</Fill>
</Mark>
<Size>6</Size>
</Graphic>
</GraphicStroke>
<CssParameter name="stroke-dasharray">12 12</CssParameter>
</Stroke>
</LineSymbolizer>
5.4 面要素样式设计
5.4.1 基本面样式
简单的填充和边框:
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#00FF00</CssParameter>
<CssParameter name="fill-opacity">0.5</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</PolygonSymbolizer>
5.4.2 图案填充
使用图案进行填充:
<PolygonSymbolizer>
<Fill>
<GraphicFill>
<Graphic>
<Mark>
<WellKnownName>shape://slash</WellKnownName>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</GraphicFill>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</PolygonSymbolizer>
预定义填充图案:
- shape://slash:斜线
- shape://backslash:反斜线
- shape://vertline:竖线
- shape://horline:横线
- shape://plus:加号
- shape://times:乘号
5.4.3 分级色彩
根据数值属性进行颜色分级:
<FeatureTypeStyle>
<!-- 第一级 -->
<Rule>
<Name>Low</Name>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>population</ogc:PropertyName>
<ogc:Literal>100000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#FFFFB2</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<!-- 第二级 -->
<Rule>
<Name>Medium</Name>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>population</ogc:PropertyName>
<ogc:Literal>100000</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>population</ogc:PropertyName>
<ogc:Literal>500000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#FECC5C</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<!-- 第三级 -->
<Rule>
<Name>High</Name>
<ogc:Filter>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>population</ogc:PropertyName>
<ogc:Literal>500000</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#FD8D3C</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
5.4.4 颜色插值
使用函数进行连续颜色渐变:
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">
<ogc:Function name="Interpolate">
<ogc:PropertyName>population</ogc:PropertyName>
<ogc:Literal>0</ogc:Literal>
<ogc:Literal>#FFFFB2</ogc:Literal>
<ogc:Literal>500000</ogc:Literal>
<ogc:Literal>#FD8D3C</ogc:Literal>
<ogc:Literal>1000000</ogc:Literal>
<ogc:Literal>#BD0026</ogc:Literal>
<ogc:Literal>color</ogc:Literal>
</ogc:Function>
</CssParameter>
</Fill>
</PolygonSymbolizer>
5.5 文本标注与注记
5.5.1 基本文本标注
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">12</CssParameter>
<CssParameter name="font-style">normal</CssParameter>
<CssParameter name="font-weight">bold</CssParameter>
</Font>
<Fill>
<CssParameter name="fill">#000000</CssParameter>
</Fill>
</TextSymbolizer>
5.5.2 文字描边(Halo)
添加白色描边使文字在复杂背景上更清晰:
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">14</CssParameter>
</Font>
<Halo>
<Radius>2</Radius>
<Fill>
<CssParameter name="fill">#FFFFFF</CssParameter>
</Fill>
</Halo>
<Fill>
<CssParameter name="fill">#333333</CssParameter>
</Fill>
</TextSymbolizer>
5.5.3 标注位置控制
点要素标注位置:
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>0.5</AnchorPointX>
<AnchorPointY>0</AnchorPointY>
</AnchorPoint>
<Displacement>
<DisplacementX>0</DisplacementX>
<DisplacementY>10</DisplacementY>
</Displacement>
<Rotation>0</Rotation>
</PointPlacement>
</LabelPlacement>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">12</CssParameter>
</Font>
<Fill>
<CssParameter name="fill">#000000</CssParameter>
</Fill>
</TextSymbolizer>
线要素标注位置:
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
<LabelPlacement>
<LinePlacement>
<PerpendicularOffset>5</PerpendicularOffset>
</LinePlacement>
</LabelPlacement>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">10</CssParameter>
</Font>
<Fill>
<CssParameter name="fill">#333333</CssParameter>
</Fill>
<VendorOption name="followLine">true</VendorOption>
<VendorOption name="maxAngleDelta">30</VendorOption>
</TextSymbolizer>
5.5.4 标注冲突处理
GeoServer提供了丰富的标注冲突处理选项:
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">12</CssParameter>
</Font>
<!-- 允许重叠 -->
<VendorOption name="conflictResolution">false</VendorOption>
<!-- 允许部分标注显示在地图外 -->
<VendorOption name="partials">true</VendorOption>
<!-- 标注优先级 -->
<Priority>
<ogc:PropertyName>population</ogc:PropertyName>
</Priority>
<!-- 标注间距 -->
<VendorOption name="spaceAround">10</VendorOption>
<!-- 多边形标注重复 -->
<VendorOption name="repeat">200</VendorOption>
</TextSymbolizer>
5.5.5 中文字体配置
在Linux服务器上使用中文字体:
- 安装中文字体:
```bash
Ubuntu/Debian
sudo apt install fonts-wqy-microhei fonts-wqy-zenhei
CentOS/RHEL
sudo yum install wqy-microhei-fonts wqy-zenhei-fonts
2. 在SLD中使用中文字体:
```xml
<Font>
<CssParameter name="font-family">WenQuanYi Micro Hei</CssParameter>
<CssParameter name="font-size">12</CssParameter>
</Font>
- 重启GeoServer使字体生效
5.6 复杂样式与规则
5.6.1 比例尺依赖样式
根据地图比例尺显示不同样式:
<FeatureTypeStyle>
<!-- 小比例尺(大范围) -->
<Rule>
<Name>Small Scale</Name>
<MinScaleDenominator>100000</MinScaleDenominator>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#FF0000</CssParameter>
</Fill>
</Mark>
<Size>5</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<!-- 大比例尺(小范围) -->
<Rule>
<Name>Large Scale</Name>
<MaxScaleDenominator>100000</MaxScaleDenominator>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#FF0000</CssParameter>
</Fill>
</Mark>
<Size>15</Size>
</Graphic>
</PointSymbolizer>
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">12</CssParameter>
</Font>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
5.6.2 ElseFilter
使用ElseFilter处理未匹配的要素:
<FeatureTypeStyle>
<Rule>
<Name>Highway</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>highway</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FF0000</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<!-- 其他所有道路 -->
<Rule>
<Name>Other Roads</Name>
<ElseFilter/>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#999999</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
5.6.3 渲染顺序控制
使用多个FeatureTypeStyle控制渲染顺序:
<UserStyle>
<!-- 第一层:填充 -->
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#AAFFAA</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
<!-- 第二层:边框 -->
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Stroke>
<CssParameter name="stroke">#006600</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
<!-- 第三层:标注 -->
<FeatureTypeStyle>
<Rule>
<TextSymbolizer>
<Label>
<ogc:PropertyName>name</ogc:PropertyName>
</Label>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
5.7 CSS样式扩展
5.7.1 CSS样式简介
GeoServer支持CSS样式语言,提供了更简洁的样式定义方式:
/* 点样式 */
* {
mark: symbol(circle);
mark-size: 10;
:mark {
fill: #FF0000;
stroke: #000000;
}
}
/* 线样式 */
* {
stroke: #0000FF;
stroke-width: 2;
}
/* 面样式 */
* {
fill: #00FF00;
fill-opacity: 0.5;
stroke: #000000;
}
5.7.2 CSS属性选择器
/* 属性等于 */
[type = 'highway'] {
stroke: #FF0000;
stroke-width: 4;
}
/* 属性大于 */
[population > 1000000] {
fill: #FF0000;
}
/* 属性模糊匹配 */
[name like '%Beijing%'] {
mark-size: 20;
}
/* 多条件 */
[type = 'primary'][lanes > 2] {
stroke-width: 4;
}
5.7.3 CSS比例尺条件
/* 在指定比例尺范围内 */
[@scale < 100000] {
mark-size: 15;
label: [name];
}
[@scale >= 100000] {
mark-size: 5;
}
5.7.4 CSS标注
* {
label: [name];
font-family: "Arial";
font-size: 12;
font-fill: #333333;
halo-color: white;
halo-radius: 2;
label-offset: 0 10;
}
/* 线沿线标注 */
[type = 'road'] {
label: [name];
label-follow-line: true;
label-max-angle-delta: 30;
}
5.7.5 CSS vs SLD
| 方面 | CSS | SLD |
|---|---|---|
| 语法复杂度 | 简洁 | 冗长 |
| 学习曲线 | 较低 | 较高 |
| 功能完整性 | 略有限制 | 完整 |
| 互操作性 | GeoServer特有 | OGC标准 |
| 性能 | 运行时转换为SLD | 直接使用 |
建议:对于简单样式使用CSS,对于复杂样式或需要互操作性的场景使用SLD。
本章小结
本章详细介绍了GeoServer的地图样式系统:
- SLD基础:理解SLD的结构和核心元素
- 点样式:学会使用符号和图标渲染点要素
- 线样式:掌握线条样式、虚线和套壳线的设计
- 面样式:学会填充、图案和分级色彩的应用
- 文本标注:掌握标注的字体、位置和冲突处理
- 高级样式:理解比例尺依赖和渲染顺序控制
- CSS样式:了解CSS样式扩展的使用方法
良好的地图样式设计是制作专业地图的关键。通过灵活运用SLD和CSS,可以创建美观且信息丰富的地图可视化效果。
在下一章中,我们将学习GeoServer的安全管理,包括用户认证、访问控制和数据安全。
思考与练习
- 创建一个SLD样式,使用不同颜色渲染不同类型的道路。
- 设计一个分级色彩地图,根据人口数量显示不同颜色。
- 为点要素添加图标,并实现比例尺依赖的符号大小。
- 创建带有文字描边的标注样式。
- 将一个SLD样式转换为等效的CSS样式。
- 设计一个完整的地图样式,包含道路、建筑和标注。