一般来说:
是否可以根据cql过滤器或其他参数对单个wms查询中的某些wms功能进行不同的样式设置?
特别是:
在wms查询中,返回一组要素的栅格(即称为红点的点),
我希望geoserver不同的样式(蓝点)只是由wms请求发送的http-req-parameter标识的一个特定功能
使用默认样式将其他人保留在集合中
并避免两个wms的重叠:
答案 0 :(得分:4)
比@ Fmba的建议更快(也可能更简单)的方法是请求图层两次,一次使用默认颜色,第二次使用过滤器和突出显示样式。您可以在一个请求中执行此操作,也可以发出两个请求,以便浏览器可以缓存默认图层并仅重新获取突出显示。
对于第一个请求,它看起来像:
NR>FNR { if ( $2 in a ) print ;}
这会请求图层(点)两次,一次使用默认样式(或者您也可以在此处使用命名样式),然后使用突出显示样式。最后你必须提供两个过滤器(第一个是真的返回所有东西)。
而在第二个中,你会像往常一样添加另一个图层。
答案 1 :(得分:1)
您可以同时使用过滤器和变量替换。 你的SLD可能是这样的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<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_point</Name>
<UserStyle>
<!-- Styles can have names, titles and abstracts -->
<Title>Default Point</Title>
<Abstract>A sample style that draws a point</Abstract>
<FeatureTypeStyle>
<Rule>
<Name>rule1</Name>
<Title>Red Square</Title>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>square</WellKnownName>
<Fill>
<CssParameter name="fill">#FF0000</CssParameter>
</Fill>
</Mark>
<Size>6</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>rule2</Name>
<Title>Blue Square</Title>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>name</ogc:PropertyName>
<ogc:Function name="env">
<ogc:Literal>element</ogc:Literal>
</ogc:Function>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>square</WellKnownName>
<Fill>
<CssParameter name="fill">#0000FF</CssParameter>
</Fill>
</Mark>
<Size>6</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
看到我们在'env'参数中使用了一个名为'element'的参数(我们在SLD中定义)(在请求的末尾),你可以在wms请求中分配一个值,所以只有对于属性“name”,值为“name_yo_want_to_filter”的要素将呈现为蓝色,如下所示:
http://your_geoserver/wms?LAYERS=your_layer&STYLES=&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG%3A25830&BBOX=177329.45520721,4198063.2254456,177681.24924735,4198495.164411&WIDTH=417&HEIGHT=512&env=element:name_yo_want_to_filter
请记住'fid'不是一个有效的参数,因为它通常是隐藏的,所以geoserver不会接受它的'PropertyIsEqualTo'过滤器。
参考:http://docs.geoserver.org/latest/en/user/styling/sld-extensions/substitution.html 参考:http://docs.geoserver.org/latest/en/user/styling/sld-reference/filters.html