Usando matemática simples no arquivo SLD no Geoserver?

11

É possível usar o Math simples em um arquivo SLD no Geoserver? Suponha que eu queira ler uma propriedade de tamanho de texto de um banco de dados e multiplicar seu valor, como posso fazer isso?

<sld:TextSymbolizer>
    ...
    <sld:CssParameter name="font-size">
        <ogc:PropertyName>text_size</ogc:PropertyName> * 2.1
    </sld:CssParameter>
    ...
</sld:TextSymbolizer>

Obviamente, essa abordagem simples não funciona, então pensei que deveria haver alguma maneira de conseguir isso.

Bruno Schäpper
fonte

Respostas:

12

Você pode usar as funções matemáticas ogc: Mul ogc: Div ogc: Adicionar & ogc: Sub para fazer matemáticas simples nas propriedades.

Portanto, seu exemplo se tornaria:

<sld:CssParameter name="font-size">
    <ogc:Mul>
       <ogc:PropertyName>text_size</ogc:PropertyName>
       <ogc:Literal>2.5</ogc:Literal>
    </ogc:Mul>
</sld:CssParameter>

O único problema é que tecnicamente a especificação SLD pode não permitir o uso de uma função em um CssParameter. No entanto, o GeoServer é muito mais tolerante e permitirá.

Se você precisar de funções mais complexas, consulte a página de referência .

Ian Turton
fonte
funciona como um encanto
Bruno Schäpper
Eu descobri que <ogc:Mult>não funcionou para mim, mas <ogc:Mul>funcionou.
Simon O'Keefe
1

Tanto quanto sei, o GeoServer não pode fazer nenhuma matemática incorporada ao SLD.
No entanto, você pode criar uma regra no SLD que possa ler <ogc:PropertyName>text_size</ogc:PropertyName>com um filtro e definir seu próprio tamanho de texto.
O GeoServer SLD Cookbook tem alguns exemplos de uso<ogc:Filter>

AndyHarney
fonte
Parece que agora está funcionando. Por favor, verifique com as versões 2.12.1 e superior.
Ragnvald 26/09/19