Utilisation de mathématiques simples dans un fichier SLD sur Geoserver?


11

Est-il possible d'utiliser des mathématiques simples dans un fichier SLD sur Geoserver? Supposons que je veuille lire une propriété de taille de texte dans une base de données et multiplier sa valeur, comment faire?

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

Cette approche simple ne fonctionne évidemment pas, alors j'ai pensé qu'il devait y avoir un moyen d'y parvenir.

Réponses:


12

Vous pouvez utiliser les fonctions mathématiques ogc: Mul ogc: Div ogc: Add & ogc: Sub pour effectuer des calculs simples sur les propriétés.

Votre exemple deviendrait donc:

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

Le seul problème est que, techniquement, la spécification SLD peut ne pas vous permettre d'utiliser une fonction dans un paramètre CssParameter. Cependant, GeoServer est beaucoup plus indulgent et le permettra.

Si vous avez besoin de fonctions plus complexes, consultez la page de référence .


fonctionne comme un charme
Bruno Schäpper

J'ai trouvé que <ogc:Mult>cela ne fonctionnait pas pour moi, mais <ogc:Mul>cela a fonctionné.
Simon O'Keefe

1

Pour autant que je sache, GeoServer ne peut pas faire de calcul intégré au SLD.
Vous pouvez toutefois créer une règle dans le SLD qui peut lire <ogc:PropertyName>text_size</ogc:PropertyName>avec un filtre et définir votre propre taille de texte.
Le livre de recettes GeoServer SLD contient quelques exemples d'utilisation<ogc:Filter>


Il semble que cela fonctionne maintenant. Veuillez vérifier avec les versions 2.12.1 et supérieures.
ragnvald
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.