Geoserver. Арифметические операции в SLD

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
AHrEJI
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 дек 2009, 11:14
Репутация: 1

Geoserver. Арифметические операции в SLD

Сообщение AHrEJI » 10 дек 2012, 10:11

Подскажите возможно ли совершать простейшие операции сложения, вычитания и т.д. при создании стиля слоя (SLD)?

Например, есть такой стиль:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<sld:UserStyle xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
  <sld:Name>130</sld:Name>
  <sld:Title/>
  <sld:FeatureTypeStyle>
    <sld:Name>buffer</sld:Name>
    <sld:FeatureTypeName>Feature</sld:FeatureTypeName>
    <sld:Rule>
      <sld:Title>default</sld:Title>
      <sld:LineSymbolizer uom="http://www.opengeospatial.org/se/units/metre">
        <sld:Geometry>
          <ogc:PropertyName>location</ogc:PropertyName>
        </sld:Geometry>
        <sld:Stroke>
          <sld:CssParameter name="stroke">#999999</sld:CssParameter>
          <sld:CssParameter name="stroke-width">
                  <ogc:PropertyName>width</ogc:PropertyName>
          </sld:CssParameter>
        </sld:Stroke>
      </sld:LineSymbolizer>
    </sld:Rule>
  </sld:FeatureTypeStyle>
</sld:UserStyle>

Как мне к ширине прибавить некое число? либо умножить?

Нашел в документации, что это можно сделать:
http://docs.geoserver.org/stable/en/use ... expression

Но не могу понять как это сделать именно синтаксически.

grozhentsov
Активный участник
Сообщения: 163
Зарегистрирован: 24 янв 2012, 22:02
Репутация: 24
Откуда: Москва
Контактная информация:

Re: Geoserver. Арифметические операции в SLD

Сообщение grozhentsov » 11 дек 2012, 15:18

Поясните, пожалуйста, поподробнее что вы хотите сделать своим стилем и что означают конкретно следующие участки кода:

Код: Выделить всё

<sld:Geometry>
          <ogc:PropertyName>location</ogc:PropertyName>
        </sld:Geometry>
и

Код: Выделить всё

<sld:Stroke>
          <sld:CssParameter name="stroke">#999999</sld:CssParameter>
          <sld:CssParameter name="stroke-width">
                  <ogc:PropertyName>width</ogc:PropertyName>
          </sld:CssParameter>
        </sld:Stroke>
простейшие операции сложения, вычитания и т.д. при создании стиля слоя (SLD)
делать можно, но делается это НЕ с помощью ECQL, на который ведет Ваша ссылка (с его помощью вы можете задавать запросы непосредственно при выводе WMS и WFS слоев), а с помощью SLD.
советую посмотреть Вам тут-как раз про динамическое отображение цветов, толщин и тд
http://docs.geoserver.org/2.1.4/user/st ... ution.html

AHrEJI
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 дек 2009, 11:14
Репутация: 1

Re: Geoserver. Арифметические операции в SLD

Сообщение AHrEJI » 12 дек 2012, 04:54

Первый фрагмент из поля location выводит геометрию
Второй фрагмент делает обводку геометрии с цветом #999999 и толщиной width (которая берется из базы)

Собственно хочу я умножить толщину width на некий коэфициент. Ссылку, которую вы привели я знаю, но это немного не то. Там описывается как через параметры менять толщину, а мне нужно взять значение из базы и прибавить к нему некое число, либо умножить на некое число. Число константа и зоадаваться должно в SLD, т.е. мне не нужно его вызывать через параметры.

Что-то вроде такого хочу:

Код: Выделить всё

       <sld:Stroke>
          <sld:CssParameter name="stroke">#999999</sld:CssParameter>
          <sld:CssParameter name="stroke-width">
                  <ogc:PropertyName>width * 2</ogc:PropertyName>
          </sld:CssParameter>
        </sld:Stroke>
