Стилизация wms по параметру запроса
в общем:
Можно ли по-разному стилизовать некоторые функции wms из одного запроса wms на основе фильтра cql или другого параметра?
особенно:
на запрос wms, возвращая растр набора объектов (то есть точек, обозначенных красными точками),
я бы хотел, чтобы геосервер по-разному стилизовал (синяя точка) только одну особенность, определяемую параметром http-req, отправленным с запросом wms
сохраняя остальные в коллекции со стилем по умолчанию
и избегая совпадения двух wms:
2 ответа
Более быстрый (и, вероятно, более простой) способ, чем предлагает @Fmba, - запросить слой дважды, один раз с цветом по умолчанию и второй раз с фильтром и стилем выделения. Вы можете сделать это в одном запросе или сделать два запроса, чтобы браузер мог кэшировать слой по умолчанию и повторно получать только блики.
Для первого запроса это будет выглядеть примерно так:
http://....../wms?service=wms&.....&layers=dots,dots&styles=,highlight&cql_filter=INCLUDE;INTERSECT(the_geom,%20POINT%20(-74.817265%2040.5296504))
Это запрашивает слой (точки) дважды, один раз со стилем по умолчанию (или вы также можете использовать именованный стиль здесь), а затем со стилем выделения. Наконец, вы должны указать два фильтра (первый верный, чтобы вернуть все).
в то время как во втором вы просто добавите еще один слой, как обычно.
Для этого вы можете использовать как фильтры, так и подстановку переменных. Ваш 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>
Обратите внимание, что мы используем параметр с именем 'element' (как мы определили в SLD) в параметре 'env' (в конце запроса), которому вы можете присвоить значение в запросе wms, поэтому только функция с значение name_yo_want_to_filter для атрибута name будет отображаться синим цветом, например так:
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' не будет допустимым параметром, поскольку он обычно скрыт, поэтому геосервер не примет его фильтр 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