按请求参数

时间:2015-10-20 09:36:20

标签: geoserver

一般来说:
是否可以根据cql过滤器或其他参数对单个wms查询中的某些wms功能进行不同的样式设置?
特别是:
在wms查询中,返回一组要素的栅格(即称为红点的点),wms features
我希望geoserver不同的样式(蓝点)只是由wms请求发送的http-req-parameter标识的一个特定功能
enter image description here
使用默认样式将其他人保留在集合中 并避免两个wms的重叠:
enter image description here

2 个答案:

答案 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