Но такой синтаксис не проходит валидацию

grozhentsov
Активный участник
Сообщения: 163
Зарегистрирован: 24 янв 2012, 22:02
Репутация: 24
Откуда: Москва
Контактная информация:

Re: Geoserver. Арифметические операции в SLD

Сообщение grozhentsov » 12 дек 2012, 10:40

Сперва про возвращение геометрии: ни разу не видел такого фрагмента как у вас, там должна быть функция типа:

Код: Выделить всё

<Geometry>
       <ogc:Function name="boundary">
          <ogc:PropertyName>location</ogc:PropertyName>
       </ogc:Function>
     </Geometry>
Ваше число-константу по идее можно ввести туда так:

Код: Выделить всё

<LineSymbolizer>
<Geometry>
 <ogc:Function name="boundary">
<ogc:Mul>
     <PropertyName>width</PropertyName>
   <Literal>2</Literal>
</ogc:Mul>
 </ogc:Function>
</Geometry>
<Stroke>
<sld:CssParameter name="stroke">#999999</sld:CssParameter>
</Stroke>
</LineSymbolizer>
Не знаю будет ли работать, но это более реальное решение - можно еще поиграться с разными функциями и фильтрами
http://docs.geoserver.org/latest/en/use ... -reference
http://docs.geoserver.org/latest/en/use ... lters.html

AHrEJI
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 дек 2009, 11:14
Репутация: 1

Re: Geoserver. Арифметические операции в SLD

Сообщение AHrEJI » 11 янв 2013, 08:07

Спасибо за подсказку http://docs.geoserver.org/latest/en/use ... xpressions
Фильтры делали именно то, что требовалось.
<Add>
<Sub>
<Mul>
<Div>

А возвращение геометрии и в моем формате работает и выполняет свои функции :)

grozhentsov
Активный участник
Сообщения: 163
Зарегистрирован: 24 янв 2012, 22:02
Репутация: 24
Откуда: Москва
Контактная информация:

Re: Geoserver. Арифметические операции в SLD

Сообщение grozhentsov » 15 янв 2013, 10:24

Код: Выделить всё

 <sld:CssParameter name="stroke-width">
                  <ogc:PropertyName>width</ogc:PropertyName>
          </sld:CssParameter>

Это у Вас вот этот фрагмент правильно работает??
не думал что там такое возможно :oops:

AHrEJI
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 дек 2009, 11:14
Репутация: 1

Re: Geoserver. Арифметические операции в SLD

Сообщение AHrEJI » 17 янв 2013, 04:37

Вообще я имел ввиду вот этот фрагмент:

Код: Выделить всё

        <sld:Geometry>
          <ogc:PropertyName>location</ogc:PropertyName>
        </sld:Geometry>

Но и указанный вами участок тоже корректно работает, но я его модифицировал вот так:

Код: Выделить всё

          <sld:CssParameter name="stroke-width">          
            <ogc:Add>
              <ogc:PropertyName>width</ogc:PropertyName>
              <ogc:Literal>10</ogc:Literal>
            </ogc:Add>
          </sld:CssParameter>

grozhentsov
Активный участник
Сообщения: 163
Зарегистрирован: 24 янв 2012, 22:02
Репутация: 24
Откуда: Москва
Контактная информация:

Re: Geoserver. Арифметические операции в SLD

Сообщение grozhentsov » 15 фев 2013, 17:02

Вот так задается размер символа в geoserver, если он зависит от атрибута

Код: Выделить всё

 <Size>
        <ogc:Add>
          <ogc:Literal>20</ogc:Literal>
          <ogc:Mul>
            <ogc:Div>
              <ogc:PropertyName>PERSONS</ogc:PropertyName>
              <ogc:Literal>20000000.0</ogc:Literal>
            </ogc:Div>
            <ogc:Literal>60</ogc:Literal>
          </ogc:Mul>
        </ogc:Add>
      </Size>

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя