2016-03-21 9 views
1

Ich habe eine Multipoint-Geometrie (eine einzelne Geometrie mit mehreren Punkten) und ich möchte eine Beschriftung auf jedem der Punkte (die Bezeichnung ist immer die gleiche). Ist das mit SLD möglich? Momentan wird das Label nur an einem Punkt angezeigt.SLD - Platzieren Sie das Etikett auf jeder Multipoint

sieht mein SLD wie folgt aus:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<StyledLayerDescriptor version="1.0.0" 
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 
xmlns="http://www.opengis.net/sld" 
xmlns:ogc="http://www.opengis.net/ogc" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <NamedLayer> 
    <Name>Multipoint with labels</Name> 
    <UserStyle> 
     <Title>Default Point</Title> 
     <Abstract>A sample style that draws a point</Abstract> 
     <FeatureTypeStyle> 
     <Rule> 
      <Name>rule1</Name> 
      <Title>Red Square</Title> 
      <Abstract>A 6 pixel square with a red fill and no stroke</Abstract> 
      <PointSymbolizer> 
      <Graphic> 
       <Mark> 
       <WellKnownName>square</WellKnownName> 
       <Fill> 
        <CssParameter name="fill">#FF0000</CssParameter> 
       </Fill> 
       </Mark> 
       <Size>6</Size> 
      </Graphic> 
      </PointSymbolizer> 
      <TextSymbolizer> 
      <Label>NAME</Label> 
      </TextSymbolizer> 
     </Rule> 
     </FeatureTypeStyle> 
    </UserStyle> 
    </NamedLayer> 
</StyledLayerDescriptor> 

Antwort

0

standardmäßig die GeoServer Label-Engine geht in eine Menge Ärger nicht mehrfach auf der gleichen Funktion beschriften, so ist dies hart!

ich es endlich geschafft, die folgende (hässlich) SLD mit:

<Rule> 
     <Title>Capitals</Title> 
       <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>0</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
     <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>1</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
     <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>2</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
       <TextSymbolizer> 
     <Geometry> 
      <ogc:Function name="getGeometryN"> 
       <ogc:PropertyName>the_geom</ogc:PropertyName> 
       <ogc:Literal>3</ogc:Literal> 
      </ogc:Function> 
      </Geometry> 
     <Label>ID</Label> 
     </TextSymbolizer> 
    </Rule> 

Doch dies voraus, dass Sie wissen, wie viele Punkte es in Ihrem größten Multi-Point sind, und das ist ziemlich klein (sonst ist es viel der Kopie & Paste).

Ich hatte ursprünglich gehofft, in der Lage zu sein, die vertices function oder möglicherweise die labelAllGroup vendor option zu verwenden, aber leider arbeitete keiner mit mehreren Punkten.

+0

Vielen Dank für Ihre Vorschläge. Ich weiß nicht, wie viele Punkte es in einer Geometrie geben wird, aber es ist besser als nichts. Nach Ihren Vorschlägen suchte ich nach einer Art _iterate_-Funktion, die durch _numGeometries_ iterierte und alle Beschriftungen der Geometrie anzeigen würde, aber leider keine finden konnte. –