3

I want to draw polygon borders using a pattern of dashes and other symbols like triangles or circles but most polygons share borders so I get an undesired result.

Using this SLD code:

  <se:PolygonSymbolizer>
    <se:Fill>
      <se:SvgParameter name="fill">#cf72be</se:SvgParameter>
    </se:Fill>
  </se:PolygonSymbolizer>
  <se:LineSymbolizer>
    <se:Stroke>
      <se:GraphicStroke>
        <se:Graphic>
          <se:Mark>
            <se:WellKnownName>circle</se:WellKnownName>
            <se:Fill>
              <se:SvgParameter name="fill">#333333</se:SvgParameter>
            </se:Fill>
          </se:Mark>
          <se:Size>6</se:Size>
        </se:Graphic>
      </se:GraphicStroke>
      <se:SvgParameter name="stroke-dasharray">6 18</se:SvgParameter>
    </se:Stroke>
  </se:LineSymbolizer>
  <se:LineSymbolizer>
    <se:Stroke>
      <se:SvgParameter name="stroke">#AA0000</se:SvgParameter>
      <se:SvgParameter name="stroke-dasharray">10 14</se:SvgParameter>
      <se:SvgParameter name="stroke-dashoffset">14</se:SvgParameter>
    </se:Stroke>
  </se:LineSymbolizer>

I get this result in GeoServer:

Styling_polygons

Is there any way to avoid having two overlapping border lines or to make symbols perfectly overlap?

3
  • Most reliable work flow is to convert polygons into linestrings, remove duplicate line segments from the shared borders and use this cleaned linestring dataset for symbolizing the outline.
    – user30184
    Commented Oct 26, 2017 at 9:26
  • I was looking for a solution other than what you suggest, but thank you anyway.
    – DMS02
    Commented Oct 27, 2017 at 10:30
  • You deal with an old problem and I fear that you can't find a new magic solution. The two other alternatives that I know of are listed in gis.stackexchange.com/questions/171182/….
    – user30184
    Commented Oct 27, 2017 at 10:38

1 Answer 1

1

Agree with the other comments, it's a matter of pre-processing the data to extract the linework and remove the duplicates, then paint the linework in a FeatureTypeStyle above the fill one to avoid fill overlapping with the circles in the border.

Now, it would also be possible to do this on the fly in a Rendering Transformation, assuming there are scale dependencies avoiding to load everything into memory. This RT would have to be written of course, if you are interested see: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.