Korzystasz z prostej matematyki w pliku SLD na Geoserver?

11

Czy można używać prostej matematyki w pliku SLD na Geoserver? Załóżmy, że chcę odczytać właściwość rozmiaru tekstu z bazy danych i pomnożyć jej wartość. Jak to zrobić?

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

To proste podejście oczywiście nie działa, więc pomyślałem, że musi być jakiś sposób, aby to osiągnąć.

Bruno Schäpper
źródło

Odpowiedzi:

12

Możesz użyć funkcji matematycznych ogc: Mul ogc: Div ogc: Add & ogc: Sub, aby wykonać proste obliczenia matematyczne dotyczące właściwości.

Zatem twój przykład wyglądałby następująco:

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

Jedynym problemem jest to, że technicznie specyfikacja SLD może nie zezwalać na użycie funkcji w parametrze CssParameter. Jednak GeoServer jest znacznie bardziej wyrozumiały i pozwoli na to.

Jeśli kiedykolwiek potrzebujesz bardziej złożonych funkcji, zobacz stronę referencyjną .

Ian Turton
źródło
działa jak urok
Bruno Schäpper
Odkryłem, że <ogc:Mult>to nie działało dla mnie, ale działało <ogc:Mul>.
Simon O'Keefe
1

O ile mi wiadomo, GeoServer nie potrafi matematyki osadzonej w SLD.
Możesz jednak utworzyć regułę w SLD, która może czytać <ogc:PropertyName>text_size</ogc:PropertyName>za pomocą filtra i definiować własny rozmiar tekstu. GeoServer SLD Cookbook ma kilka przykładów wykorzystania
<ogc:Filter>

AndyHarney
źródło
Wygląda na to, że teraz działa. Sprawdź w wersjach 2.12.1 i nowszych.
ragnvald