布鲁斯李
WMS服务又称网络地图服务,它是利用具有地理空间位置信息的数据制作地图,将地图定义为地理数据的可视化表现。可以根据用户的请求,返回相应的地图,包括PNG、JPEG、TIFF等栅格形式,又或者SVG、WEB CGM等矢量形式。到目前位置,已发布了四个版本的WMS规范:1.0.0、1.1.0、1.1.1、1.3.0 。超图支持1.1.1和1.3.0规范。
SLD(Styled-Layer Descriptor,图层样式表)中定义了可以符号化 WMS 服务的各种样式方案,包括 WMS 服务预定义的样式方案和客户端自定义的样式方案。今天为大家介绍一下如何使用SLD,以leaflet为例:
一、使用预定义的STYLES
新建一个WMS服务接口,在该接口中预先添加上我们已设置好的sld文件。
Sld文件内容如下:
需要发布的数据的属性表内容如下:
使用Leaflet对接该WMS服务:
使用预定义的sld,在参数中添加上我们预先在sld中设置的style风格:
使用预定义的STYLES的缺点是,在修改了sld文件内容之后,需要在新建的WMS接口中重新添加该sld文件。
WMS支持HTTP协议,预定义的STYLES通过STYLES=style_list参数对请求,请求方式如下:
上述示例使用sld样式后的GetMap请求为:
http://localhost:8090/iserver/services/map-china/superM/china?VERSION=1.1.1&REQUEST=GetMap&layers=0.0&STYLES=Color5&SRS=EPSG:4326&BBOX=-180.0,-90.0,180.0,90.0&WIDTH=800&HEIGHT=400&FORMAT=image/png
结果如下:
二、使用自定义的STYLES(推荐使用)
客户端可以对 WMS 服务应用自定义的 SLD,从而对图层进行渲染。使用自定义的 SLD 来渲染图层,有如下两种方式:
1、通过引入 SLD 文档的 URI 来渲染所请求的地图, 即在 GetMap 请求中添加 SLD=sld_xml_uri 参数对。其中 sld_xml_uri 必须能够被 WMS 服务器所访问。请求方式如下:
简单点说,相当于是在url中添加sld=文件位置,这里的文件位置需要使用URI解码的格式。
使用上述SLD的GetMap请求与效果如下:
http://localhost:8090/iserver/services/map-china/superM/china?VERSION=1.1.1&REQUEST=GetMap&layers=0.0&STYLES=Color5&SRS=EPSG:4326&BBOX=-180.0,-90.0,180.0,90.0&WIDTH=800&HEIGHT=400&FORMAT=image/png&SLD=file:///C:/Users/86152/Desktop/sld/wmsColor.sld
2、通过引入 SLD 文档的实际内容来渲染所请求的地图,即在 GetMap 请求中添加 SLD_BODY=sld_xml_body 参数对,其中 sld_body_xml 必须是经过 URI 编码的。请求方式如下:
这里是一个完整的sld内容:
使用上述的SLD_BODY的GetMap请求如下,注意需要先对sld内容进行URI转码,转码后结果较长不予展示,效果如下:
STYLES 与 SLD/SLD_BODY 的匹配规则
在 GetMap 请求中,用户可以指定 STYLES 参数,也可以指定 SLD(SLD_BODY) 参数,二参数的匹配规则如下:
除了上述对sld文件调用方法外,sld本身也支持丰富的规则设定,通过添加FIlter过滤器,允许用户设置自定义的SQL语句。从而实现各式各样的样式方案。以下我们来设置一个过滤器:
效果如下:
)
更多的有关sld的设置,可以到OGC官网中查看一下,地址如下:https://www.opengeospatial.org/standards/sld 。希望可以帮助到大家。