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

Я хочу обновить свой sld. В моем sld нет фильтра, но я хочу применить фильтр, используя python, динамически, не помещая значения в 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.

1 ответ

Решение

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))

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

Другие вопросы по тегам