Страница 1 из 1
Geoserver. Арифметические операции в SLD
Добавлено: 10 дек 2012, 10:11
AHrEJI
Подскажите возможно ли совершать простейшие операции сложения, вычитания и т.д. при создании стиля слоя (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
Но не могу понять как это сделать именно синтаксически.
Re: Geoserver. Арифметические операции в SLD
Добавлено: 11 дек 2012, 15:18
grozhentsov
Поясните, пожалуйста, поподробнее что вы хотите сделать своим стилем и что означают конкретно следующие участки кода:
Код: Выделить всё
<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
Re: Geoserver. Арифметические операции в SLD
Добавлено: 12 дек 2012, 04:54
AHrEJI
Первый фрагмент из поля 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>
Но такой синтаксис не проходит валидацию
Re: Geoserver. Арифметические операции в SLD
Добавлено: 12 дек 2012, 10:40
grozhentsov
Сперва про возвращение геометрии: ни разу не видел такого фрагмента как у вас, там должна быть функция типа:
Код: Выделить всё
<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
Re: Geoserver. Арифметические операции в SLD
Добавлено: 11 янв 2013, 08:07
AHrEJI
Спасибо за подсказку
http://docs.geoserver.org/latest/en/use ... xpressions
Фильтры делали именно то, что требовалось.
<Add>
<Sub>
<Mul>
<Div>
А возвращение геометрии и в моем формате работает и выполняет свои функции

Re: Geoserver. Арифметические операции в SLD
Добавлено: 15 янв 2013, 10:24
grozhentsov
Код: Выделить всё
<sld:CssParameter name="stroke-width">
<ogc:PropertyName>width</ogc:PropertyName>
</sld:CssParameter>
Это у Вас вот этот фрагмент правильно работает??
не думал что там такое возможно

Re: Geoserver. Арифметические операции в SLD
Добавлено: 17 янв 2013, 04:37
AHrEJI
Вообще я имел ввиду вот этот фрагмент:
Код: Выделить всё
<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>
Re: Geoserver. Арифметические операции в SLD
Добавлено: 15 фев 2013, 17:02
grozhentsov
Вот так задается размер символа в 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>