Страница 1 из 1

Условие в SLD

Добавлено: 01 фев 2013, 17:39
alphart
Есть два поля со значениями: type = Автомагистраль; поле scale = 1; 3; и пустое (т.е. три значения для всей таблицы).
Нужна выборка типа type = Автомагистраль и scale не равно 1
Пишем в SLD:
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsNotEqualTo>
<ogc:PropertyName>scale</ogc:PropertyName>
<ogc:Literal>1</ogc:Literal>
</ogc:PropertyIsNotEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Автомагистраль</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:And>
</ogc:Filter>
По логике на карте должны отобразится значения type = Автомагистраль and scale=3 и
type = Автомагистраль and scale= null (т.е. пустое), однако пустые строки ни в какую не видит и выборку формирует со значением scale=3.
М.б кто-нибудь сталкивался с такой проблемой - как сделать условие на пустые ячейки таблицы?? (такая же проблема и с подписями, когда приходится подписывать по двум полям и когда некоторые значения одного из них могут быть null - подпись не срабатывает).

Re: Условие в SLD

Добавлено: 02 фев 2013, 14:12
Mavka
Проверьте получаемый документ xml, в нем могут быть удалены пустые (null) ноды и проверять просто нечего. В стандарте не описано поведение функций сравнения в случае NULL-аргумента. Но предлагаются доп. функции:

OGC FE 1.1 (GeoServer)
PropertyIsNull (пустое значение)

OGC FE 2.0
PropertyIsNull (поле отсутствует)
PropertyIsNil (пустое значение)

Re: Условие в SLD

Добавлено: 15 фев 2013, 17:09
grozhentsov
Первым делом избавьтесь NULL в полях - ломает все нафик.

Вторым делом не используйте <ogc:PropertyIsNotEqualTo> - проще сделать условие "больше" или "меньше" или вообще выбираете scale = 1 и делаете <Else Filter/>

Можете еще посмотреть фишки ЗДЕСЬ

Re: Условие в SLD

Добавлено: 15 фев 2013, 22:43
alphart
Да, Вы правы - с NULL, как оказалось, работать не хочет.
За презентацию СПАСИБО.