通过SLD_BODY动态改变geoserver的图层样式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过SLD_BODY动态改变geoserver的图层样式相关的知识,希望对你有一定的参考价值。
参考技术A 通过SLD_BODY动态改变geoserver的图层样式分类专栏: 开源WebGIS
版权
目录
要点
使用
取标准样式
修改为自定义规则
GetMap使用
URL调用方式
Openlayers调用方式
GetLegendGraphic使用
访问报错问题
geoserver的WMS服务支持url参数上传sld_body来动态定义访问图层的样式,本文以GetMap以及GetLegendGraphic为例进行说明。
要点
一定要注意样式格式的正确性,样式不能有缩进,否则容易报错
图层名称一定要在UserLayer里的Name体现
样式文本不要过大,url有字数上限
尽量使用程序生成需要的样式文本,不要自行编辑
使用
取标准样式
先从geoserver取下来标准的polygon样式,目的是保证格式正确性,标准样式如下:
<?xml version="1.0"encoding="UTF-8"?>
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">
<!-- a Named Layer is the basic building block of an SLD document -->
default_polygon
<!-- Styles can have names, titles and abstracts -->
Default Polygon
A sample style that draws a polygon
<!-- FeatureTypeStyles describe how to render different features -->
<!-- A FeatureTypeStyle for rendering polygons -->
rule1
Gray Polygon with Black Outline
A polygon with a gray fill and a 1 pixel black outline
#AAAAAA
#000000
1
修改为自定义规则
将Rule部分修改或扩充多个,以满足自身需求为准,举例:
rule1
my title
key
1
key
5
#00ff00
1.0
GetMap使用
URL调用方式
记得要将sld_body转换URLEncode,同时不需要写layer参数。
http://localhost:8080/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&sld_body=layer<%2FName>rule1<%2FName>title<%2FTitle><Filter><PropertyIsLessThan><PropertyName>key<%2FPropertyName><Literal>5<%2FLiteral><%2FPropertyIsLessThan><%2FFilter><PolygonSymbolizer><Fill><CssParameter%20name%3D"fill">%23ff0000<%2FCssParameter><CssParameter%20name%3D"fill-opacity">1.0<%2FCssParameter><%2FFill><Stroke%2F><%2FPolygonSymbolizer><%2FRule><%2FFeatureTypeStyle><%2FUserStyle><%2FNamedLayer><%2FStyledLayerDescriptor>&WIDTH=256&HEIGHT=256&SRS=EPSG%3A4326&STYLES=&BBOX=106.171875%2C21.796875%2C106.5234375%2C22.1484375
Openlayers调用方式
同样不需要写layer参数。
varsld ='你的样式文本';
varwms =newol.layer.Tile(
source:newol.source.TileWMS(
url:'http://localhost:8080/geoserver/wms',
params: 'VERSION':'1.1.1', sld_body: sld
)
);
GetLegendGraphic使用
这里要写layer参数,因为是必填的。
http://localhost:8080/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&sld_body=你的样式文本
访问报错问题
一般都是sld_body引起的,建议先用标准的样式进行测试,逐步修改样式,使用 XML格式化 网站进行测试。
如何将具有不同缩放级别的图层添加到geoserver中的图层组?
【中文标题】如何将具有不同缩放级别的图层添加到geoserver中的图层组?【英文标题】:How to add layers with different zoom levels to the layer group in geoserver? 【发布时间】:2020-08-20 09:15:14 【问题描述】:如何在geoserver的图层组中添加不同缩放级别的图层? 例如, layer1 - 缩放级别 5-8, layer2 - 缩放级别 9-12
如何在geoserver中设置图层不同的缩放级别?
你能帮我解决这个问题吗?谢谢。
【问题讨论】:
【参考方案1】:图层组不关心您的可见性设置,因此您可以将它们全部添加在一起。
如果您实际上要问的是如何使图层仅在某些缩放级别可见?那么您需要将 <MinScaleDenominator>
和 <MaxScaleDenominator>
添加到您的 SLD(或其他样式方法)中 - 有关示例,请参见 sld cookbook。
【讨论】:
我按照你说的做了,但是图层之间的过渡不是很平滑。有没有其他办法? 只要你在每一层转换中使用相同的数字就可以了以上是关于通过SLD_BODY动态改变geoserver的图层样式的主要内容,如果未能解决你的问题,请参考以下文章
geoserver中layer group中的图层顺序问题,为啥看不到道路层