view style-templates/sounding_results_areas_geoserver.sld-template @ 5095:e21cbb9768a2

Prevent duplicate fairway areas In principal, there can be only one or no fairway area at each point on the map. Since polygons from real data will often be topologically inexact, just disallow equal geometries. This will also help to avoid importing duplicates with concurrent imports, once the history of fairway dimensions will be preserved.
author Tom Gottfried <tom@intevation.de>
date Wed, 25 Mar 2020 18:10:02 +0100
parents 88de29143147
children
line wrap: on
line source

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor
    xmlns="http://www.opengis.net/sld"
    xmlns:se="http://www.opengis.net/se"
    xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"
    version="1.1.0">
  <NamedLayer>
    <se:Name>sounding_results_areas</se:Name>
    <UserStyle>
      <se:Name>sounding_results_areas</se:Name>
      <se:FeatureTypeStyle>
          <se:Name>area_colours</se:Name>
        <se:Description>
          <se:Abstract>
            FeatureTypeStyle defining colour classes for height attribute
          </se:Abstract>
        </se:Description>
        {{ range . -}}
        <se:Rule>
        {{- if not .HasLow }}
          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
          <ogc:Filter>
            <ogc:PropertyIsLessThanOrEqualTo>
              <ogc:PropertyName>height</ogc:PropertyName>
              <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
            </ogc:PropertyIsLessThanOrEqualTo>
          </ogc:Filter>
        {{- else if not .HasHigh }}
          <se:Name>&gt; {{ printf "%g" .Low }}</se:Name>
          <ogc:Filter>
            <ogc:PropertyIsGreaterThanOrEqualTo>
              <ogc:PropertyName>height</ogc:PropertyName>
              <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
            </ogc:PropertyIsGreaterThanOrEqualTo>
          </ogc:Filter>
        {{- else }}
          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
          <ogc:Filter>
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>height</ogc:PropertyName>
                <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>height</ogc:PropertyName>
                <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
        {{- end }}
          <se:MaxScaleDenominator>34e3</se:MaxScaleDenominator>
          <se:PolygonSymbolizer>
            <se:Fill>
              <se:SvgParameter name="fill">{{ .Color }}</se:SvgParameter>
            </se:Fill>
            <se:Stroke>
              <se:SvgParameter name="stroke">#404040</se:SvgParameter>
              <se:SvgParameter name="stroke-width">0.5</se:SvgParameter>
            </se:Stroke>
          </se:PolygonSymbolizer>
        </se:Rule>
        <se:Rule>
        {{- if not .HasLow }}
          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
          <ogc:Filter>
            <ogc:PropertyIsLessThanOrEqualTo>
              <ogc:PropertyName>height</ogc:PropertyName>
              <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
            </ogc:PropertyIsLessThanOrEqualTo>
          </ogc:Filter>
        {{- else if not .HasHigh }}
          <se:Name>&gt; {{ printf "%g" .Low }}</se:Name>
          <ogc:Filter>
            <ogc:PropertyIsGreaterThanOrEqualTo>
              <ogc:PropertyName>height</ogc:PropertyName>
              <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
            </ogc:PropertyIsGreaterThanOrEqualTo>
          </ogc:Filter>
        {{- else }}
          <se:Name>&#8804; {{ printf "%g" .High }}</se:Name>
          <ogc:Filter>
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>height</ogc:PropertyName>
                <ogc:Literal>{{ printf "%f" .Low }}</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>height</ogc:PropertyName>
                <ogc:Literal>{{ printf "%f" .High }}</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
        {{- end }}
          <se:MinScaleDenominator>34e3</se:MinScaleDenominator>
          <se:PolygonSymbolizer>
            <se:Fill>
              <se:SvgParameter name="fill">{{ .Color }}</se:SvgParameter>
            </se:Fill>
          </se:PolygonSymbolizer>
        </se:Rule>
        <se:VendorOption name="sortBy">height</se:VendorOption>
        {{ end }}
      </se:FeatureTypeStyle>
      <se:FeatureTypeStyle>
        <se:Name>area_labels</se:Name>
        <se:Description>
          <se:Abstract>
            FeatureTypeStyle for labels at colour areas
          </se:Abstract>
        </se:Description>
        <se:Rule>
          <se:MaxScaleDenominator>3e2</se:MaxScaleDenominator>
          <se:TextSymbolizer>
          <Halo></Halo>
            <se:VendorOption name="spaceAround">50</se:VendorOption>
            <se:Label>
              <ogc:Function name="Recode">
                <ogc:Function name="numberFormat">
                  <ogc:Literal>0.000000</ogc:Literal>
                  <ogc:PropertyName>height</ogc:PropertyName>
                </ogc:Function>
                {{ range . -}}
                {{ if .HasHigh -}}
                    <ogc:Literal>
                    {{- printf "%f" .High -}}
                    </ogc:Literal><ogc:Literal>
                    {{- printf "%g" .High -}}
                    </ogc:Literal>
                {{ end -}}
                {{ end }}
              </ogc:Function>
            </se:Label>
            <se:Font>
              <se:SvgParameter name="font-size">80</se:SvgParameter>
              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:LinePlacement>
                <se:PerpendicularOffset>5</se:PerpendicularOffset>
              </se:LinePlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
          </se:TextSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:MaxScaleDenominator>5e2</se:MaxScaleDenominator>
          <se:MinScaleDenominator>3e2</se:MinScaleDenominator>
          <se:TextSymbolizer>
          <Halo></Halo>
            <se:VendorOption name="spaceAround">80</se:VendorOption>
            <se:Label>
              <ogc:Function name="Recode">
                <ogc:Function name="numberFormat">
                  <ogc:Literal>0.000000</ogc:Literal>
                  <ogc:PropertyName>height</ogc:PropertyName>
                </ogc:Function>
                {{ range . -}}
                {{ if .HasHigh -}}
                    <ogc:Literal>
                    {{- printf "%f" .High -}}
                    </ogc:Literal><ogc:Literal>
                    {{- printf "%g" .High -}}
                    </ogc:Literal>
                {{ end -}}
                {{ end }}
              </ogc:Function>
            </se:Label>
            <se:Font>
              <se:SvgParameter name="font-size">40</se:SvgParameter>
              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:LinePlacement>
                <se:PerpendicularOffset>5</se:PerpendicularOffset>
              </se:LinePlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
          </se:TextSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:MaxScaleDenominator>7e2</se:MaxScaleDenominator>
          <se:MinScaleDenominator>5e2</se:MinScaleDenominator>
          <se:TextSymbolizer>
          <Halo></Halo>
            <se:VendorOption name="spaceAround">50</se:VendorOption>
            <se:Label>
              <ogc:Function name="Recode">
                <ogc:Function name="numberFormat">
                  <ogc:Literal>0.000000</ogc:Literal>
                  <ogc:PropertyName>height</ogc:PropertyName>
                </ogc:Function>
                {{ range . -}}
                {{ if .HasHigh -}}
                    <ogc:Literal>
                    {{- printf "%f" .High -}}
                    </ogc:Literal><ogc:Literal>
                    {{- printf "%g" .High -}}
                    </ogc:Literal>
                {{ end -}}
                {{ end }}
              </ogc:Function>
            </se:Label>
            <se:Font>
              <se:SvgParameter name="font-size">20</se:SvgParameter>
              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:LinePlacement>
                <se:PerpendicularOffset>5</se:PerpendicularOffset>
              </se:LinePlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
          </se:TextSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:MaxScaleDenominator>6e3</se:MaxScaleDenominator>
          <se:MinScaleDenominator>7e2</se:MinScaleDenominator>
          <se:TextSymbolizer>
            <Halo></Halo>
            <se:VendorOption name="spaceAround">50</se:VendorOption>
            <se:Label>
              <ogc:Function name="Recode">
                <ogc:Function name="numberFormat">
                  <ogc:Literal>0.000000</ogc:Literal>
                  <ogc:PropertyName>height</ogc:PropertyName>
                </ogc:Function>
                {{ range . -}}
                {{ if .HasHigh -}}
                    <ogc:Literal>
                    {{- printf "%f" .High -}}
                    </ogc:Literal><ogc:Literal>
                    {{- printf "%g" .High -}}
                    </ogc:Literal>
                {{ end -}}
                {{ end }}
              </ogc:Function>
            </se:Label>
            <se:Font>
              <se:SvgParameter name="font-size">12</se:SvgParameter>
              <se:SvgParameter name="font-weight">bold</se:SvgParameter>
              <se:SvgParameter name="font-family">Sans Serif</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:LinePlacement>
                <se:PerpendicularOffset>5</se:PerpendicularOffset>
              </se:LinePlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
          </se:TextSymbolizer>
        </se:Rule>
      </se:FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>