2015-10-20 5 views
1

в целом:
Можно по-разному стиль некоторые особенности Wms из запроса одиночные Wms на основе CQL фильтра, или другого параметра?
в частности:
на запрос WMS, возвращая растр из набора функций (т.е. точек стилизованных в виде красных точек), wms features
я хочу Geoserver'у, чтобы differrently стиль (синяя точка) только одной конкретной функции, идентифицированной как HTTP- REQ-параметр передан вместе с WMS запрашивать
enter image description here
держать остальных в коллекции со стилем по умолчанию
и избежать перекрытия двух WMS:
enter image description hereСтайлинг WMS по параметру запроса

+0

Как в [http://docs.geoserver.org/stable/en/user/styling/sld-working.html]: «Документ SLD может быть предоставлен непосредственно в запросе WMS GetMap GET с использованием стиля SLD_BODY = Параметр SLD XML должен быть закодирован в URL-адресе. ", будет ли это подходящим сценарием для вас, создавая SLD на лету за запрос с соответствующим фильтром? – Fbma

+0

@Fbma Я думаю, что бы глобально переделал слой, я отредактировал свой Q, так как это может быть непонятно .. – aleclofabbro

+0

ok я вижу .. перекрытия можно избежать, установив 1-й фильтр как отрицание второго;) – aleclofabbro

ответ

3

Более быстрый (и, возможно, проще) путь, чем @ предложение ФМБА является просить слой дважды, один раз с цветом по умолчанию, и второй раз с фильтром и стиль подсветки , Вы можете либо сделать это в одном запросе, либо сделать два запроса, чтобы браузер мог кэшировать уровень по умолчанию и только обновлять основные моменты.

Для первого запроса он будет выглядеть примерно так:

http://....../wms?service=wms&.....&layers=dots,dots&styles=,highlight&cql_filter=INCLUDE;INTERSECT(the_geom,%20POINT%20(-74.817265%2040.5296504)) 

Это просит слой (точки) дважды, один раз со стилем по умолчанию (или вы можете использовать именованный стиль здесь тоже), а затем с выделить стиль. Наконец, вы должны предоставить два фильтра (первое верно для возврата всего).

, а во втором вы просто добавили бы другой слой, как обычно.

+0

Это, безусловно, лучшее и простое решение, чем мое! ;) – Fbma

+0

Отлично, вы просто попали! – aleclofabbro

+0

@iant: примеры в моем оригинальном Q могут вводить в заблуждение, вызывать «выбранный» стиль, который имеет ту же форму, что и «невыбранный», работает ли он для разных форм или просто перекрывает два wms?[отредактировал Q, чтобы уточнить] – aleclofabbro

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> 

Смотрите, что мы используем параметр, называемый «элемент» (как мы определили в SLD) в параметре «окр» (в конце запроса), которым можно присвоить значение в запросе Wms, поэтому только функцию со значением «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 'не будет действительным параметром, поскольку он обычно скрыт, поэтому геосервер не примет фильтр' PropertyIsEqualTo '.

Ref: http://docs.geoserver.org/latest/en/user/styling/sld-extensions/substitution.html Ref: http://docs.geoserver.org/latest/en/user/styling/sld-reference/filters.html

+0

ну, Адаптер @iant действительно опережает мою конкретную проблему, но +1 для вашего очень полезного совета тоже! – aleclofabbro

Смежные вопросы