通过SLD_BODY动态改变geoserver的图层样式
目录
要点
使用
取标准样式
修改为自定义规则
GetMap使用
URL调用方式
Openlayers调用方式
GetLegendGraphic使用
访问报错问题
geoserver的WMS服务支持url参数上传sld_body来动态定义访问图层的样式,本文以GetMap以及GetLegendGraphic为例进行说明。
要点
- 一定要注意样式格式的正确性,样式不能有缩进,否则容易报错
- 图层名称一定要在UserLayer里的Name体现
- 样式文本不要过大,url有字数上限
- 尽量使用程序生成需要的样式文本,不要自行编辑
使用
取标准样式
先从geoserver取下来标准的polygon样式,目的是保证格式正确性,标准样式如下:
<?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"><!-- a Named Layer is the basic building block of an SLD document --><NamedLayer><Name>default_polygon</Name><UserStyle><!-- Styles can have names, titles and abstracts --><Title>Default Polygon</Title><Abstract>A sample style that draws a polygon</Abstract><!-- FeatureTypeStyles describe how to render different features --><!-- A FeatureTypeStyle for rendering polygons --><FeatureTypeStyle><Rule><Name>rule1</Name><Title>Gray Polygon with Black Outline</Title><Abstract>A polygon with a gray fill and a 1 pixel black outline</Abstract><PolygonSymbolizer><Fill><CssParameter name="fill">#AAAAAA</CssParameter></Fill><Stroke><CssParameter name="stroke">#000000</CssParameter><CssParameter name="stroke-width">1</CssParameter></Stroke></PolygonSymbolizer></Rule></FeatureTypeStyle></UserStyle></NamedLayer>
</StyledLayerDescriptor>
修改为自定义规则
将Rule部分修改或扩充多个,以满足自身需求为准,举例:
<Rule><Name>rule1</Name><Title>my title</Title><Filter><And><PropertyIsGreaterThanOrEqualTo><PropertyName>key</PropertyName><Literal>1</Literal></PropertyIsGreaterThanOrEqualTo><PropertyIsLessThan><PropertyName>key</PropertyName><Literal>5</Literal></PropertyIsLessThan></And></Filter><PolygonSymbolizer><Fill><CssParameter name="fill">#00ff00</CssParameter><CssParameter name="fill-opacity">1.0</CssParameter></Fill><Stroke/></PolygonSymbolizer>
</Rule>
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=<StyledLayerDescriptor%20xmlns%3D"http%3A%2F%2Fwww.opengis.net%2Fsld"%20xmlns%3Aogc%3D"http%3A%2F%2Fwww.opengis.net%2Fogc"%20xmlns%3Axlink%3D"http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink"%20xmlns%3Axsi%3D"http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance"%20version%3D"1.0.0"%20xsi%3AschemaLocation%3D"http%3A%2F%2Fwww.opengis.net%2Fsld%20StyledLayerDescriptor.xsd"><NamedLayer><Name>layer<%2FName><UserStyle><FeatureTypeStyle><Rule><Name>rule1<%2FName><Title>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参数。
var sld = '你的样式文本';var wms = new ol.layer.Tile({source: new ol.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格式化网站进行测试。
通过SLD_BODY动态改变geoserver的图层样式相关推荐
- [react] 写出React动态改变class切换组件样式
[react] 写出React动态改变class切换组件样式 export default memo(function Demo(){const [clsName,setClsName] = useS ...
- 使用jquery动态改变checkbox选中和样式
做权限选中的时候遇到: <div class="layui-form-item"><label class="layui-form-label" ...
- 点击echarts柱状图动态改变数据项颜色样式
首先附上参考文章连接:https://blog.csdn.net/weixin_42870683/article/details/103528254添加链接描述 今天来实现点击echarts柱状图,动 ...
- 微信小程序开发——动态改变按钮背景颜色
在wxss文件中可以简单地设置button的背景颜色和各种样式,然而,这样的样式设计不能够动态改变.那么,如何动态改变控件的样式呢?下面以button为例来介绍. 此方法不用修改wxss文件,首先,在 ...
- uniapp动态修改样式_掌握Photoshop图层样式技术
凹凸贴图效果 "等等,什么?" 您会惊叹:""图层样式"菜单中没有凹凸贴图效果!" 的确如此,但是通过将"图案覆盖"和& ...
- 如何用jquery动态改变 input 输入框的readonly属性及CSS样式
样例 <style type="text/css">.disable{background-color: #d2d2d2;} </style><div ...
- 如何通过js改变css样式,如何通过JS 动态改变CSS样式
如何通过JS 动态改变CSS样式0 豆豆dou...2013.09.15浏览640次分享举报 .TLIWREGION3CSS { position:absolute; left:32px; top:4 ...
- 修改图层样式(geoserver)
背景 GeoServer支持自定义修改样式,但是默认情况下只能自己编写SLD代码,安装插件以后可以编写CSS代码来修改样式.不过这样子搞还是很麻烦,因此想找到更便捷的方法来修改图层样式. 生成SLD文 ...
- qgis修改geoserver图层样式
一.制作样式文件(.sld) 1.qgis找到对应的shp数据并双击打开: 2.右键图层选择属性 3.编辑图斑的内部填充样式 4.编辑图斑的边框样式 5.全部编辑完后点击apply,即可看到自定义的样 ...
- QGIS + GEOSERVER 图层符号化(根据表数据自定义图层样式)
QGIS + GEOSERVER 图层符号化 图层服务自定义符号化,根据数据进行图层样式的编辑. 1.QGIS 加载数据并配置样式 QGIS 添加PostgreSql 的表数据 输入密码 选择要符号化 ...
最新文章
- java 解释型和编译型
- arguments.length
- 谁的python入门教程好_怎样学习Python?Python入门必看
- VTK:可视化之HanoiIntermediate
- 文件服务器定时开关机,如何配置作服务器定时开关机.ppt
- 【Linux网络编程】原始套接字能干什么?
- 第六章 三大消息摘要算法总结
- Centos 7系统目录结构
- 物体检测学习笔记-3D相机成像原理简介
- python pytorch库_一个简单而强大的深度学习库—PyTorch
- oracle中文转换为unicode,Oracle数据库字符集转换成Unicode产品开发
- 以字符串为例,谈谈Python到底要学到什么程度
- java 克隆对象_Java中克隆(Clone)一个对象
- oracle 实用记录
- android studio在raw文件夹下使用MediaPlayer播放Mp3音乐
- 4K电视与4K显示器的选择
- 私人定制YX3系列高效节能电动机:这才是大腕儿!
- 名悦集团:新能源汽车保养做好这三步,用车无忧
- 智能社:Javascript之Vue.JS(全套)
- 干货 | 想学数据分析不知道该读什么书、从哪本读,翻遍专业知识类网站最全的整理!
热门文章
- ORACLE常用工具介绍
- 制作ROS小车系列(一)——小车底盘制作(麦科勒姆轮地盘)
- python为什么是蛇的天敌_青蛙和蛇一直是天敌,只知道蛇会吃青蛙,你知不知道青蛙也吃蛇...
- Centos7安装源地址
- 微信公众号首次关注自动回复图文信息
- ipone=遥控器?
- 新思课堂C语言答案,新思课堂APP最新版下载_新思课堂APP官方版1.6.8下载_QQ下载站...
- 数据聚合与分组操作(数据分析)
- Docker-Toolbox常见问题解决方案
- 浅析大数据给我们带来的便利和好处