背景
GeoServer支持自定义修改样式,但是默认情况下只能自己编写SLD代码,安装插件以后可以编写CSS代码来修改样式。不过这样子搞还是很麻烦,因此想找到更便捷的方法来修改图层样式。
生成SLD文件
既然GeoServer默认情况下只接受sld文件,那我们只需要找到可以生成sld格式的图层样式即可,因此我们可以使用QGIS软件先配置图层样式,然后再将配好的样式导出到GeoServer即可。没装QGIS的自行百度,这里不再赘述了。
1.图层读入到QGIS,并配置样式
右键点击图层,选择图层属性
按需调整以下属性
如果需要某个字段标注图形,可以设置:
如果要利用多个字段标注图形
如果需要在某种比例尺范围下显示或隐藏,可设置:
minimum,缩小到小于该比例尺不显示,maximum则相反。
设置好后保存导出样式:
选择sld格式,保存文件即可
导入GeoServer并配置到图层
登录GeoServer找到样式菜单,进入并选择新建样式
选择之前做好的SLD文件并上传,点击保存即可
然后打开图层,进入图层后选择“”发布“”选项卡:
找到wms设置下的图层设置,下拉选择找到刚才上传的样式,最后保存修改即可
效果如下:
注意事项
1.图形正常显示隐藏,但文字不行的问题
如果设置了按比例尺范围显示隐藏,请在上传后给字体也设置一下显示隐藏的比例尺,否则会出现图形可以正常显示隐藏但文字不行的问题。具体方法很简单,只要在sld文件中将设置显示隐藏的代码复制到设置字体的代码当中去即可:
2.多字段标签显示
有时候我们会想用多个字段一起标注图层的各个要素,进而达到如下效果:
在QGIS里面只需要利用concat函数就行,具体如下图所示:
但这个concat函数在geoserver那边是不认的,因此需要别的方法。
在geoserver中可以用以下方法实现:
一是直接放上两个属性字段(注意,如果做了中文别名,字段名称需要改成中文别名,而不是原字段名,否则会报错。至于怎么给图层加中文别名,可参考我的另一篇文章: 点击这里查看 )
// 注意找到label标签
<se:TextSymbolizer>
<se:Label>
<ogc:PropertyName>属性A</ogc:PropertyName>
<ogc:PropertyName>属性B</ogc:PropertyName>
</se:Label>
</se:TextSymbolizer>
这种方法的效果将是:
//两属性横排拼接,中间空格分隔
属性A 属性B
二是利用concat函数,方法如下:
<se:TextSymbolizer>
<se:Label>
<ogc:Function name="strConcat"> //调用concat函数
<ogc:Function name="strConcat">
<ogc:PropertyName>属性A</ogc:PropertyName>
<ogc:Literal>||</ogc:Literal> //拼接固定字符串“||”
</ogc:Function>
<ogc:PropertyName>属性B</ogc:PropertyName>
</ogc:Function>
</se:Label>
</se:TextSymbolizer>
最后实现效果: