Добавить новый фильтр в SLD

Я хочу обновить свой sld. В моем sld нет фильтра, но я хочу применить фильтр с помощью python, динамически не вручную помещая значения в sld. Это мой sld.

<StyledLayerDescriptor 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" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd">` <NamedLayer> <Name>Simple polygon with stroke</Name> <UserStyle> <Title>SLD Cook Book: Simple polygon with stroke</Title> <FeatureTypeStyle> <Rule> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#000080</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#FFFFFF</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor> 

Теперь я хочу добавить фильтр в свой атрибут таблицы name_1, есть ли способ сделать это в python. Новый фильтр будет находиться в теге Rule и будет находиться под FeatureTypeStyle.

Python SLD

Ну, я использовал пакет python-sld для динамического создания структуры SLD.

Вы можете найти здесь http://azavea.github.io/python-sld/ проект. Я должен сказать, что документация не является исчерпывающей, поэтому много раз вам приходится пытаться ошибиться, чтобы делать то, что вы хотите. Для меня пришлось перезаписать существующий SLD с новым, я не мог изменить существующий.

Сказанное это, как только у вас установлен пакет:

Создание структуры SLD

 from sld import StyledLayerDescriptor, PolygonSymbolizer, Filter mysld = StyledLayerDescriptor() nl = mysld.create_namedlayer('Simple polygon with stroke') ustyle = nl.create_userstyle() fts = ustyle.create_featuretypestyle() 

Первое правило

 fts.create_rule('First Rule', PolygonSymbolizer) mysld.NamedLayer.UserStyle.FeatureTypeStyle.Rules[0].PolygonSymbolizer.Fill.CssParameters[0].Value = '#000080' mysld.NamedLayer.UserStyle.FeatureTypeStyle.Rules[0].PolygonSymbolizer.Stroke.CssParameters[0].Value = '#FFFFFF' mysld.NamedLayer.UserStyle.FeatureTypeStyle.Rules[0].PolygonSymbolizer.Stroke.CssParameters[1].Value = '2' 

Второе правило и фильтр

 fts.create_rule('Second Rule', PolygonSymbolizer) fts.Rules[1].create_filter('name_1', comparator, value) 

Пример правила:

 fts.Rules[1].create_filter('name_1', '>=', '0') 

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

 fts.create_rule(str(int(round(e))) + '-' + str(int(round(v[i + 1]))), PolygonSymbolizer) fts.Rules[i].create_filter(field, '>=', str(e)) 

Надеюсь, эта помощь, благословения.

Interesting Posts